Да! Я имею в виду file_put_contents(), и я знаю что она не атомарна. Даже атомы не атомарны, не то что вызов file_put_contents или rename.
Если я делаю так: file_put_contents($this->filename, $this->toString()), то ни одно моё ошибочное действие в скрипте не сможет прервать процесс. Я уже защищён от промежуточных действий с моей стороны, где вероятность ошибки особенно велика.
Вероятность реального сбоя для вашего частного случая низка с обеими функциями. Мне кажется это тот случай, где преимущество скорее теоретическое, чем практическое. Отсюда и пример с кавычками — там тоже преимущество одного из вариантов налицо, но игра не стоит свеч.
Но, там где не получится использовать базу, всё равно буду использовать ваш подход, оно так спокойнее. Спасибо за статью, хорошо что подняли тему.
Вы это уже объясняли, все комменты я прочёл. Но в том то и дело что я сказал с оговоркой — атомарная на уровне интерпретатора. Понятно, что файл может быть записан наполовину, только ошибки в программе не могут к этому привести.
Для примера, строки в одинарных кавычках обрабатываются интерпретатором быстрее, чем в двойных. Вопрос в том, насколько ли быстрее, чтоб вообще уделять этому внимание. Здесь то же самое, ваш подход безопаснее, но настолько ли безопаснее, чтобы вообще говорить о нём?
Допустим, поменяли запись на переименование, но исправлена лишь очень малая часть потенциальных ошибок. Зато мы спокойны, всё сделали грамотно.
Просто вы так спокойно всё объясняете, хотел понять, может я чего-то не понял.
Ваш подход защищает от ошибок функции записи файла (атомарной для интерпретатора), заменой её на функцию переименования файла (атомарную для ОС).
Но так ли велика разница для 20 килобайтного файла конфига, который перезаписывается, ну, может 10 000 раз за время жизни проекта. Какова вероятность, что один подход сработает, и не сработает другой.
База данных даёт гораздо больше гарантий, если вам действительно нужны гарантии. SQLite весит килобайт под 300.
«Если мышка вам не очень нравится — считается себя счастливчиком. В Google Chrome огромное количество встроенных клавиатурных биндов (большинство из которых в точности повторяют....»
Звучит так, как будто приверженцев клавиатуры миновала кара небесная и они теперь счастливчики. Можно так:
Повезло и тем, кто не очень любит мышь, в Хроме уйма горячих клавиш, многие из них…
Вообще, основная проблема многих переводов — повсеместное использованием слов «вы», «ваш». Ну не принято так в русском. Режет слух. «переключает на номер таба, который вы выбрали». На номер нельзя переключить, можно только на сам таб, и не имеет значения, вы выбирали или кто-то другой, главное что всё-таки выбрали. Тогда «переключает на указанную вкладку».
А слова минималистический вообще нет. Как тут перевести не буду умничать, я не специалист. Но замечание выше сделали правильно, не стоило за это минусовать.
Удивительно быстрый Хром точно ли такой быстрый? У меня вот бывает, переключаешься на таб, и он его плааавно отрисовывает 5 секунд. И субъективно долго грузит страницы. В других браузерах всё в порядке, при том что табов открыто больше.
В консоли работает QuickLook и интерфейс с табами? Какие хорошие консольные файловые менеджеры есть для MacOS? Я бы даже обошёлся без поддержки русских имён файлов.
А то Мак лежит, пылится.
Для тех, кому не нужен полноценный файловый менеджер для работы с тысячами файлов на локальной и удалённых файловых системах — Finder отличная вещь, большего и не нужно.
Но вот полноценной замену Тотал Коммандеру для Мака нет. Наиболее близок ForkLift. Напишите, если кто-то знает лучше, потому что сейчас это pain in the ass.
Если для кого-то тема актуальна, не спешите.
С полгода назад я сменил пароль на 1.1.4, Ziphone. После чего Springboard начал циклично перезагружаться. В чём дело я не знал, сделал рестор, потерял все номера, фотки и SMS.
После рестора, конечно, опять поменял пароль. Необходимость повторного рестора убедила, что alpine достаточно хороший пароль.
Графика простая и схематичная, главное здесь - динамика игры.
Герою за определёное время нужно добраться до двери. Он способен прыгать на огромные расстояния и отталкиваться от стен, но дверь бывает так неудобно расположена, что непонятно как туда физически добраться. В ключевых точках заботливо расставлены мины. Самое классное - это убегать от роботов-собачек по узким коридорам или уворачиваться от самонаводящихся ракет.
Бросил играть из-за опасности разбить компьютер вдребезги или сорвать голос. Самое мясо начинается на любительских уровнях.
Они разделены на несколько типов. Головоломки, уровни на скорость, на ловкость, и такие, где нужно просто зажать стрелку вбок и наслаждаться результатом.
1. Правильно упакованный jQuery + gzip выливается в 12 кило на клиенте. Mootools и того меньше. Если же каждый плагин реализует кроссбраузерную работу с событиями, DOM, Ajax, то в сумме они могут весить гораздо больше, чем библиотека, в которой подобного дублирования кода нет.
2. Оптимизированные версии стандартных функций я добавляю как плагины во фреймворк, всё таки выигрыш по скорости в 5 раз - это не шутки.
3. Уровень кода в сторонних поделках очень низкий. Обычно я готов к тому, что придётся исправить 5-10 багов. Этот чёрт не так страшен, как его малюют.
Оптимальное решение для проекта любой сложности - использовать популярные библиотеки.
У них есть документация, они хорошо оптимизированы, протестированы. Новые люди знают как ими пользоваться. С выходом новой версии браузера добрые дяди без нас решают проблему совместимости.
Идея понравилась. Написал строчку — покурил. Ещё одну — выпил кофе.
Если я делаю так: file_put_contents($this->filename, $this->toString()), то ни одно моё ошибочное действие в скрипте не сможет прервать процесс. Я уже защищён от промежуточных действий с моей стороны, где вероятность ошибки особенно велика.
Вероятность реального сбоя для вашего частного случая низка с обеими функциями. Мне кажется это тот случай, где преимущество скорее теоретическое, чем практическое. Отсюда и пример с кавычками — там тоже преимущество одного из вариантов налицо, но игра не стоит свеч.
Но, там где не получится использовать базу, всё равно буду использовать ваш подход, оно так спокойнее. Спасибо за статью, хорошо что подняли тему.
Для примера, строки в одинарных кавычках обрабатываются интерпретатором быстрее, чем в двойных. Вопрос в том, насколько ли быстрее, чтоб вообще уделять этому внимание. Здесь то же самое, ваш подход безопаснее, но настолько ли безопаснее, чтобы вообще говорить о нём?
Допустим, поменяли запись на переименование, но исправлена лишь очень малая часть потенциальных ошибок. Зато мы спокойны, всё сделали грамотно.
Просто вы так спокойно всё объясняете, хотел понять, может я чего-то не понял.
Но так ли велика разница для 20 килобайтного файла конфига, который перезаписывается, ну, может 10 000 раз за время жизни проекта. Какова вероятность, что один подход сработает, и не сработает другой.
База данных даёт гораздо больше гарантий, если вам действительно нужны гарантии. SQLite весит килобайт под 300.
«Если мышка вам не очень нравится — считается себя счастливчиком. В Google Chrome огромное количество встроенных клавиатурных биндов (большинство из которых в точности повторяют....»
Звучит так, как будто приверженцев клавиатуры миновала кара небесная и они теперь счастливчики. Можно так:
Повезло и тем, кто не очень любит мышь, в Хроме уйма горячих клавиш, многие из них…
Вообще, основная проблема многих переводов — повсеместное использованием слов «вы», «ваш». Ну не принято так в русском. Режет слух. «переключает на номер таба, который вы выбрали». На номер нельзя переключить, можно только на сам таб, и не имеет значения, вы выбирали или кто-то другой, главное что всё-таки выбрали. Тогда «переключает на указанную вкладку».
А слова минималистический вообще нет. Как тут перевести не буду умничать, я не специалист. Но замечание выше сделали правильно, не стоило за это минусовать.
А то Мак лежит, пылится.
Но вот полноценной замену Тотал Коммандеру для Мака нет. Наиболее близок ForkLift. Напишите, если кто-то знает лучше, потому что сейчас это pain in the ass.
С полгода назад я сменил пароль на 1.1.4, Ziphone. После чего Springboard начал циклично перезагружаться. В чём дело я не знал, сделал рестор, потерял все номера, фотки и SMS.
После рестора, конечно, опять поменял пароль. Необходимость повторного рестора убедила, что alpine достаточно хороший пароль.
Графика простая и схематичная, главное здесь - динамика игры.
Герою за определёное время нужно добраться до двери. Он способен прыгать на огромные расстояния и отталкиваться от стен, но дверь бывает так неудобно расположена, что непонятно как туда физически добраться. В ключевых точках заботливо расставлены мины. Самое классное - это убегать от роботов-собачек по узким коридорам или уворачиваться от самонаводящихся ракет.
Бросил играть из-за опасности разбить компьютер вдребезги или сорвать голос. Самое мясо начинается на любительских уровнях.
Они разделены на несколько типов. Головоломки, уровни на скорость, на ловкость, и такие, где нужно просто зажать стрелку вбок и наслаждаться результатом.
2. Оптимизированные версии стандартных функций я добавляю как плагины во фреймворк, всё таки выигрыш по скорости в 5 раз - это не шутки.
3. Уровень кода в сторонних поделках очень низкий. Обычно я готов к тому, что придётся исправить 5-10 багов. Этот чёрт не так страшен, как его малюют.
Оптимальное решение для проекта любой сложности - использовать популярные библиотеки.
У них есть документация, они хорошо оптимизированы, протестированы. Новые люди знают как ими пользоваться. С выходом новой версии браузера добрые дяди без нас решают проблему совместимости.