trim=
является вторым аргументом функции mean()
, и вы не хотите передавать TRUE
этому аргументу при вызове в tapply()
. Вот что делает tapply()
: он передает дополнительные аргументы, сохраняя порядок в вызываемой функции.
Таким образом, вам нужно явно назвать аргумент, который вы хотите отправить TRUE
, в данном случае na.rm=
, поскольку это 3-й, а не 2-й аргумент для mean()
:
> attach(LungCap6)
> tapply(Age, Smoke, mean, na.rm=TRUE)
[1112 ] Проверьте порядок аргументов с помощью ?mean
First of all, nothing is hackproof, so i wouldn't spend too much time on protecting your software.
The downside of a mechanism based on hardware IDs is when a user buys a new computer or upgrades most of his computer he needs to update the key too.
HWHash is a pretty good HardwareID implementation, but i guess there are more (free) solutions.
At work we use Hardlock and Hasp keys, but these are usbkey solutions which are not very efficient for small applications.
В идеале вам нужно что-то, что не зависит от ОС.
Я бы порекомендовал вам встроить лицензионную защиту в свой код или обернуть свое приложение в него таким образом, чтобы его нельзя было запустить без код защиты от копирования запускается первым.
Было бы лучше, если бы вашему приложению был необходим файл лицензионного ключа для работы и чтобы он не генерировался локально.
Один из способов сделать это - то, что ваше приложение генерирует некоторые форма кода изображения, основанная на оборудовании при его первоначальном запуске. Он предоставляется вам, а взамен вы предоставляете лицензионный ключ, который позволит запускать код. Лучше всего строить образ оборудования на основе ЦП и материнской платы, поскольку они будут меняться реже всего.
Ваше приложение. должен проверять образ оборудования и лицензионный ключ при каждом запуске.
Если вы хотите, чтобы ваше приложение.
Отметьте этот вопрос: Какой метод защиты от копирования вы используете?
Здесь также есть ссылки на другие связанные вопросы.
You can check out Microsoft's SLP - I haven't used it, but it definitely looks interesting (yknow, IF you're into MS stuff...)
One important point to note - no licensing mechanism will protect you from piracy, or even substantially reduce it. By definition, the licensing mechanism will be client-side - which is inherently breakable. Take a look at all what happened with DRM...
Your guideline should therefore be usability - the intent should be to use it as a general policy, the good guys will be comfortably limited to what they're supposed to be allowed to do, and the bad guys - well, the bad guys will get around your intent anyway, your best hope is to make it more work.
Я бы очень осторожно отнесся к опубликованным механизмам защиты программного обеспечения, так как они с гораздо большей вероятностью могут опубликовать хаки. Вероятно, вам лучше использовать некоторые методы, чтобы получить уникальный постоянный идентификатор и использовать его для развертывания собственного механизма защиты. Я также считаю, что просто проверять лицензию всякий раз, когда вы запускаете программу, - плохая идея, так как это приводит хакера к местонахождению вашего механизма защиты. IMO, вам лучше проверять лицензию более случайным образом и более одного раза за сеанс.
FWIW, я использую аппаратные блокировки (hasp) для своего программного обеспечения высокого класса для настольных компьютеров и лицензирование на основе идентификатора устройства для мобильных решений. Если вы продаете небольшое количество дорогостоящего программного обеспечения на вертикальном рынке, IMHO, хороший механизм защиты лицензий имеет смысл, и аппаратные ключи работают хорошо. По моему опыту, люди будут использовать больше лицензий, чем покупают, если их нет. Для массового и недорогого программного обеспечения я бы предпочел жить с пиратством за счет увеличения размера пользовательской базы и видимости продукта.