Если пользователь запустит скрипт который в цикле будет делать touch с выставлением atime, mtime, то с большой вероятностью вы эти файлы пропустите. Поэтому, как уже писали, единственное правильное решение использовать inotify.
А во-вторых, правильно ли я понимаю, что если перед подключением usb накопителя «выдернуть ethernet шланг», то события у вас не залоггируются?
Библиотека jsmpp предоставляет просто низкоуровневое api для работы с smpp. Это минус, когда требуется «просто отправить смску», но зато низкоуровневое api является гибким инструментом если уметь им пользоваться.
Насчёт data coding, в стандарте GSM 03.38 (SMS Data Coding Scheme) под него выделено 4 бита, остальные биты служат для других целей, и Alphabet.ALPHA_DEFAULT — это и есть как-бы «нулевой» data coding.
Bits 3 and 2 indicate the alphabet being used, as follows:
Bit 3 Bit2 Alphabet:
0 0 Default alphabet
0 1 8 bit
1 0 UCS2 (16bit) [10]
1 1 Reserved
Но в SMPP спецификации действительно SMSC Default Alphabet в случае, когда все биты = 0.
В библиотеке используется кодирование согласно стандарту GSM 03.38, правильно или нет трудно сказать.
P.S. грабли которые могут ещё встретиться: в случае латиницы, default alphabet не определяет кодировку, на практике может встречаться как latin1 (ISO-8859-1), так и кодировка GSM 03.38, в которой по другому кодируются некоторые символы (буквенные символы кодируются по прежнему, проблема со знаками). Также, в случае default alphabet, smsc может ожидать «упакованную» латиницу (т.е. 160 символов кодируются в 140 байт).
А ещё, с этой библиотекой нужно следить, если соединение порвалось, то переустанавливать соединение.
И вероятно, до сих пор не исправлен баг, когда входящий deliver_sm может начать обрабатываться одновременно с bind_*_resp (race condition), библиотека отвергнет этот deliver_sm из-за неправильного состояния сессии (ошибка редкая, но я сталкивался).
То есть, если абонент передвигается по территории покрытия одного LAC, не совершая и не принимая вызовов, в базе данных VLR информация о его местоположении не меняется.
Есть ещё «Periodic Location Update» инициируемый телефоном по таймеру.
Потому что иммутабельность это круто. Это позволяет писать более надёжные программы. А иногда это даёт бонусы в производительности (хотя и не часто, обычно наоборот). В частности немутабельность String позволяет реализовать быстрый substring, без аллокации и копирования нового массива символов. А иммутабельность Integer позволяет создать кеш объектов Integer для некоторого диапазона [-N, +N] и не порождать новые объекты при автобоксинге.
Передача параметров по ссылке и по значению. Важно помнить, что в Java параметры в процедуры передаются по значению только для простых типов (int, float, ...), их обёрток (Int, Float, ...) и для String. Это означает, что изменение значения параметра внутри процедуры не затронет переданную извне переменную. Для всех остальных — работает передача по ссылке (классов, массивов и др.). Т.е изменения внутри процедуры сохраняются в переданном извне объекте. Явно задать как передавать параметр — по ссылке или по значению — нельзя.
А я всегда думал что в java всё передаётся по значению. Только для объектов по значению передаётся ссылка.
Если понимать передачу по значению как невозможность поменять содержимое объекта переданного в метод, то тут тоже напутано. Значение Integer, Float,...String нельзя поменять не по этому, а потому что отсутствует api для изменения их внутреннего состояния. Если подсунуть в bootstrap java пропатченные String, Integer с добавленными методами меняющими внутреннее состояние, то ещё как можно будет изменять их внутри метода.
Аннотации из jsr 305 удобно использовать совместно с findbugs. Т.е. findbugs, проанализировав код, покажет проблемные места. К тому же Idea (кажется с 10-й версии) понимает эти аннотации (помимо своих из org.jetbrains.annotations) и подсвечивает проблемные места, что позволяет фиксить ошибки сразу, при редактировании кода, не доходя до этапа компиляции и запуска тестов.
С использованием вашего подхода, как мне показалось, мы прячем ошибку в логике, затрудняя её обнаружение. Возможно, к примеру, было бы лучше в «сеттере» бросать NPE если кто-то пытается туда передать null? Кстати, idea при компиляции может автоматически вставлять assert-ы в код для проверки notnull/nullable значений.
И ещё, не боитесь распухания PermGen из-за большого количества классов, ведь ajc для каждого Around метода порождает класс. Или эту проблему как-то можно решить?
Появляются доп. расходы на преобразование JVM ссылок в нативные и обратно.
Есть информация, что потери на преобразование ссылок, компенсируются тем, что за счёт уменьшения размеров объектов, больше данных помещается в кешах процессора, т.е. в некоторых случаях получаем не потерю, а прирост производительности.
Да, изменения не сохранятся, но и не потеряются, т.е. я могу вернуться обратно в данный буфер и сохранить изменения. И если я попытаюсь выйти (:q), находясь в другом буфере, я всё равно получу предупреждение о том, что изменения в первом буфере не сохранены.
При autowrite vim действительно будет ругаться на r/o файлы и не будет давать переключаться в другой буфер.
1) Строка с информацией по текущему файлы
set laststatus=2
set statusline=%f:%c:%l\ (%p%%)\ %y%([%R%M]%)\ buf:\ #%n\ ASCII:\ [0x%B]\ [%{&fileencoding}]
будет выводиться строка с именем файла, текущей строкой/колонкой курсора, типом файла (%y), hex-кодом символа в позиции курсора (%B) и кодировкой файла.
2) scrolloff — количество строк, которое всегда показывать в окне перед и после курсора, т.е. например, при скроллинге вниз, я всегда буду видеть под курсором N строк, т.е. листание начнётся до того, как я достигну курсором последней строки
Как вы знаете, если файл модифицирован, команды :bn, :bp, b# не сработают и выведут предупреждение о том, что надо его
сохранить.
Эту проблему проще решить установкой :set hidden (тогда будет происходить переключение без записи изменений) или :set autowrite (то же самое, только с автоматической записью изменений).
В том-то и дело, что если там чужой thread id, то раздувание происходит не всегда. Посмотрите внимательно мой комментарий.
P.S. вы точно не путаете biased lock со spin/thin lock?
Не ясно почему? Пользователь может все файлы из сети положить хоть куда, например в /tmp, потом отключиться от сети и записать на флешку?
А во-вторых, правильно ли я понимаю, что если перед подключением usb накопителя «выдернуть ethernet шланг», то события у вас не залоггируются?
Насчёт data coding, в стандарте GSM 03.38 (SMS Data Coding Scheme) под него выделено 4 бита, остальные биты служат для других целей, и Alphabet.ALPHA_DEFAULT — это и есть как-бы «нулевой» data coding.
Но в SMPP спецификации действительно SMSC Default Alphabet в случае, когда все биты = 0.
В библиотеке используется кодирование согласно стандарту GSM 03.38, правильно или нет трудно сказать.
P.S. грабли которые могут ещё встретиться: в случае латиницы, default alphabet не определяет кодировку, на практике может встречаться как latin1 (ISO-8859-1), так и кодировка GSM 03.38, в которой по другому кодируются некоторые символы (буквенные символы кодируются по прежнему, проблема со знаками). Также, в случае default alphabet, smsc может ожидать «упакованную» латиницу (т.е. 160 символов кодируются в 140 байт).
А ещё, с этой библиотекой нужно следить, если соединение порвалось, то переустанавливать соединение.
И вероятно, до сих пор не исправлен баг, когда входящий deliver_sm может начать обрабатываться одновременно с bind_*_resp (race condition), библиотека отвергнет этот deliver_sm из-за неправильного состояния сессии (ошибка редкая, но я сталкивался).
Есть ещё «Periodic Location Update» инициируемый телефоном по таймеру.
А я всегда думал что в java всё передаётся по значению. Только для объектов по значению передаётся ссылка.
Если понимать передачу по значению как невозможность поменять содержимое объекта переданного в метод, то тут тоже напутано. Значение Integer, Float,...String нельзя поменять не по этому, а потому что отсутствует api для изменения их внутреннего состояния. Если подсунуть в bootstrap java пропатченные String, Integer с добавленными методами меняющими внутреннее состояние, то ещё как можно будет изменять их внутри метода.
С использованием вашего подхода, как мне показалось, мы прячем ошибку в логике, затрудняя её обнаружение. Возможно, к примеру, было бы лучше в «сеттере» бросать NPE если кто-то пытается туда передать null? Кстати, idea при компиляции может автоматически вставлять assert-ы в код для проверки notnull/nullable значений.
И ещё, не боитесь распухания PermGen из-за большого количества классов, ведь ajc для каждого Around метода порождает класс. Или эту проблему как-то можно решить?
Есть информация, что потери на преобразование ссылок, компенсируются тем, что за счёт уменьшения размеров объектов, больше данных помещается в кешах процессора, т.е. в некоторых случаях получаем не потерю, а прирост производительности.
При autowrite vim действительно будет ругаться на r/o файлы и не будет давать переключаться в другой буфер.
1) Строка с информацией по текущему файлы
set laststatus=2
set statusline=%f:%c:%l\ (%p%%)\ %y%([%R%M]%)\ buf:\ #%n\ ASCII:\ [0x%B]\ [%{&fileencoding}]
будет выводиться строка с именем файла, текущей строкой/колонкой курсора, типом файла (%y), hex-кодом символа в позиции курсора (%B) и кодировкой файла.
2) scrolloff — количество строк, которое всегда показывать в окне перед и после курсора, т.е. например, при скроллинге вниз, я всегда буду видеть под курсором N строк, т.е. листание начнётся до того, как я достигну курсором последней строки
у меня стоит :set scrolloff=5
Эту проблему проще решить установкой :set hidden (тогда будет происходить переключение без записи изменений) или :set autowrite (то же самое, только с автоматической записью изменений).
Я использую hidden.
:help libcall
P.S. вы точно не путаете biased lock со spin/thin lock?