Как стать автором
Обновить

Комментарии 65

приложение работает с БД c-tree и написано аж в 1984 году

В качестве языка использовался Go, т.к. весь остальной проект написан на нём.

Это как?
В качестве языка для современной программы, которая вычитала данные и которая ими потом пользовалась. (Т.е. старую DOS программу на go переписали.)

А вообще, «безумству храбрых поём мы песню». Т.е. вариант установить в виртуалку или DOSBox тот самый DOS, подцепиться к базе софтом того времени, склепать простенькую программу, которая сбросит все таблицы в csv даже не рассматривался. Ясно.
Это не переписка старой программы, а надстройка с доп.функционалом над невероятно древнющим ПО, которое установлено в большом количестве мест и всех устраивает. Сканить базу приходится переодически
Если вам для всего этого не приходится заводить эмулятор какого-нибудь Mac'а, на котором эмулируется PDP-11 (или, хуже того, PDP-10) то это так себе «древность». Вот компьютерное железо бывшее новинкой сразу после 2й мировой — это да.
К счастью до такого не дошло)))
вычисления проводятся в 256ричной системе
Очень режет глаз. Если не секрет, есть пара вопросов.

* программирование — это основная часть вашей профессиональной деятельности?
* если да, то есть ли базовые (академические) знания в C/C++, языке ассемблера, архитектуре ПК?

То, что вы так подробно описали про дату и время, сокращается до трёх предложений:
Время — 2-байтный int в формате HHMM
Дата — 4-байтный int, означающий число дней с (...).
Оба целых записываются в файл в порядке little-endian.
Да тут «не режет глаз»! Тут в качестве «открытий» преподносятся вещи, на которых и сегодня, по большому счёту, все операционки и весь интернет построен.

Статья на уровне: «мне тут потребовалось как-то починить автомобиль середины прошлого века, а ни один сервис его в починку не брал… я капот открыл — а там такая крутилка… и палка изогнутая, к ней поршни прикручены».

Кому это нужно? И зачем? Нет, я понимаю — для индувидуального развития оно, может, и неплохо. Но как-то уж очень много в последнее время на Хабре изобретателей велосипедов…
В процессе решения задачи, я нашёл в нете с десяток форумов, где пытались распарсить файлики данной БД и понять как там всё это работает. Думаю эта статья будет полезна тем несчастным, которым придётся порыться в подобном Г
Ну и зачем им вся эта «вода»? Описание формата, похожее на описание DBF было бы гораздо полезнее.

Как бы любой уважающий себя программист должен умерть вынуть структуру из файла, если её формат описан. То есть вот те три строки которые написал 4eyes — были бы весьма полезны, да. Но зачем же картинки рисовать, где показано как из отдельных байтов складывается струкура int16_t [7][3][2];? Это, как бы, должно быть достаточно очевидно читающему и так…
вынуть структуру из файла, если её формат описан

Это ж рутина, тлен и — к индусам.
А вот в отсутствии знания получить и систематизировать опыт — весьма полезное умение. Имхо, автор — молодец. Надоест велосипедить — книжк почитать никогда не поздно.
вынуть структуру из файла, если её формат описан
Это ж рутина, тлен и — к индусам.
Тем не менее изобретению кривого велосипеда, это осуществляющего, посвящана почти вся статья. Специфики собственно c-tree — с гулькин нос, зато «вычисления в 256-ричной системе счисления» — на виду.

А ничего, что никакие «вычисления в 256-ричной систем» тут не нужны, а нужен разбор бинарных данных, для которого даже в стандарнтной библиотеке Go есть специальные компоненты, нет?

А вот в отсутствии знания получить и систематизировать опыт — весьма полезное умение.
Несомненно. До достаточно ли этого для того, чтобы писать статьи? Вы себе представляете статью на форуме краснодеревщиков от автора не знающего о том, что такое токарный станок и чем он отличается от фрезировального или на форуме любителей кройки и шитья от человека не знаючего чем потайной шов отличается от прямого смёточного шва?

Надоест велосипедить — книжк почитать никогда не поздно.
А после этого — и статью написать можно, да.

Задумайтесь вот над чем: я на Go не пишу, но, тем не менее, за 5 минут нашёл в стандартной библиотеке компонент посвящённый решению той задачи, которую тут навелосипедил автор статьи. Потому что я знаю какую задачу тут решают, знаю что для её решения должен быть компонент — и оп-па, он там таки есть.

Автор этого не сделал, несмотря на то, что у него, вроде как «весь остальной проект написан на нём». О чём это говорит?

Ну честное слово, домашняя работа пятикласника и аналитическая работа в политический журнал — разные жанры, они оцениваются по разному! Тут, правда, знаний чуть побольше, чем у пятикласника, да и Хабр — не вполне на уровне рецензируемых журналов, но… идея понятна, нет?
mxis не обращай внимание на фанатиков из этого треда, ты молодец! Продолжай дальше!
Идея понятна, с Вами я не спорю. Вы о буквах, а я о людях.
Регулярно сталкиваюсь с теми, кто обладает знаниями, но не способен не только производить новые, но даже минимально творчески применить имеющиеся.
Потому живой интеллект (мне) видеть всегда приятно.

политический журнал

шутку оценил
ИМХО для этого куда эффективнее задать вопрос на StackOverflow и ответить самому на него.
На оба вопроса ответ — да.
Писака из меня не очень, согласен, но за критику спасибо, я учту
У меня есть подозрение, что таких «базовых знаний» нет у подовляющего большинства веб программистов. И при этом формально, «программирование» — основная сфера профессиональной деятельности.
Всё верно. И интерфейс есть, и документации куча, и драйвера подключения… Только всё это к новым версиям, а не к такой старой, которой владею я.
Писака нормальный, просто была интересна причина столь подробного изложения.

Было впечатление, что автор студент и только что открыл для себя порядок байт и представление целых чисел в памяти. В таком случае, вам есть что почитать, чтобы следующая подобная задача далась проще.

Или, что это не «оригинальное исследование», но вам хотелось разжевать представление целых для начинающих. В таком случае, любопытно, что вы не ограничились ссылками на википедию.

В любом случае, это не более, чем любопытство на тему: неужели разделение областей в программировании достигло той стадии, когда для успешной работы в какой-либо области, можно было не знать организации данных в памяти.
> Было впечатление, что автор студент и только что открыл для себя порядок байт и представление целых чисел в памяти.

скорей всего, большинство современных веб-программистов ничего не знает ни о порядке байт, ни о представлении целых чисел в памяти — и это совершенно нормально. Для работы им это не нужно. Прямо скажем, это почти никому не нужно, кроме узкой касты системщиков.

Имхо просто супер, что автор самостоятельно открывает для себя целый новый мир. Может быть, кто-то такой же прочитает эту статью, подумает «а чем я хуже», и тоже рванётся это изучать.
Не хочу сказать, что это плохо, все когда-то были студентами, и действительно, для многих задач это не нужно. Это не хорошо, и не плохо, когда-то этот этап должен был настать. Для меня просто удивительно, что вот он уже тут.

Прямо скажем, это почти никому не нужно, кроме узкой касты системщиков.
  • и геймдевщиков
  • и сетевиков
  • и десктопщиков
  • и кодировщиков (видео, изображения)
  • и бекендщиков (тех, кто получает данные по сети от мобильного приложения и от десктопа одновременно)
  • и джаваскриптщиков*


* джаваскриптщикам это не нужно ровно до тех пор, пока они не начнут использовать какой-нибудь API, в котором timestamp — это int. С некоторых пор они обнаружат, что (time_stamp + 1 == time_stamp ), хотя (time_stamp * 2 != time_stamp ). Пример такого API — twitter.
На самом деле не нужно никаких API.

Простйший пример на JavaScript:
a = 9007199254740992;
if (a + 1 === a) {
  // Пошли странные вещи
}


Проблема в том, что вся шаткая пирамида надстроенная над этими байтами и битами — состоит из протекающих абстракций.

Так что обходиться без знания основ вы можете только до тех пор, пока результат разработки «тап-ляп и в продакшн» является нормой.

Однако мы потихоньку подбираемся к моменту, когда ошибки в софте будут непосредственно приводить к миллионным убыткам и потере человеческиз жизней.

Есть ощущение, что после этого старые отмазки что «вы заплатили за софт три копейки и, в случае чего, эти три копейки назад и получите» (что только и позволяет подходу «тап-ляп и в продакшн» существовать) — перестанут действовать. Как они не действуют во многих других областях (если от вашей банки с соком умрёт семья из трёх человек, то и производитель и продавец получат проблем куда на большую сумму, чем стоимость этой банки).

Возможно тогда подход «мне „всю эту фигню“ знать не нужно — мои ж поделки не всегда падают, а только через два раза на третий» станет несколько менее популярным.

Но, боюсь, подходы изменятся только когда люди пройдут через боль и кровь.
Каждый байт может содержать значение от 0 до 255


В статье содержится большое количество полезной информации.
Ну come on, годная техническая статья новичка в области байтослерарства. Прокачается — будет что-то поинтереснее реверсить. Не стоит перебирать с сарказмом, так ведь и обломать можно.
От программиста обычно ожидается некоторая ясность мысли и умение обращаться с int16 без магии.
Ой коммон. Этот чел даже уроки в школе прогуливал по переводу систем счисления. Он как-то в 4 байта умудрился запихать 4311810304. Как? Когда там 4294967296 комбинаций. 256^4. А из систем счисления переводят так:
255 * 256^3 + 255*256^2 + 255*256^1 + 255*256^0 = 4294967295
А за комменты снизу о деградации, карму слили мне. А пацану подняли. Вот она самодеградация хабра.
Думаю, это не деградация, а разделение труда.

Знаете, бывает глубокий экзистенциальный кризис, когда закрыл последний тег и задумался: в школе меня мучили алгеброй, в институте — вышкой, дискреткой, архитектурой ПК, а еще алгоритмами и структурами данных. И заставляли писать hello world в синем монстре Borland С-крест-крест. Оказалось, всё — тлен (кроме пчёл). Можно было идти работать после 9 класса и не тратить время в пустую.

Так вот сейчас, похоже, действительно можно работать после 9 класса. Без систем счисления и всего этого. И разрабатывать сайты при должном уровне опыта быстрее и качественнее тру-сишника. Говорю вам как один из любителей приплюснутого си, который написал для домашнего использования фронт-энд к консольной утилите на express js — я слабо пригоден к такой работе.

Да, в nvidia не возьмут, ну и пошла она, эта нвидия, как говорил один эксцентричный программист. Есть большие ниши, где нужны другие знания.
Так вот сейчас, похоже, действительно можно работать после 9 класса. Без систем счисления и всего этого. И разрабатывать сайты при должном уровне опыта быстрее и качественнее тру-сишника.
Тут скорее вопрос: а зачем вообще разрабатывать «по кругу» одни и те же сайты, умеющие, по большому счёту, то, что сайты умели ещё лет 20, от силы, 10 лет назад.

Вот что такого полезного научился за последние 10 лет делать Хабр, что оправдало бы несколько происшедших редизайнов?

У меня есть ощущение, что мы наблюдаем очередной дотком, когда люди выкидывают деньги на создание вещей, которые, в общем, никому особо и не нужны — что порождает повышенный спрос на программистов, такой, что даже те, кто решили «пойти работать после 9 класса забив на все основы» находят себе применение.
НЛО прилетело и опубликовало эту надпись здесь
зарабатывать под сотню килорублей, что для 2008 года было неплохо

Неплохо? Учитывая среднюю зп по России в 2008 году (17,5к) да, для одиннадцатиклассника «неплохо» :)
НЛО прилетело и опубликовало эту надпись здесь
Да даже для Москвы) До сих пор средняя по Мск ниже, чем 100к. Понятно, что в IT зп выше, но все равно.
Так вот сейчас, похоже, действительно можно работать после 9 класса


Так и раньше можно было. Слесарь там, токарь второго разряда. Ну максимум в ПТУ немного подучиться.

Или вы считаете, что в 2018 году «делать вебсайты» — это что-то сильно более перспективное, чем точить болванки в 1988-м?
Хорошее замечание, кстати. Токарь в 1988м получал весьма неплохо.

Что касается перспективности… хорошие токари и сейчас востребованы. И вебсайты в 2038м, скорее всего, делать не перестанут (ну… если 19е января переживут).

Так что да — аналогия более, чем полная…

P.S. Кстати для того, чтобы понять причём тут 19е января ведь тоже нужно про байты знать, вот ведь незадача…
Вот только три четверти заводов, ищущих сейчас токаря, хотят специалиста со знанием ЧПУ, а половина встречаемых мной вебсайтов сделаны в конструкторах.

А так-то выбор между высшим образованием и «рабочей специальностью» был всегда.
хотят специалиста со знанием ЧПУ
наверное, дальше ЧПУ будут лучше, но у меня сейчас тесть на самом рядовом заводе работает (разряд — хз, нормальный рядовой специалист), так там эти старые ЧПУ хоть и есть, но мало кому нужны. У хорошего специалиста на механических, настроенных под конкретную деталь, станках производительность выше раз в 10.
Тут не только и не столько в старых-новых ЧПУ дело.
Если работа разовая (скажем, ремонтно-механический цех), или малосерийная (3-4 детали), то быстрее изготовить руками.
Если партия большая, уже выгоднее использовать ЧПУ, но опять же — если есть соответствующего уровня специалист, который не провозится с ЧПУ столько же, сколько 10 обычных токарей будут изготавливать эту партию.
Это теория или практика?

Спрашиваю потому, что я слышал противоположную историю на практике: сначала долго и нудно настраиваются станки, делаются специальные приспособления, зато потом на них делается по 100-200 деталей за смену. И альтернатива, ЧПУ: без особой наладки выпускается 10-20 деталей за смену. Нужно 3 детали — берем ЧПУ, нужно 500 — делаем вручную.
Я — не токарь, естественно, просто из любопытствующих по части металлообработки. Это слова токарей-профессионалов, работающих руками в одиночку, часть ответа на вопрос «почему вы не осваиваете ЧПУ, а по-прежнему работаете вручную?».

Посудите сами, если откинуть особенности конкретных ЧПУ, проблемы производственного процесса на каждом конкретном предприятии: ЧПУ предназначены как раз для того, чтобы на основе раз написанной программы массово выпускать одну и ту же деталь. В противовес обычному станку, на котором можно выпускать разнообразные детали. Какой смысл в промежуточном представлении — программе для ЧПУ, если можно непосредственно перенести чертеж в металл руками токаря? Только массовость и повторяемость.

Я думаю, мнение, на которые опираетесь вы, вызвано проблемами конкретного предприятия — им проще сделать оснастку и руками нашарашить партию деталей, нежели настраивать ЧПУ станок. Либо ЧПУ у них — оно, либо толковых операторов нет, кмк.
Могу предположить, что проблема в конкретных устаревших станках, юстировке, износе инструмента и т.п.
На самом деле всё проще. У описанного процесса есть не две стадии, а три:
1. Перенести (разово) чертёж с бумаги на метал.
2. Выпустить серию на станке с ЦПУ.
3. Сделать огроменную серию деталей со специальной оснасткой и приспособлениями.
Причём границы между этими тремя шагами — очень размыты. Если у вас изначально и бумаги-то нет, а есть 3D-модель в AutoCad, то может исчезнуть первая стадия, если вы делаете что-то очень-очень хитромудрое, то может не быть третьей стадии, а если у вас станки старые, то, наоборот, может первая стадия с третьей сомкнуться. Но корпуса для iPhone'ов делаются на станках с ЧПУ, несмотря на миллионные тиражи.
Если у вас изначально и бумаги-то нет, а есть 3D-модель в AutoCad, то может исчезнуть первая стадия,

Она может исчезнуть и без наличия 3D модели — эта модель м.б. составлена по бумажному чертежу с целью переноса в ЧПУ.

Но корпуса для iPhone'ов делаются на станках с ЧПУ, несмотря на миллионные тиражи.

И это логично — в этом и есть смысл ЧПУ…
НЛО прилетело и опубликовало эту надпись здесь
Ну этом и разница. Кто-то знает когда, а кто-то знает почему.
чем точить болванки в 1988-м?
Не знаю, как сейчас, а в 2010 быть токарем 5-6 разряда было не менее перспективно, чем быть программистом. В моем городе заводов, где они были нужны минимум 2, а количество токарей с выходом на пенсию стремительно умешьшалось.

В самом начале 90х родственника звали вернуться на завод, доработать пару лет пенсионером. Пришел, говорит: я тут XX лет проработал, хочу и могу быть 5го разряда. Ему в ответ: у нас нельзя пенсионеру, на пол-ставки, и аж 5го разряда. Он: ладно, иду домой. Итог — выдали «тестовое задание», сделал, потом еще 3 года просили не уходить.
Не-не-не, клепать веб-странички, не будучи уверенным, сколько обычно бит в одном байте — это не выше второго разряда.

Шестой разряд — он немного про другой объём опыта и знаний.
Ну вообще мы сейчас не о работе. А о хабре как ресурсе для развития, идей и прочем. По заголовку я ожидал увидеть статью о «реверсинжиниринге», может нестандартные юзкейсы использование каких-то тулов, или в этом роде. Исследовательскую деятельность, а на деле получил открытие, что байт обнуляется после 255. Эта статья была одобрена сообществом «проффесионалов», которые даже не увидели простейших ошибок и прочее. Т.е. люди хотят видеть статьи уровня школьников. И это сообщество действительно деградирует. Все это напоминает поведение детей из книги «Повелитель мух», т.к. уже никто не может повлиять на их поведение, сообщество стало закрытым, выдворило всех, кто критикует их деятельность, кто способен критически воспринимать написанное, может увидеть ошибки.
НЛО прилетело и опубликовало эту надпись здесь
Сразу вспоминается старомодное «объем памяти — 2К восьмиразрядных слов» и т.п.
НЛО прилетело и опубликовало эту надпись здесь
Вот они современные программисты.
Грусть печаль. Вы в университете хоть учились?
Ну прекратите. Что это за упражнения «кто больше унизит автора и скажет, что он недопрограммист»? К чему эта желчь? Комплексы что ли?

Я ставлю плюс статье просто хотя бы потому, что даже если это и вода и основы, то это техническая вода и технические основы. А не очередное пространное эссе-сочинение на тему «почему я не люблю HR» / «как нам обустроить Россию IT» / «как я ненавижу 1С» / унылая статья ни о чем из корпоблога / etc, которыми нынче заполонен Хабр.

Человек столкнулся с технической проблемой и рассказал, как решил ее, выложил код и алгоритмы. Плохо решил ли, хорошо ли — все это можно сказать и обсудить корректно. Вместо этого ответ — потоки желчи и упражнения в «остроумии». Причем зачастую от людей, не разместивших ни одной статьи.
НЛО прилетело и опубликовало эту надпись здесь
Согласен. Пора привыкать, что хабр — место для школьников.

Есть у меня подозрение, что full-аккаунты преимущественно у взрослых.

Желчные комментарии лучше, чем отсутствие комментариев. Если бы не они, я бы эту статью и не увидел скорее всего. Сама статья воспринята читателями вполне положительно.
Главное, не быть излишне впечатлительным, иначе можно психануть и сжечь второй том.
Очень интересная логика. Если это диапазон с 0 минут до 45 минут в часе, то в байты добавляется по 15 минут. НО! Если это последние 15 минут в часе (с 45 до 60), то в байты добавляется число 65.

Получается что 1 час всегда равен числу 100

Как ни силился, не смог понять, что имеется в виду. Гранулярность учета времени — 15 минут?
Первые 45 минут добавляется по 15 минут, т.е. по итогу будет то же — 45. Потом 65, что даст сумму 110, но тут сумма — всегда 100, как указано.
формат времени — HHMM, где HH — 2 цифры часов, MM — 2 цифры минут. 1145 = «11:45». 1145+20 = 1205.
Ах, вот оно что… «Получается что 1 час всегда равен числу 100» мда…
Спасибо за перевод.
Могли бы в код посмотреть.

Там же ясно написано:
hours := totalBytes / 100
minutes := totalBytes - hours*100
Откуда с одной стороны, становится ясно, что имел в виду автор, а с другой — как раз и порождает тот поток комментариев, что мы тут наблюдаем.

Почему, чёрт побери, не
hours := totalBytes / 100
minutes := totalBytes % 100

Это попытка «запутать противника»? До индусского кода — рукой подать. Я понимаю, если бы речь шла о каком-то экзотическом языке программирования, где остатка от деления нету… но в Go-то он есть! И в JavaScript есть. И в Basic есть… тогда зачем? И почему?

И так — почти вся статья…
Спасибо, но мне не очень интересно reverse-engineer'ить мысли автора и формат по коду. Я проглядел статью, чтобы получить представлеие о формате БД. Некоторе время назад приходилось разбираться с БД на основе b-tree из 90х, но там формат был сложнее — еще был файл блокировок.

Интересно, компилятор оптимизирует последовательные операции деления и получения остатка с учетом того, что div выдает сразу оба?
Да и то, что есть в этих кусках, есть и в статье:
Если разделить это число на 100, то целая часть будет равна часам, а дробная – минутам:
1545/100 = 15.45

Лично мне это не объяснило ни «Получается что 1 час всегда равен числу 100», ни про 65, ни комбинацию этих двух в одном абзаце.
Лично мне это не объяснило ни «Получается что 1 час всегда равен числу 100», ни про 65, ни комбинацию этих двух в одном абзаце.
«Мясник так видит»… чего вы хотите от человека, открывшего для себя «256-ричную систему счисления»? Хотя как описать тот формат, что в этом чуде изобрели строго формально — я даже не знаю… и главное, непонятно: зачем.

Потому что делить на 100 — как бы не сильно проще, чем делить на 60… есть подозрение что там у них общая процедура для времени и числ с десятичной фиксированной точкой… но так как этим всем автор статьи не игрался, то всё это осталось «за кадром»…
Я проглядел статью, чтобы получить представлеие о формате БД.
А в статье и нет этой информации. Индексы (то есть, собственно, c-tree) проигнорированы, из строчек таблицы выцеплено крошечное подмножество… так-то, для того, для чего этот модуль делали — этого, наверное, и достаточно… но к более-менее полноценному описанию формата эта статья не подбирается даже и близко.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории