<pre>></pre>
рендеринг как:
>
, Таким образом, Вы хотите:
<pre>
PrimeCalc calc = new PrimeCalc();
Func<int, int> del = calc.GetNextPrime;
</pre>
, который складывается как:
PrimeCalc calc = new PrimeCalc(); Func<int, int> del = calc.GetNextPrime;
В современном Linux в дополнение к chroot (2) вы можете дополнительно ограничить процесс, используя clone (2) вместо fork (2). Есть несколько интересных флагов clone (2):
CLONE_NEWIPC (new namespace for semaphores, shared memory, message queues)
CLONE_NEWNET (new network namespace - nice one)
CLONE_NEWNS (new set of mountpoints)
CLONE_NEWPID (new set of process identifiers)
CLONE_NEWUTS (new hostname, domainname, etc)
Ранее эта функциональность была реализована в OpenVZ, а затем слита в апстриме, так что больше нет необходимости в исправленном ядре.
Если вы запустите скрипт от имени пользователя nobody
(в Linux), он не сможет писать практически никуда и не читать данные, для которых правильно настроены права доступа. Но он все равно может вызвать DoS-атаку, например:
/ tmp
Кроме того, внешние сетевые соединения могут быть открыты и т.д. Вы, вероятно, можете заблокировать все это ограничениями ядра, но вы обязательно что-то забудете.
Поэтому я думаю, что виртуальная машина без доступа к сети или реальному жесткому диску будет единственным (разумно) безопасным путем. Возможно, разработчики Python Challenge используют KVM , который, в принципе, «предоставляется операционной системой».
Для повышения эффективности вы можете запускать все представления в одной виртуальной машине. Это сэкономит вам много накладных расходов,
Использование chroot
( Википедия ) может быть частью решения, например, в сочетании с ulimit
и некоторыми другими общими (или пользовательские) инструменты.
То, что предложил @ bialix, должно было сработать, но попробуйте альтернативный способ подключения:
class Foo(QtCore.QObject):
mysignal = QtCore.pyqtSignal(str, name='mysignal')
def connect_to_signal(self):
# you can use this syntax instead of the 'old' one
self.mysignal.connect(self.myslot)
# but this will also work
self.connect(self, QtCore.SIGNAL('mysignal(QString)'), self.myslot)
self.mysignal.emit("hello")
def myslot(self, param):
print "received %s" % param
Для более подробного объяснения того, как работают сигналы/слоты в PyQt, я бы предложил просмотреть его документацию, в частности этот раздел .
-121--4087845-Нет, нет.
Вы можете взломать его, выполняя обнаружение браузера в JS и динамически присоединяя сценарии/стили.
Или, если вы хотите иметь разные css для разных браузеров, вы можете использовать css hacks. Вероятно, существуют CSS-взломы, которые работают с нужными браузерами.
Или, если единственное, что вам нужно изменить, это «ширина» (одного определения CSS?), вы, вероятно, можете сделать это при обнаружении jquery или javascript
jquery браузера. см.: http://docs.jquery.com/Utilities/jQuery.browser
-121--4268561-http://codepad.org/about успешно внедрила такую систему (в качестве общедоступной службы вставки/запуска кода!)
codepad.org является интерактивным компилятором/интерпретатором и простым инструментом совместной работы. Это пастебин, который исполняет код для тебя. [...]
Как это работает
Выполнение кода обрабатывается супервизором на основе geordi . Стратегия состоит в том, чтобы запустить все под контролем, при этом многие системные вызовы запрещены или проигнорированы. Компиляторы и конечные исполняемые файлы выполняются в chroot-тюрьме со строгими ограничениями ресурсов. Супервизор написан на языке хаскелл.
[...]
Когда ваше приложение выполняет удаленный код, вы должны ожидать проблем с безопасностью. Вместо того, чтобы полагаться только на chroot и ptrace supervisor, я принял некоторые дополнительные меры предосторожности:
Процессы supervisor выполняются на виртуальных машинах, которые защищены брандмауэром, так что они не способны устанавливать исходящие соединения.
Машины, на которых выполняются виртуальные машины, также подвергаются интенсивному брандмауэру и периодически восстанавливаются из исходных образов.