Я решил проблему коллизий проще: фотографии именуются по схеме YYYYMMDDNNNN, где NNNN — порядковый номер.
Сортировка происходит по времени съемки (с точностью до секунд), а если секунды совпали — то по цифрам в оригинальном имени файла. Все камеры, что я когда-либо использовал, нумеруют файлы последовательно.
Если уж взялся за ассемблер, то знание всех возможностей процессора подразумевается :)
Человек, в отличие от машины, гораздо хуже просчитывает такты, которые занимает та или иная инструкция. Особенно с учетом всяких привходящих обстоятельств: кэшей, пайплайнов, наличия/отсутствия отдельных блоков для распараллеливания инструкций, предсказания переходов и т. п. В результате код, написанный человеком, может быть компактнее, но при этом выполняться медленнее, чем сгенерированный оптимизирующим компилятором.
Вот если компилятор староват и не умеет, скажем, использовать векторные инструкции — тогда да, ассемблер ручной выделки может в разы увеличить производительность. Но в общем случае компилятор забарывает человека.
Очень сомнительное утверждение.
Если вы не гуру AVX512 и прочих хитрых расширений, то любой оптимизирующий компилятор С уделает ваш ассемблерный код как по скорости работы, так и по скорости разработки.
Язык должен полностью брать на себя все управление данными, в том числе разбираться с их типами. Что вполне реально. А программист должен заниматься логикой программы.
Потом программист сидит и бьется головой о клавиатуру, пытаясь понять, в каком месте его программы данные из числа становятся строкой, и var + 1 вместо прибавления единицы к числу начинает приписывать единичку в хвост строки…
Передача параметров через стек. Надо просто отказаться от списка формальных параметров, а передавать параметры через какой либо список.
А извлекать эти параметры из списка потом как? По порядковым номерам? У — удобство!
Списки формальных параметров для того и придумали, чтобы не париться с нумерацией аргументов, а сразу иметь понятное имя.
Возвращать переменное число значений функции мне не совсем понятно для чего и как этим можно воспользоваться. Возвращать в любом случае надо какую то одну сущность.
Если вам непонятно — поиграйтесь с языками, поддерживающими возврат списка значений. Например, с Lua. Там можно вернуть, например, список из bool и какого-то значения: если bool == true, то в значении — полезная нагрузка, а если в bool лежит false, то это значит, что произошла ошибка, а вместо значения — дополнительные сведения об этой ошибке.
Небольшие нюансы возникают с использованием команды goto. Мне не понятно почему с таким остервенением борются с этой командой.
Потому что:
а) с помощью goto плюс if можно сэмулировать все структурные управляющие конструкции (циклы с пред- и постусловием, switch/case, и т.п.). При этом код воспринимается хуже (надо вдумываться, куда мы переходим и при каких условиях). Ну и ошибки легче допустить.
б) Очень легко превратить код в лапшу, в которой невозможно разобраться.
Чтобы понять, насколько хренов бывает goto, можно поиграть на досуге в старую игру на бейсике:
Начальный код:
10 LET A = 0
20 LET B = 0
1. Играют двое. Ходят по очереди. За один ход можно написать в программе (в свободной строке с любым номером, большим 30) одну строчку.
2. После каждого хода противник может заявить, что программа зациклена. Программу запускают и проверяют, что она действительно зациклена (т.е. не останавливается через оговоренное время — скажем, 30 секунд). Если да, то объявивший выигрывает. Если нет, то проигрывает.
3. Игрок А может писать одну из двух строк на выбор: а) LET B = NOT B, и б) IF A THEN GOTO xxx
4. Игрок Б, соответственно, может писать а) LET A = NOT A, и б) IF B THEN GOTO xxx
5. Цель для GOTO должна существовать.
По договоренности можно вводить другие допустимые команды (например, LET A = NOT B).
Как правило, уже в районе десятого хода программа превращается в фигпоймичокакработает и очень неплохо иллюстрирует, что такое спагетти-код.
Отладка простейшей программы на Си может занять месяца. И все это по моему мнению порождено типизацией в языках программирования.
Отладка простейшей программы на пыхпыхе тоже может занять месяца, если программист неопытный и не понимает, что творит. Я уж не говорю про ассемблер. Порождено ли это отсутствием типизации? Не уверен.
Кого заинтересовала моя работа пишите на почту, вышлю дистрибутив.
Уже лет десять как исходники можно выложить на какой-нибудь гитхаб. Заодно и желающие помочь смогут сразу включиться в работу над кодом.
Или вы думаете, что кто-то всерьез захочет использовать в коммерческом проекте интерпретатор неизвестного языка программирования, да еще и без исходников?
MFT может висеть в памяти, он как-бы в кеше в нормальном режиме работы, для ускорения работы. Считали и стерли сразу.
То есть вы вручную собираетесь парсить MFT — я вас правильно понимаю? Иначе как вы собираетесь «бороться» с операционной системой, которая по множеству причин может попытаться прочитать MFT, обнаружит поврежденные данные и откажется работать с диском? А то и в синий экран выпадет.
Есть кэш в оперативной памяти. Случай когда на компе 0.2 Гбайта памяти не рассматриваем. Нет большого объема памяти, нет быстрого удаления файлов.
При наличии памяти ни каких проблем.
При наличии памяти (т.е. кэширования дисковых операций) проблемы только начинаются. Нет гарантии, что все, что вы пишете, попадает на диск в реальности.
Если же действовать в обход ОС и писать на диск напрямую (например, посылая команды в контроллер), то:
а) это долго, и
б) это чревато синими экранами.
Ну как минимум это бы поменяло русло вашего с шефом разговора. Но речь-то не об этом.
Шефа, скорее всего, и так взъ**ли ни за что ни про что, а тут еще виновник торжества прилюдно огрызается. Вот он и психанул.
Я бы на вашем месте… эээ… вряд ли оказался, если честно. Начнем с того, что если бы я прямо сейчас увидел в мужском туалете некий девайс и посторонних людей, я бы первым делом поинтересовался, куда у этого аппарата дрожжи закладываются. И уж вряд ли полез бы все это фоткать. :)
Можно параллельно обходить каталоги и затирать уже обнаруженные файлы или просто случайные области диска, файловую таблицу, например.
Если перетереть MFT, обход подкаталогов станет несколько затруднительным.
Если затирать файлы параллельно с обходом (т.е., собственно, в процессе обхода), то ни о какой осознанной последовательности затирания не будет и речи: что первое нашли, то и трём. Нашли кэш браузера с миллионом мелких картиночек — будем дожидаться, пока затрется миллион мелких картиночек.
Раскидывать обход подкаталогов и запись на диск на отдельные процессы — тоже толку будет мало, т.к. блок головок у диска один. Чтобы записать что-то в файл, надо спозиционировать головки в одну позицию; чтобы продолжить обход подкаталогов — на другую. Общая скорость от этого прыганья только упадет (попробуйте одновременно писать на механический диск два больших файла — это медленнее, чем писать их последовательно).
Меня неоднократно домогались в ЛинкедИне разнообразные агенты (включая директоров агентств, если верить написанному в профиле). Почти со всеми разговор шел по одному и тому же сценарию:
— мы хотели бы вам предложить работу в крупной международной, бла-бла-бла. Хотите обсудить?
— вообще-то я трудоустроен.
— помощь с релокейшеном и жильем на первое время, конкурентная зарплата, офис расположен в бла-бла-бла… Давайте я вам позвоню и мы все обсудим?
— Ну что ж, давайте.
А дальше — звонок, и начинается цирк с конями. Человек, только что певший радостные рекламные песни, начинает задавать вопросы типа «почему вы хотите работать именно в этой компании?», «каковы ваши зарплатные ожидания?», «чем вы выгодно отличаетесь от других кандидатов?» и т. п. Нет, я понимаю — у него перед носом лежит стандартный опросник, но он же мне даже название компании не сообщил! Оно же типа секретное. И деятельность компании описал двумя словами, чтоб я не дай бог ее сам не нашел. И звонок у него по сути холодный — откуда мне знать актуальные зарплаты специалистов где-нибудь в Швеции?
Программами записи действий клавиатуры и мыши (… ) я сделал несколько макросов,
Первое, что пришло в голову — автозаполнение форм. Правильные автозаполнялки умеют и чекбоксы с радиобаттонами выставлять.
Второе, что пришло в голову — скрипт на чем-нибудь типа greasemonkey, чтобы прямо через DOM документа выставлял нужные значения.
И то, и другое работает практически мгновенно — не надо ждать, пока что-то там проскроллится. А после заполнения можно и вручную пару галок поменять, чтобы не у всех все было одинаково. :)
Вот вы обвиняете человека в излишней принципиальности, а ведь всех обстоятельств увольнения не знаете. Не надо так.
Мою знакомую однажды уволили примерно так же: с утра ничто не предвещало, в обед — «до свидания». Думаете, из-за ее принципиальности? Вовсе нет. Просто директору показалось, что его обсуждают за спиной, и он широким жестом уволил половину отдела.
Это когда есть куда пойти работать не по специальности. Да еще и чтоб время оставалось на поиски «правильной» работы.
Когда город — чужой, полезных знакомых нет, тогда даже грузчиком будет проблематично устроиться.
У женщин бывают проблемы с «валить». Сужу по жене: страшно же! А вдруг никуда не возьмут? А вдруг работу не найду? Кому я нужна — ааааа!!!
И терпячки у женщин как-то побольше, мне кажется. Могут работать там, где мужик бы уже спился или с ума сошел.
Недавно в компании прошло большое сокращение, поэтому количество работы на одного сотрудника резко выросло. Поэтому ей пришлось регулярно задерживаться на работе, иногда даже выходить по субботам. Такая же проблема возникла и у её коллег.
Вспомнилась история про мужика, который завел себе вторую семью в соседнем городе. И длилось это несколько лет, пока жена случайно не узнала, что никаких командировок и переработок у ее благоверного не бывает…
«1,5» + «2.5» =?
«5E2» + ".01" =?
" 123" + «3 2 1» =?
Сортировка происходит по времени съемки (с точностью до секунд), а если секунды совпали — то по цифрам в оригинальном имени файла. Все камеры, что я когда-либо использовал, нумеруют файлы последовательно.
Чего, простите?
Bomberman — там как раз взрывы этаким крестиком расходились.
Человек, в отличие от машины, гораздо хуже просчитывает такты, которые занимает та или иная инструкция. Особенно с учетом всяких привходящих обстоятельств: кэшей, пайплайнов, наличия/отсутствия отдельных блоков для распараллеливания инструкций, предсказания переходов и т. п. В результате код, написанный человеком, может быть компактнее, но при этом выполняться медленнее, чем сгенерированный оптимизирующим компилятором.
Вот если компилятор староват и не умеет, скажем, использовать векторные инструкции — тогда да, ассемблер ручной выделки может в разы увеличить производительность. Но в общем случае компилятор забарывает человека.
Очень сомнительное утверждение.
Если вы не гуру AVX512 и прочих хитрых расширений, то любой оптимизирующий компилятор С уделает ваш ассемблерный код как по скорости работы, так и по скорости разработки.
Потом программист сидит и бьется головой о клавиатуру, пытаясь понять, в каком месте его программы данные из числа становятся строкой, и var + 1 вместо прибавления единицы к числу начинает приписывать единичку в хвост строки…
А извлекать эти параметры из списка потом как? По порядковым номерам? У — удобство!
Списки формальных параметров для того и придумали, чтобы не париться с нумерацией аргументов, а сразу иметь понятное имя.
Если вам непонятно — поиграйтесь с языками, поддерживающими возврат списка значений. Например, с Lua. Там можно вернуть, например, список из bool и какого-то значения: если bool == true, то в значении — полезная нагрузка, а если в bool лежит false, то это значит, что произошла ошибка, а вместо значения — дополнительные сведения об этой ошибке.
Потому что:
а) с помощью goto плюс if можно сэмулировать все структурные управляющие конструкции (циклы с пред- и постусловием, switch/case, и т.п.). При этом код воспринимается хуже (надо вдумываться, куда мы переходим и при каких условиях). Ну и ошибки легче допустить.
б) Очень легко превратить код в лапшу, в которой невозможно разобраться.
Чтобы понять, насколько хренов бывает goto, можно поиграть на досуге в старую игру на бейсике:
Начальный код:
10 LET A = 0
20 LET B = 0
1. Играют двое. Ходят по очереди. За один ход можно написать в программе (в свободной строке с любым номером, большим 30) одну строчку.
2. После каждого хода противник может заявить, что программа зациклена. Программу запускают и проверяют, что она действительно зациклена (т.е. не останавливается через оговоренное время — скажем, 30 секунд). Если да, то объявивший выигрывает. Если нет, то проигрывает.
3. Игрок А может писать одну из двух строк на выбор: а) LET B = NOT B, и б) IF A THEN GOTO xxx
4. Игрок Б, соответственно, может писать а) LET A = NOT A, и б) IF B THEN GOTO xxx
5. Цель для GOTO должна существовать.
По договоренности можно вводить другие допустимые команды (например, LET A = NOT B).
Как правило, уже в районе десятого хода программа превращается в фигпоймичокакработает и очень неплохо иллюстрирует, что такое спагетти-код.
Отладка простейшей программы на пыхпыхе тоже может занять месяца, если программист неопытный и не понимает, что творит. Я уж не говорю про ассемблер. Порождено ли это отсутствием типизации? Не уверен.
Уже лет десять как исходники можно выложить на какой-нибудь гитхаб. Заодно и желающие помочь смогут сразу включиться в работу над кодом.
Или вы думаете, что кто-то всерьез захочет использовать в коммерческом проекте интерпретатор неизвестного языка программирования, да еще и без исходников?
То есть вы вручную собираетесь парсить MFT — я вас правильно понимаю? Иначе как вы собираетесь «бороться» с операционной системой, которая по множеству причин может попытаться прочитать MFT, обнаружит поврежденные данные и откажется работать с диском? А то и в синий экран выпадет.
При наличии памяти (т.е. кэширования дисковых операций) проблемы только начинаются. Нет гарантии, что все, что вы пишете, попадает на диск в реальности.
Если же действовать в обход ОС и писать на диск напрямую (например, посылая команды в контроллер), то:
а) это долго, и
б) это чревато синими экранами.
Шефа, скорее всего, и так взъ**ли ни за что ни про что, а тут еще виновник торжества прилюдно огрызается. Вот он и психанул.
Я бы на вашем месте… эээ… вряд ли оказался, если честно. Начнем с того, что если бы я прямо сейчас увидел в мужском туалете некий девайс и посторонних людей, я бы первым делом поинтересовался, куда у этого аппарата дрожжи закладываются. И уж вряд ли полез бы все это фоткать. :)
Ну вот зачем на конфликт-то было идти? Тем более, что фотка все равно не получилась.
Если перетереть MFT, обход подкаталогов станет несколько затруднительным.
Если затирать файлы параллельно с обходом (т.е., собственно, в процессе обхода), то ни о какой осознанной последовательности затирания не будет и речи: что первое нашли, то и трём. Нашли кэш браузера с миллионом мелких картиночек — будем дожидаться, пока затрется миллион мелких картиночек.
Раскидывать обход подкаталогов и запись на диск на отдельные процессы — тоже толку будет мало, т.к. блок головок у диска один. Чтобы записать что-то в файл, надо спозиционировать головки в одну позицию; чтобы продолжить обход подкаталогов — на другую. Общая скорость от этого прыганья только упадет (попробуйте одновременно писать на механический диск два больших файла — это медленнее, чем писать их последовательно).
— мы хотели бы вам предложить работу в крупной международной, бла-бла-бла. Хотите обсудить?
— вообще-то я трудоустроен.
— помощь с релокейшеном и жильем на первое время, конкурентная зарплата, офис расположен в бла-бла-бла… Давайте я вам позвоню и мы все обсудим?
— Ну что ж, давайте.
А дальше — звонок, и начинается цирк с конями. Человек, только что певший радостные рекламные песни, начинает задавать вопросы типа «почему вы хотите работать именно в этой компании?», «каковы ваши зарплатные ожидания?», «чем вы выгодно отличаетесь от других кандидатов?» и т. п. Нет, я понимаю — у него перед носом лежит стандартный опросник, но он же мне даже название компании не сообщил! Оно же типа секретное. И деятельность компании описал двумя словами, чтоб я не дай бог ее сам не нашел. И звонок у него по сути холодный — откуда мне знать актуальные зарплаты специалистов где-нибудь в Швеции?
Вот это — некомпетентность или норма?
Первое, что пришло в голову — автозаполнение форм. Правильные автозаполнялки умеют и чекбоксы с радиобаттонами выставлять.
Второе, что пришло в голову — скрипт на чем-нибудь типа greasemonkey, чтобы прямо через DOM документа выставлял нужные значения.
И то, и другое работает практически мгновенно — не надо ждать, пока что-то там проскроллится. А после заполнения можно и вручную пару галок поменять, чтобы не у всех все было одинаково. :)
Мою знакомую однажды уволили примерно так же: с утра ничто не предвещало, в обед — «до свидания». Думаете, из-за ее принципиальности? Вовсе нет. Просто директору показалось, что его обсуждают за спиной, и он широким жестом уволил половину отдела.
Когда город — чужой, полезных знакомых нет, тогда даже грузчиком будет проблематично устроиться.
Расскажите!!!
Интересно же.
И терпячки у женщин как-то побольше, мне кажется. Могут работать там, где мужик бы уже спился или с ума сошел.
Вспомнилась история про мужика, который завел себе вторую семью в соседнем городе. И длилось это несколько лет, пока жена случайно не узнала, что никаких командировок и переработок у ее благоверного не бывает…