Commit f6fdeffe by Őry Máté

Merge branch 'release-13.03.2' into releases

parents 0d188bd6 d9588334
......@@ -5,7 +5,7 @@ jsfiles += one/static/script/util.min.js
jsfiles += one/static/script/store.min.js
cssfiles += one/static/style/style.css
default: migrate generatestatic collectstatic mo restart
default: migrate generatestatic collectstatic mo setbranch restart
pulldef: pull default
pull:
......@@ -23,6 +23,10 @@ generatestatic: $(jsfiles) $(cssfiles)
collectstatic:
./manage.py collectstatic --noinput
setbranch:
sed -i cloud/local_settings.py -e '/RELEASE=/d' || true
echo "RELEASE='`git rev-parse --abbrev-ref HEAD`'" >>cloud/local_settings.py
mo:
for i in */locale/*/*/*.po; do echo -ne "$$i:\t"; msgfmt --statistics $$i;done
for i in */; do cd $$i; ls locale &>/dev/null && ../manage.py compilemessages || true; cd ..; done
......
from cloud.settings import DEBUG
from cloud.settings import DEBUG, STAT_DEBUG, RELEASE
from django.core.cache import cache
import subprocess
import json
def process_debug(req):
return {'DEBUG': DEBUG}
def process_stat(req):
if STAT_DEBUG:
stat = {
'CPU': {
'USED_CPU': 10,
'ALLOC_CPU': 20,
'FREE_CPU': 70
},
'MEM': {
'USED_MEM': 567,
'ALLOC_MEM': 371,
'FREE_MEM': 2048-567-371
}
}
else:
stat = cache.get('cloud_stat')
return {
'STAT_DEBUG': STAT_DEBUG,
'cloud_stat': stat,
}
def process_release(req):
return {
'release': RELEASE,
}
......@@ -3,6 +3,7 @@
DEBUG = True
TEMPLATE_DEBUG = DEBUG
STAT_DEBUG = True
ADMINS = (
('IK', 'cloud@cloud.ik.bme.hu'),
......@@ -119,6 +120,8 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'cloud.context_processors.process_debug',
'cloud.context_processors.process_stat',
'cloud.context_processors.process_release',
)
TEMPLATE_DIRS = (
......@@ -200,8 +203,17 @@ CELERY_ROUTES = {
'firewall.tasks.reload_blacklist_task': {'queue': 'firewall'},
'firewall.tasks.Periodic': {'queue': 'local'},
'one.tasks.SendMailTask': {'queue': 'local'},
'one.tasks.UpdateInstanceStateTask': {'queue': 'local'}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
store_settings = {
"basic_auth": "True",
"verify_ssl": "False",
......@@ -225,6 +237,7 @@ firewall_settings = {
EMAIL_HOST='152.66.243.92' # giccero ipv4
CLOUD_URL='https://cloud.ik.bme.hu/'
RELEASE='master'
try:
from cloud.local_settings import *
......
{% extends "base.html" %}
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% block content %}
<div class="irasmu">
<h2>Változtatások listája</h2>
<section>
<p>Az IK Cloud fejlesztése kéthetes ciklusokban történik, az rendes kiadások élesítése
páros heteken csütörtök este zajlik. Alább foglaljuk össze az egyes
kiadások főbb, a felhasználók által is látható változtatásait.</p>
</section>
<a id="master"></a>
<section>
<h3 id="release-13.03.2"><a href="#13.03.2">13.03.2 (2013. március 21.)</a></h3>
<ul>
<li>Súgó.</li>
<li>Változáslista.</li>
<li>Reszponzív és folyékony elrendezés.</li>
<li>Statikus oldalak új külalakja.</li>
<li>Gyorsabb oldalbetöltés.</li>
<li>Statisztika a cluster állapotáról.</li>
</ul>
</section>
<section>
<h3 id="release-13.03.1"><a href="#13.03.1">13.03.1 (2013. március 7.)</a></h3>
<ul>
<li>Határidős felfüggesztés élesítve.</li>
<li>Csatlakozási adatoknál IP cím helyett DNS név jelenik meg.</li>
<li>Ha a portált IPV6-on érik el, a csatlakozási adatoknál egyedi DNS név és publikus port jelenik meg.</li>
<li>Legújabb fájloktól vissza lehet lépni az összeshez.</li>
<li>Bemutató képernyő elérhető bejelentkezve is.</li>
<li>Megosztás adatai szerkeszthetőek.</li>
<li>Sablon adatai szerkeszthetőek.</li>
<li>Lábléc; impresszum, szabályzat, támogatás oldalak.</li>
<li>Megosztásnál is látszik a géptípus.</li>
<li>Dobozok rejthetőek.</li>
<li>Sablon mentésének menete gördülékenyebb.</li>
<li>Jelszómegjelenítés javítva.</li>
<li>Fájlok rendezése működik.</li>
<li>Segítség-dobozok bővítve.</li>
<li>Szebb HTTP hibaüzenetek.</li>
<li>Kulcs hozzáadásának visszaigazolása.</li>
<li>Sablonok állapotának helyes kijelzése.</li>
<li>Minimalizált js és css kód.</li>
</ul>
</section>
<section>
<h3 id="release-13.02.2"><a href="#13.02.2">13.02.2 (2013. február 21.)</a></h3>
<ul>
<li>Felhasználói kvóták megvalósítása.</li>
<li>Publikus kulcsok kezelése.</li>
<li>További részletek gombok.</li>
<li>Saját csoportok rejthetőek.</li>
<li>Segítség-dobozok a legtöbb helyre.</li>
<li>Csoporttulajdonosok kezelése, több adat megjelenítése.</li>
<li>VM átnevezhető.</li>
</ul>
</section>
</div>
{% endblock %}
......@@ -2,12 +2,268 @@
{% load i18n %}
{% load staticfiles %}
{% get_current_language as LANGUAGE_CODE %}
{% block content %}
<div class="irasmu">
<p>A súgó elkészültéig kérjük szíves türelmüket.</p>
<p>Addig is ajánljuk figyelmükbe a rendszer <a href="/info/">rövid ismertetőjét</a>, a használat módját részletező <a href="/sites/policy/">szabályzatot</a>, valamint a felület számos pontján megjelenő <img src="{% static "icons/information-frame.png" %}" alt="Súgó" /> ikonnal jelölt információdobozokat.</p>
<p>Amennyiben kérdése maradt, örömmel segítünk a <a href="/sites/support/">támogatás</a> oldalon leírt elérhetőségeinken.</p>
<h2>Bevezető</h2>
<section id="s-1">
<nav style="float: right; padding: 1em;">
<ul>
<li><a href="#s-1">Bevezető</a><ul>
<li><a href="#s-1-1">A webes felület elérése</a></li>
<li><a href="#s-1-2">Összefoglaló oldal</a></li>
</ul></li>
<li><a href="#s-2">Virtuális gépek</a><ul>
<li><a href="#s-2-1">Virtuális gép indítása</a></li>
<li><a href="#s-2-2">Csatlakozás a géphez</a></li>
<li><a href="#s-2-3">Hálózati beállítások</a></li>
</ul></li>
<li><a href="#s-3">Sablonok</a><ul>
<li><a href="#s-3-1">Sablonok létrehozása</a></li>
<li><a href="#s-3-2">Sablonok megosztása</a></li>
</ul></li>
<li><a href="#s-4">Csoportok</a><ul>
<li><a href="#s-4-1">Csoportok létrehozása</a></li>
</ul></li>
<li><a href="#s-5">Adattár</a><ul>
<li><a href="#s-5-1">Kulcsok kezelése</a></li>
</ul></li>
</ul>
</nav>
<p>
Az IK Cloud a BME IK és IIT együttműködésében, a VIK támogatásával létrejött rendszer, amelyben az IIT oktatói és hallgatói szükség szerint vehetnek igénybe virtuális erőforrásokat.
</p>
<p>
A súgón kívül ajánljuk figyelmükbe a rendszer <a href="/info/">rövid ismertetőjét</a>, a használat feltételeit részletező <a href="/sites/policy/">szabályzatot</a>, valamint a felület számos pontján megjelenő <img src="{% static "icons/information-frame.png" %}" alt="Súgó" /> ikonnal jelölt információdobozokat.
</p>
<p>
Amennyiben kérdése maradt, örömmel segítünk a <a href="/sites/support/">támogatás</a> oldalon leírt elérhetőségeinken.
</p>
<div class="clear"></div>
</section>
<section id="s-1-1">
<h3>A webes felület elérése</h3>
<p>
A rendszer a <a href="https://cloud.ik.bme.hu/"><tt>https://cloud.ik.bme.hu/</tt></a> címen érhető el.
Az új látogatót egy ismertető felület fogadja, ahol a <em>Próbálja ki most!</em> vagy a <em>Bejelentkezés</em> hivatkozásra kattintva a BME EduID bejelentkezőoldalára jut.
</p>
<p>
Az EduID belépéshez egy számazonosítót és az ehhez tartozó jelszót kell használni.
Amennyiben nem rendelkezik ilyennel, az <a href="https://login.bme.hu/admin/"><em>ezen az oldalon</em></a> hivatkozásra kattintva a neptunos azonosítókkal belépve állíthatja be EduID azonosítóját.
A sikeres bejelentkezés után az összefoglaló oldalra jut.
</p>
</section>
<section id="s-1-2">
<h3>Összefoglaló oldal</h3>
<p>
Az összefoglaló oldalon gyors áttekintést kaphat a cloudban található erőforrásairól.
A <em>virtuális gépek</em> dobozban a futó és felfüggesztett virtuális gépek,
az <em>adattár</em> dobozban a központi adattárban található fájlok találhatóak.
</p>
<p class="teacher">
A megfelelő jogosultsággal rendelkező felhasználók számára a <em>sablonok</em> dobozban jelennek meg a saját sablonok,
a <em>saját csoportok</em> dobozban pedig azok a csoportok, melyeknek tulajdonosa.
</p>
<p>
Az egyes dobozokban megjelennek az aktív elemek, amelyekre az egeret húzva láthatóvá válnak a legfontosabb vezérlőgombok is.
A csíkra kattintva lenyílik egy összefoglaló az erőforrás legfontosabb adatairól.
A <em>további részletek</em>re kattintva az adott erőforrás oldalára juthat.
</p>
</section>
<h2 id="s-2">Virtuális gépek</h2>
<section id="s-2-1">
<h3>Virtuális gép indítása</h3>
<p>
Virtuális gépek indításához kattintson az <em>
<img src="{% static "icons/computer--plus.png" %}" alt="{% trans "Launch new machine" %}" />
új gép indítása</em> gombra.
A megjelenő ablakban válasszon ki egy megosztott sablont, és kattintson az indítás gombra.
</p>
<p>
A gép indítása azonnal megkezdődik, a folyamat az operációs rendszer teljes betöltéséig jellemzően egy percig tart.
Ezidő alatt a gép oldalán figyelheti az állapotát, amely automatikusan frissül.
</p>
</section>
<section id="s-2-2">
<h3>Csatlakozás a géphez</h3>
<p>
A virtuális gépekhez az adott operációs rendszerben szokásos módon lehet csatlakozni:
Windowshoz távoli asztal protokollon (RDP), Linuxhoz SSH-n.
Linux rendszerekhez is van lehetőség a grafikus bejelentkezésre, ehhez a NoMachine megoldását választottuk.
</p>
<p>
A gépek használatba vételét a tanszéki géptermekben telepített laborkliens kényelmessé teszi, itt a <em>
<img src="{% static "icons/plug.png" %}" alt="{% trans "Connect" %}" />
csatlakozás</em> gombra kattintva elindul a megfelelő kliensprogram.
</p>
<p>
A rendszer távoli használata esetén a megfelelő kliensprogram használata és beállítása a felhasználóra hárul.
</p>
<h4>Windowsról</h4>
<p>
Windows kliens használata esetén windowsos gépekhez való csatlakozásra a beépített <em>távoli asztal (mstsc)</em> alkalmazást,
parancssoros Linux géphez a <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">PuTTY</a>-ot,
grafikus linuxos bejelentkezéshez pedig az <a href="http://www.nomachine.com/download.php">NX Client for Windows</a> alkalmazást ajánljuk.
</p>
<h4>Más rendszerekről</h4>
<p>
Linux vagy OSX kliens használata esetén windowsos gépekhez való csatlakozásra a <a href="http://remmina.sourceforge.net/">Remmina</a>,
parancssoros Linux géphez a beépített OpenSSH kliens,
grafikus linuxos bejelentkezéshez pedig az <a href="http://www.nomachine.com/download.php">NX Client for Linux/Mac</a> alkalmazást ajánljuk.
</p>
<p>
Távoli bejelentkezés esetén a gép indításakor megjelenő oldalon a <em>belépési adatok</em> dobozban, vagy a <em>virtuális gépek</em> listán a <img src="{% static "icons/plug.png" %}" alt="{% trans "Connect" %}" /> gombra kattintva megjelennek a kapcsolódáshoz szükséges adatok.
</p>
</section>
<section id="s-2-3">
<h3>Hálózati beállítások</h3>
<p>
A rendszerben futó gépek a sablontól függő hálózatba kerülnek.
Ez általában azt jelenti, hogy publikus IPv6-os és privát IPv4-es címet kapnak.
Mivel a privát címeket közvetlenül csak a belső hálózatból lehet elérni, ezért hálózati címfordítással lehetővé tesszük TCP és UDP portok elérését.
A tűzfalat a gép oldalán a <em>portok kezelése</em> dobozban lehet beállítani.
</p>
<p>
IPv6-on közvetlenül, az eredeti portszámra kapcsolódva lehet elérni az így beállított portokat, azonban csak azokat, amelyekre fordítási szabály van beállítva.
</p>
<p>
A gépek távoli elérését is így oldjuk meg: a gép indításakor a szükséges portokat (Windows: 3389/tcp, Linux: 22/tcp) automatikusan kiforgatjuk.
Ennek megfelelően a portál IPv6-ról való elérése esetén a gép saját DNS nevét és az eredeti portszámot, míg IPv4-es megtekintése esetén a tűzfal erre szolgáló címét és a kiosztott külső portot jelenítjük meg a <em>belépési adatok</em> dobozban.
</p>
</section>
<h2 id="s-3">Sablonok</h2>
<section class="teacher">
<p>
A megfelelő jogosultsággal rendelkező felhasználóknak lehetősége van sablonok létrehozására.
Így csoportjaival olyan előkészített rendszert oszthat meg, amelyen már minden szükséges szoftver telepítve és konfigurálva van.
Ezzel időt és fáradságot takaríthat meg a projektmunka vagy a laborfoglalkozás, házi feladat készítése során.
</p>
</section>
<section id="s-3-1" class="teacher">
<h3>Sablonok létrehozása</h3>
<p>
Sablon létrehozásához az összefoglaló oldalon lévő <em>sablonok</em> doboz <em>
<img src="{% static "icons/document--plus.png" %}" alt="{% trans "New template" %}" />
új sablon</em> gombjára kattintva megnyílik egy varázsló.
</p>
<p class="figure figure-small">
<img src="{% static "help/template-wizard-1.png" %}" alt="Az új sablon varázsló 1." />
<img src="{% static "help/template-wizard-2.png" %}" alt="Az új sablon varázsló 2." />
</p>
<p>
A varázsló első lépéseként válassza ki a kiindulási sablont, amelyet személyre kíván szabni, majd kattintson a <em>tovább</em> gombra.
Ezután válassszon nevet, méretet és leírást az új sablonnak.
Végül a <em>mesterpéldány indítása</em> gombra kattintva elindul egy példánya a kiválasztott kiindulási rendszernek, amelyen elvégezheti a beállításokat.
</p>
<p class="figure figure-small">
<img src="{% static "help/template-wizard-3.png" %}" alt="Az új sablon varázsló 3." />
</p>
<p>
Az elindult géphez a <a href="#s-2-2">többi géphez hasonló módon</a> lehet kapcsolódni.
Végezze el a szükséges módosításokat, majd kattintson a <em>mentés</em> gombra.
A rendszer leállítja a gépet, majd elmenti a lemezképet.
</p>
</section>
<section id="s-3-2" class="teacher">
<p class="figure figure-small" style="float: right">
<img src="{% static "help/share-wizard.png" %}" alt="Az új megosztás varázsló" />
</p>
<h3>Sablonok megosztása</h3>
<p>
A sablonokat csoportok tagjaival lehet megosztani.
</p>
<p>
A megosztás megszabja a sablon példányainak <a href="#TODO">lejárati idejét</a>, valamint a <a href="#TODO">futtatható példányok számát</a> is.
</p>
<p>Egy sablon megosztásához:
<div><ol>
<li>Navigáljon egy csoport részletező oldalára a <em>saját csoportok</em> dobozról.</li>
<li>A részletező oldalon válasszon egy sablont.</li>
<li>Kattintson a <em>
<img src="{% static "icons/user-share.png" %}" alt="{% trans "Share" %}" />
megosztás</em> gombra.</li>
<li>Változtassa meg szükség szerint a beállításokat.</li>
</ol></div>
<div class="clear"></div>
</section>
<h2 id="s-4">Csoportok</h2>
<section class="teacher">
<p>
A csoportok hallgatók halmazai, melyek segítségével együtt lehet kezelni a sablonok megosztását és a kvóták kezelését.
</p>
<p>
Sablonokat hozhat létre kézzel, tetszés szerint (például önállólabor-csoportok vagy kutatási munkák számára), vagy használhatja a Neptun tanulmányi rendszerben rögzített tárgyfelvételek és oktatók alapján automatikusan alakuló csoportokat.
</p>
</section>
<section id="s-4-1" class="teacher">
<h3>Csoportok létrehozása</h3>
<p>
Új csoport létrehozásához kattintson az összefoglaló oldal <em>saját csoportok</em> dobozában az <em>
<img src="{% static "icons/user--plus.png" %}" alt="{% trans "Create new group" %}" />
új csoport létrehozása</em> gombra.
</p>
<p>
A megjelenő varázsló értelemszerű kitöltésével a csoport létrejön, és a részletező oldalára kerül.
</p>
<p>
A csoport részletező oldalán lehetősége van tagok és tulajdonosok fölvételére, tagok törlésére, valamint <a href="#s-3-2">sablonok megosztására</a>.
</p>
</section>
<h2 id="s-5">Adattár</h2>
<section>
<p>
Az adattár segítségével kényelmessé válik a fájlok tárolása és mozgatása.
Személyes adattárját számos módon elérheti.
</p>
<h4>A portálról</h4>
<p class="desc">
A saját gépén lévő fájlok feltöltésére, valamint a munka során készített fájlok letöltésére a legegyszerűbb módszer a webes felület használata.
Az összefoglaló oldalon megjelenő <em>adattár</em> dobozban megtalálja az összes fájlját, valamint az oldalra drag and drop módszerrel húzott fájlok automatikusan feltöltődnek, a <em>
<img src="{% static "icons/download-cloud.png" %}" alt="{% trans "Download" %}" />
letöltés</em> gombra kattintva pedig tetszőleges fájlokat vagy mappákat tölthet le – utóbbit ZIP archívumban.
</p>
<h4>A virtuális gépekről</h4>
<p class="desc">
Minden virtuális gépen automatikusan csatolásra kerül a személyes adattár. Windowsos gépeken a Z: meghajtón, Linux alatt pedig a <em>~/sshfs/</em> katalógusban érhetőek el a fájlok.
Ugyanez igaz a tanszéki gépteremben telepített Ubuntu rendszerre.
</p>
<h4>SFTP-n</h4>
<p class="desc">
Az adattár távolról is elérhető SFTP protokollon.
Ezt számos kliensprogram támogatja, ilyen a
<a href="http://winscp.net/eng/index.php">WinSCP</a> és a
<a href="http://code.google.com/p/win-sshfs/">win-sshfs</a>.
Az SFTP kapcsolódáshoz privát kulcs használata szükséges.
</p>
</section>
<section id="s-5-1">
<h3>Kulcsok kezelése</h3>
<p>
A SFTP protokollon való eléréshez publikus kulcsát regisztrálni kell a portálon.
Ehhez kattintson az <em>adattár</em> doboz <em>kulcsok kezelése</em> gombjára.
Az így megnyíló kezelőfelületen a <em>nyilvános kulcs hozzáadása</em> pontot választva másolja be a publikus kulcsot OpenSSH formátumban, majd kattintson a <em>mentés</em> gombra. (Az OpenSSH kulcsformátum utolsó része egy megjegyzés, amely alapján a kulcsot a későbbiekben azonosítani tudja.)
</p>
<p>
Amennyiben privát kulcsa kompromittálódott, vagy nem kívánja a továbbiakban használni, a <em>kulcsok kezelése</em> gombra kattintva megjelenő listában törölheti az érvényes kulcsok közül.
</p>
<p>
Amennyiben egy virtuális gépe került idegen kézbe, az adattárhoz való hozzáférése is kitudódhatott.
Ebben az esetben használhatja a <em>kulcsok újragenerálása</em> lehetőséget, amely a virtuális gépeken korábban használt kulcsot érvényteleníti.
A már elindított virtuális gépek ezután nem érhetik el az adattárat.
</p>
</section>
<!--
<section id="s-">
<h3></h3>
<p>
</p>
</section>
-->
</div>
{% endblock %}
......@@ -5,10 +5,15 @@
{% block content %}
<div class="irasmu">
<h2>Impresszum</h2>
<section>
<p>Az IK Cloud a BME IK és IIT együttműködésében, a VIK támogatásával létrejött rendszer, amelyben az IIT oktatói és hallgatói szükség szerint vehetnek igénybe virtuális erőforrásokat.
</p>
</section>
<section>
<p>Az oldal üzemeltetője a BME Közigazgatási Informatikai Központ.</p>
<p>A rendszer fejlesztésében részt vettek:
<p>A rendszer fejlesztésében részt vettek:
Bach Dániel,
Dányi Bence,
Dudás Ádám,
......@@ -17,6 +22,7 @@
dr. Szeberényi Imre.</p>
<p>A rendszer HP hardveren, Ubuntu operációs rendszeren, KVM virtualizációval, Open vSwitch virtuális hálózaton, libvirt köztes réteggel, OpenNebula cloud menedzserrel, Django alapú webportállal működik.</p>
<p>Some icons by <a href="http://p.yusukekamiyamane.com/">Yusuke Kamiyamane</a>. Licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 License</a>.</p>
</section>
</div>
{% endblock %}
......@@ -5,6 +5,8 @@
{% block content %}
<div class="irasmu">
<h2>Felhasználási feltételek</h2>
<section>
<p>Az IK Cloud a BME IK és IIT együttműködésében, a VIK támogatásával létrejött rendszer, amelyben az IIT oktatói és hallgatói szükség szerint vehetnek igénybe <strong>virtuális erőforrásokat</strong>.</p>
<p>Az IIT géptermeiben telepített kliensszoftver segítségével az oktató által előkészített és kiajánlott <strong>virtuális környezetet a hallgató</strong> a számára megszabott <strong>kvóta keretein belül</strong> igény szerint indíthatja.</p>
......@@ -14,11 +16,15 @@
<p>Lehetőség van a gépteremben elkezdett munka otthoni folytatására is a korábban elindított környezetben. A rendszer segítségével az otthoni feladatot végző hallgató is elkerülheti az összetett szoftverkörnyezet telepítésével járó kellemetlenségeket, figyelmét a szakmai munkára irányíthatja.</p>
<p>A rendszer segítséget nyújt önálló labor, szakdolgozat, diplomaterv vagy tdk-munka készítésénél is: a munkához szükséges virtuális gépeket az önkiszolgáló rendszeren keresztül azonnal használatba lehet venni.</p>
</section>
<section>
<p>Az elindított virtuális gépekre az adott operációs rendszeren szokásos módon lehet távolról csatlakozni: Windows esetén RDP (távoli asztal), Linux esetén SSH, vagy grafikusan NoMachine NX segítségével. A kapcsolódást a géptermekben telepített kliensszoftver még kényelmesebbé teszi.</p>
<p>Az elindított gépeken a <strong>felhasználói adattár</strong> automatikusan csatolásra kerül. Minden munkát itt érdemes végezni, mivel az a gép leállítása után is elérhető marad.</p>
</section>
<section>
<p>A felhasználók a rendszert jelen önkiszolgáló felületen keresztül érhetik el, amelybe az egyetemi címtárszolgáltatás (eduID) segítségével léphetnek be. A továbblépéssel elfogadják a következőekben összefoglalt <strong>felhasználási feltételeket</strong>.</p>
<ul>
<li>A rendszer <strong>nem használható</strong> semmilyen jogszabályba, vagy <a href="http://net.bme.hu/regula/">egyetemi</a> <strong>szabályzatba ütköző tevékenységre</strong>.</li>
......@@ -29,6 +35,7 @@
<li>A rendszert üzemeltető BME IK lehetőségeihez mérten mindent megtesz a szolgáltatásbiztos üzemért, az egyetemi infrastruktúra sajátosságai miatt előforduló üzemszünetekre azonban számítani kell. A BME IK az üzemeltetés kapcsán a folyamatos üzem sérüléséért vagy adatvesztésért <strong>minden felelősséget kizár</strong>. Ezeknek megfelelően szükség esetén a biztonsági mentés és a magas rendelkezésre állású környezet kialakítása a felhasználóra hárul.</li>
</ul>
<p>A szabályok betartása közös érdekünk. Reméljük, hogy a rendszerünk használata megkönnyíti munkájukat, melyhez sok sikert kívánunk!</p>
</section>
</div>
{% endblock %}
......@@ -5,6 +5,8 @@
{% block content %}
<div class="irasmu">
<h2>Támogatás</h2>
<section>
<p>A rendszer használatával kapcsolatos kérdéseket, általános észrevételeket a <tt>cloud <em>(kukac)</em>
ik.bme.hu</tt> e-mail címen várjuk.
Ugyancsak örömmel fogadjuk a rendszer használatával kapcsolatos beszámolókat.</p>
......@@ -12,5 +14,7 @@
<a href="https://giccero.cloud.ik.bme.hu/trac/cloud/newticket" rel="nofollow">
hibajegy felvételével</a> jelezze.
</p>
</section>
</div>
{% endblock %}
#!/usr/bin/env python
from celery import Celery, task
import subprocess
import time, re
import socket
import sys
BROKER_URL = 'amqp://nyuszi:teszt@localhost:5672/django'
try:
from local_settings import *
except:
pass
CELERY_CREATE_MISSING_QUEUES=True
celery = Celery('tasks', broker=BROKER_URL)
def main(argv):
celery.send_task('one.tasks.UpdateInstanceStateTask', [ int(sys.argv[1]),
], queue='local')
if __name__ == "__main__":
main(sys.argv)
......@@ -5,8 +5,16 @@ echo "En vagyok a $0 !"
arr=( $((echo 'ibase=16' ; ifconfig eth0 | awk '/HWaddr/ {print $5}' | tr ':a-z' '\nA-Z') | bc ) )
ipv4="${arr[2]}.${arr[3]}.${arr[4]}.${arr[5]}"
gw4="${arr[2]}.${arr[3]}.255.254"
net4="255.255.0.0"
ipv6="2001:738:2001:4031:${arr[3]}:${arr[4]}:${arr[5]}:0"
gw6="2001:738:2001:4031:${arr[3]}:255:254:0"
net6="80"
if [ "${arr[2]}" == "152" ]; then
gw4="${arr[2]}.${arr[3]}.243.126"
net4="255.255.255.192"
gw6="2001:738:2001:4031:66:243:126:0"
fi
echo ok "$ipv4 $ipv6 $gw4 $gw6"
......@@ -20,12 +28,12 @@ iface lo inet loopback
auto eth0
iface eth0 inet static
address $ipv4
netmask 255.255.0.0
netmask $net4
gateway $gw4
dns-nameservers 152.66.243.60
iface eth0 inet6 static
address $ipv6
netmask 80
netmask $net6
gateway $gw6
EOF
......@@ -46,10 +54,10 @@ DNS1="152.66.243.60"
PEERDNS="yes"
IPADDR="$ipv4"
NETMASK="255.255.0.0"
NETMASK="$net4"
GATEWAY=$gw4
IPV6ADDR="$ipv6/80"
IPV6ADDR="$ipv6/$net6"
IPV6_DEFAULTGW="$gw6"
EOF
......
......@@ -6,12 +6,13 @@ do
sudo stop $i || true
done
sudo apt-get install rabbitmq-server gettext
sudo apt-get install rabbitmq-server gettext memcached
sudo rabbitmqctl delete_user guest || true
sudo rabbitmqctl add_user nyuszi teszt || true
sudo rabbitmqctl add_vhost django || true
sudo rabbitmqctl set_permissions -p django nyuszi '.*' '.*' '.*' || true
sudo pip install python-memcached
sudo cp /opt/webadmin/cloud/miscellaneous/devenv/boot_url.py /opt/
......
#!/bin/bash
# install xml.vim
mkdir -p ~/.vim/{ftplugin,indent}
cd ~/.vim
wget 'http://www.vim.org/scripts/download_script.php?src_id=16073' -O ftplugin/xml.vim
echo 'let b:did_indent = 1' > indent/xml.vim
for i in docbk xsl html xhtml
do
ln -s xml.vim ftplugin/$i.vim
echo 'let b:did_indent = 1' > indent/$i.vim
done
\documentclass[12pt,a4paper]{article}
\title{Harnessing Wasted Computing Power for Scientific Computing}
\author{S\'andor Guba, M\'at\'e \H{O}ry and Imre Szeber\'enyi\\
Budapest University of Technology and Economics, %\\
%Magyar Tud\'osok k\"or\'utja 2, H-1117 Budapest,
Hungary}
\date{\empty}
\begin{document}
\maketitle
Nowadays more and more general purpose workstations installed in a student
laboratory have built in multi-core CPU and graphics card providing significant
computing power. In most cases the utilization of these resources is low, and
limited to lecture hours. The concept of utility computing plays an important
role in nowadays technological development. As part of utility computing, cloud
computing offers greater flexibility and responsiveness to ICT users at lower
cost.
In  this paper, we introduce a cloud management system which enables the
simultaneous use of both dedicated resources and opportunistic environment. All
the free workstations (powered or not) are automatically added to a resource
pool, and can be used like ordinary cloud resources. Researchers can launch
various virtualized software appliances. Our solution leverages the advantages
of HTCondor and OpenNebula systems.
Modern graphics processing units (GPUs) with many-core architectures have
emerged as general-purpose parallel computing platforms that can dramatically
accelerate  scientific applications used for various simulations. Our business
model harnesses computing power of GPUs as well, using the needed amount of
unused machines. This makes the infrastructure flexible and power efficient.
Our pilot infrastructure consist of a high performance cluster and 28
workstations with dual-core CPUs and dedicated graphics cards. Altogether we
can use 10,752 CUDA cores through the network.
\end{document}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="arch.svg.2013_03_16_15_07_35.0.2.svg"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="-22.959131"
inkscape:cy="751.8032"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1364"
inkscape:window-height="749"
inkscape:window-x="0"
inkscape:window-y="17"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true">
<sodipodi:guide
orientation="-0.70710678,0.70710678"
position="0.5,716.5"
id="guide3524" />
<sodipodi:guide
orientation="0.70710678,0.70710678"
position="227.5,673.5"
id="guide3526" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="1. réteg"
inkscape:groupmode="layer"
id="layer1">
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3575"
style="fill:none;stroke:#ffff00;stroke-width:0.49851683;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(0.64348983,-3.7565901,3.7565901,0.64348983,-329.36385,745.82088)" />
<path
transform="matrix(1.5701332,3.6885219,3.6885219,-1.5701332,-461.05784,-167.49813)"
sodipodi:type="arc"
style="fill:none;stroke:#ffff00;stroke-width:0.47395673;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3588"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:#003366;stroke-width:0.67295331;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3562"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-0.62861196,2.7525075,-2.7525075,-0.62861196,424.93767,-110.28257)" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3503"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="118.39488"
sodipodi:ry="118.39488"
d="m 266.89488,86.862183 a 118.39488,118.39488 0 1 1 -236.789762,0 118.39488,118.39488 0 1 1 236.789762,0 z"
transform="matrix(0.29589859,1.1985833,1.1985833,-0.29589859,-55.552506,91.57496)" />
<path
transform="matrix(2.6384034,0,0,2.6384034,296.33723,-76.10009)"
sodipodi:type="arc"
style="fill:#98fc66;fill-opacity:1;stroke:#003366;stroke-width:0.72013247;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3309"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 128.25,51.788154 a 40.5,40.5 0 0 1 40.5,1e-6 L 148.5,86.862183 z"
sodipodi:start="4.1887902"
sodipodi:end="5.2359878" />
<text
xml:space="preserve"
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
x="-500"
y="90.362183"
id="text3003"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3005"
x="-500"
y="90.362183" /></text>
<flowRoot
xml:space="preserve"
id="flowRoot3007"
style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:TitilliumTitle20;font-style:normal;font-weight:300;font-size:40px;line-height:125%;letter-spacing:0px;word-spacing:0px;-inkscape-font-specification:TitilliumTitle20 Light;font-stretch:normal;font-variant:normal"><flowRegion
id="flowRegion3009"><rect
id="rect3011"
width="215"
height="193"
x="-191"
y="123.36218" /></flowRegion><flowPara
id="flowPara3013" /></flowRoot> <text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumTitle20;-inkscape-font-specification:TitilliumTitle20 Light"
x="-260.08865"
y="123.72603"
id="text3025"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3027"
x="-260.08865"
y="123.72603"
style="font-size:20px">Python</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumTitle20;-inkscape-font-specification:TitilliumTitle20 Light"
x="-27.31016"
y="553.54175"
id="text3073"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3075"
x="-27.31016"
y="553.54175"
style="font-size:20px">OpenFlow</tspan></text>
<rect
style="fill:#aaccee;fill-opacity:1;stroke:none"
id="rect2985"
width="400"
height="300"
x="462.05585"
y="147.2655"
ry="10"
rx="10" />
<rect
ry="10"
rx="10"
y="224.22183"
x="524.75195"
height="23.535534"
width="103.92537"
id="rect3135"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
sodipodi:linespacing="125%"
id="text3029"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="0.77156604"
inkscape:transform-center-y="-87.550871"
transform="translate(-305.61879,-73.937558)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
xlink:href="#path3105"
id="textPath3108"><tspan
id="tspan3031"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">Django</tspan></textPath></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3125"
width="118.28074"
height="23.53553"
x="473.9794"
y="285.96805"
rx="10"
ry="10" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3157"
width="95.653282"
height="23.535534"
x="-382.23566"
y="594.3302"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-377.53323"
y="613.20801"
id="text3045"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan3047"
x="-377.53323"
y="613.20801"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">CondorHT</tspan></text>
<rect
ry="10"
rx="10"
y="312.56583"
x="522.96362"
height="23.535534"
width="68.783226"
id="rect3123"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
sodipodi:linespacing="125%"
id="text3049"
y="331.43359"
x="532.36395"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="331.43359"
x="532.36395"
id="tspan3051"
sodipodi:role="line">libvirt</tspan></text>
<rect
ry="10"
rx="10"
y="337.15509"
x="522.48718"
height="23.535534"
width="54.641087"
id="rect3159"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="529.78992"
y="355.92285"
id="text3053"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3055"
x="529.78992"
y="355.92285"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">KVM</tspan></text>
<rect
ry="10"
rx="10"
y="524.86932"
x="-421.75073"
height="23.535534"
width="55.348198"
id="rect3139"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3141"
width="53.933983"
height="23.535534"
x="-421.00943"
y="552.68011"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<rect
ry="10"
rx="10"
y="554.40509"
x="-498.47458"
height="23.535534"
width="70.904533"
id="rect3143"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-488.52621"
y="573.1629"
id="text3065"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan3067"
x="-488.52621"
y="573.1629"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">CUDA</tspan></text>
<rect
ry="10"
rx="10"
y="491.69034"
x="-443.15839"
height="23.535534"
width="127.47309"
id="rect3127"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<text
sodipodi:linespacing="125%"
id="text3069"
y="-95.902969"
x="-432.26517"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="-95.902969"
x="-432.26517"
id="tspan3071"
sodipodi:role="line">Open vSwitch</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3145"
width="68.076118"
height="23.535534"
x="635.73944"
y="338.97281"
rx="10"
ry="10" />
<text
sodipodi:linespacing="125%"
id="text3077"
y="464.9064"
x="-39.318756"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="464.9064"
x="-39.318756"
id="tspan3079"
sodipodi:role="line">QCOW</tspan></text>
<rect
ry="10"
rx="10"
y="338.39584"
x="709.5022"
height="23.53554"
width="52.51984"
id="rect3151"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="34.75946"
y="465.61945"
id="text3081"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3083"
x="34.75946"
y="465.61945"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">LVM</tspan></text>
<rect
ry="10"
rx="10"
y="366.65564"
x="638.09924"
height="23.535534"
width="55.348198"
id="rect3147"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
sodipodi:linespacing="125%"
id="text3085"
y="493.91925"
x="-34.664795"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="493.91925"
x="-34.664795"
id="tspan3087"
sodipodi:role="line">NFS</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3129"
width="126.4314"
height="24.535534"
x="639.87427"
y="396.68478"
rx="10"
ry="10" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-22.625824"
y="524.1084"
id="text3089"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3091"
x="-22.625824"
y="524.1084"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">InfiniBand</tspan></text>
<rect
ry="10"
rx="10"
y="787.98724"
x="-251.5313"
height="23.535534"
width="82.925362"
id="rect2993"
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
transform="matrix(0,-1,1,0,0,0)" />
<text
sodipodi:linespacing="125%"
id="text3093"
y="-168.04498"
x="-350.60846"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="-168.04498"
x="-350.60846"
sodipodi:role="line"
id="tspan3109">Netfilter</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3153"
width="82.925362"
height="23.535534"
x="-251.5313"
y="814.52277"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-345.77847"
y="-143.70947"
id="text3097"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3099"
x="-345.77847"
y="-143.70947"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">tinydns</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3121"
width="93.531967"
height="23.535534"
x="-251.5313"
y="761.45166"
rx="10"
ry="10"
transform="matrix(0,-1,1,0,0,0)" />
<text
sodipodi:linespacing="125%"
id="text3101"
y="-114.25905"
x="-201.36554"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0,-1,1,0,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="-114.25905"
x="-201.36554"
id="tspan3103"
sodipodi:role="line">Dnsmasq</tspan></text>
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#003366"
id="rect3149"
width="70.197296"
height="23.535534"
x="695.56238"
y="367.8338"
rx="10"
ry="10" />
<text
sodipodi:linespacing="125%"
id="text3105"
y="495.07742"
x="27.707764"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="495.07742"
x="27.707764"
id="tspan3107"
sodipodi:role="line">iSCSI</tspan></text>
<rect
ry="10"
rx="10"
y="256.96805"
x="506.9794"
height="23.53553"
width="81.280739"
id="rect3276"
style="fill:#ffffff;fill-opacity:1;stroke:#003366" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="527.51776"
y="273.73581"
id="text3278"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3280"
x="527.51776"
y="273.73581"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">OCCI</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-138.59293"
y="128.88074"
id="text3112"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3114"
x="-138.59293"
y="128.88074" /></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-304"
y="239.36218"
id="text3142"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3144"
x="-304"
y="239.36218">networking</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3146"
y="476.81802"
x="108"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
y="476.81802"
x="108"
id="tspan3148"
sodipodi:role="line">storage</tspan></text>
<text
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,91.68181,-166.26247)"
inkscape:transform-center-y="-72.190452"
inkscape:transform-center-x="-38.782436"
sodipodi:linespacing="125%"
id="text3162"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
id="textPath3164"
xlink:href="#path3292"
style="font-weight:bold">libvirt</textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3179"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-38.782436"
inkscape:transform-center-y="-72.190452"
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,25.00414,-172.26426)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
style="font-weight:bold"
xlink:href="#path3292"
id="textPath3181">kvm</textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3187"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-38.782436"
inkscape:transform-center-y="-72.190452"
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,223.12903,-13.635057)"><textPath
style="font-weight:bold"
xlink:href="#path3292"
id="textPath3189" /></text>
<text
sodipodi:linespacing="125%"
id="text3061"
y="30.891037"
x="107.64305"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
y="30.891037"
x="107.64305"
id="tspan3063"
sodipodi:role="line">VT-d</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3191"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-38.782436"
inkscape:transform-center-y="-72.190452"
transform="matrix(0.82322794,0.56771099,-0.56771099,0.82322794,199.68181,-226.26247)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
style="font-weight:bold"
xlink:href="#path3292"
id="textPath3193">HTCondor</textPath></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
x="-12.837537"
y="88.802063"
id="text3195"
sodipodi:linespacing="125%"
transform="matrix(0.56708663,0.82365815,-0.82365815,0.56708663,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><tspan
sodipodi:role="line"
id="tspan3197"
x="-12.837537"
y="88.802063"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">CUDA</tspan></text>
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3238"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.76191127;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-0.73806068,2.3820051,2.3820051,0.73806068,-4.8041455,-173.97514)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3210"
style="opacity:0.1;fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.85499996;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-1.1871526,-1.8785474,1.8785474,-1.1871526,105.61742,625.94513)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(4.132293,0,0,4.132293,-521.1455,-115.0778)"
sodipodi:type="arc"
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:0.45979312;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3150"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3132"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="M 189,86.862183 A 40.5,40.5 0 0 1 131.38396,123.56765 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="2.0071286"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3430"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.517963"
sodipodi:ry="40.517963"
d="M 189.01796,86.862183 A 40.517963,40.517963 0 0 1 144.76155,127.20731 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="1.6631942"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="1.4741804"
sodipodi:start="0"
d="M 189.01796,86.862183 A 40.517963,40.517963 0 0 1 152.40859,127.19118 L 148.5,86.862183 z"
sodipodi:ry="40.517963"
sodipodi:rx="40.517963"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3446"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3452"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.517963"
sodipodi:ry="40.517963"
d="M 189.01796,86.862183 A 40.517963,40.517963 0 0 1 152.83858,127.14719 L 148.5,86.862183 z"
sodipodi:start="0"
sodipodi:end="1.4635127"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3428"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 137.55176,125.85431 a 40.5,40.5 0 0 1 -6.3095,-2.35307 L 148.5,86.862183 z"
sodipodi:start="1.8445288"
sodipodi:end="2.0109926"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="M 128.25,121.93621 A 40.5,40.5 0 0 1 125.27015,53.686526 L 148.5,86.862183 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3134"
style="fill:#ffff99;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:start="2.0943951"
sodipodi:end="4.1015237"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="0.90791653"
sodipodi:start="0"
d="M 183.21429,86.862183 A 34.714287,34.714287 0 0 1 169.8628,114.22479 L 148.5,86.862183 z"
sodipodi:ry="34.714287"
sodipodi:rx="34.714287"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3426"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)" />
<path
sodipodi:type="arc"
style="opacity:0.1;fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.25121951;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3128"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-1.5185185,0,0,1.5185185,318,111.96035)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.57088006;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3292"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-0.73337337,-0.96181362,0.96181362,-0.73337337,117.86071,450.39391)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
style="fill:none;stroke:none"
d="m 63.931925,164.86937 c 43.626515,-15.77772 91.783175,6.79821 107.560895,50.42473 15.77771,43.62652 -6.79821,91.78318 -50.42473,107.5609 C 77.44156,338.63271 29.284905,316.05678 13.507191,272.43026 -2.2705227,228.80374 20.305397,180.64708 63.931925,164.86937 z"
id="path3105"
inkscape:connector-curvature="0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:connector-curvature="0"
style="fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 101.99324,116.32472 C 76.546217,116.36932 20.156751,150.4825 -0.78122293,192.72721 L 92.5,243.875 l 98.34375,40.09375 c 6.71151,-18.08233 19.80687,-28.15336 29.65625,-51.3125 L 242.4375,230.75 c -1.91539,-21.89294 -8.60546,-43.09273 -19.59375,-62.125 -27.92274,-48.3636 -68.74469,-52.39166 -120.85051,-52.30028 z"
id="path3136"
sodipodi:nodetypes="scccccss"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(2.6295998,0,0,2.6295998,-297.99557,15.449403)"
sodipodi:type="arc"
style="fill:#aaccee;fill-opacity:1;stroke:#003366;stroke-width:0.7225433;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3199"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:transform-center-x="-4.0352443"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
transform="matrix(1.2839507,0,0,1.271605,-96.66667,135.4078)"
sodipodi:type="arc"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.48697376;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3298"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="M 189,86.862183 A 40.5,40.5 0 1 1 117.86592,60.370613"
sodipodi:start="0"
sodipodi:end="3.8546018"
sodipodi:open="true"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:end="1.4608094"
sodipodi:start="0.90588138"
d="m 173.49927,118.74858 a 40.517967,40.517967 0 0 1 -20.5518,8.38674 L 148.5,86.862183 z"
sodipodi:ry="40.517967"
sodipodi:rx="40.517967"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3495"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)" />
<path
transform="matrix(3.7160494,0,0,3.7160494,-459.33334,-78.921978)"
sodipodi:type="arc"
style="fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:0.51129568;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3444"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="34.714287"
sodipodi:ry="34.714287"
d="m 169.91844,114.18126 a 34.714287,34.714287 0 0 1 -17.60802,7.18545 L 148.5,86.862183 z"
sodipodi:start="0.90588138"
sodipodi:end="1.4608094"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
style="fill:#003366;fill-opacity:1;stroke:#003366;stroke-width:1.9000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 91.25 157.875 C 34.226598 157.875 -12 201.63916 -12 255.625 C -12 260.0259 -11.688946 264.34688 -11.09375 268.59375 C 0.21430708 314.74849 42.485411 349.27586 93.21875 350.34375 C 93.354234 350.34285 93.489637 350.34515 93.625 350.34375 C 132.63112 349.93946 166.59371 328.57515 184.8125 296.96875 C 184.82897 296.93542 184.85857 296.90835 184.875 296.875 C 191.04736 284.34712 194.5 270.36269 194.5 255.625 C 194.5 201.63916 148.27341 157.875 91.25 157.875 z "
id="path3201"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3294"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.07622373;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
transform="matrix(-0.72762529,-1.6085123,1.6085123,-0.72762529,60.83346,545.92938)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
sodipodi:linespacing="125%"
id="text3041"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
transform="matrix(0.99970601,-0.02424632,0.02424632,0.99970601,-3.8173792,2.0756822)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3210"
id="textPath3212"><tspan
id="tspan3043"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
dx="10.5">OpenNebula</tspan></textPath></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3033"
sodipodi:linespacing="125%"
inkscape:transform-center-x="0.37728737"
inkscape:transform-center-y="-50.660877"
transform="matrix(0.99369837,0.11208727,-0.11208727,0.99369837,27.945665,-13.270438)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3292"
id="textPath3116"><tspan
style="font-weight:bold"
id="tspan3120">Celery</tspan></textPath></text>
<path
transform="matrix(1.2345679,0,0,1.2345679,-90.833336,136.62492)"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3118"
style="fill:#eec73e;fill-opacity:1;stroke:#003366;stroke-width:1.53900003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
sodipodi:linespacing="100%"
id="text3037"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:center;line-height:100%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3515"
startOffset="50%"
id="textPath3517"><tspan
dy="0 0 0 0 0 0 0"
id="tspan3296"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">RabbitMQ</tspan></textPath></text>
<text
inkscape:transform-center-x="-1.5296205"
sodipodi:linespacing="125%"
id="text3122"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"
inkscape:transform-center-y="19.979687"
transform="translate(300.9346,6.2071068)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"><textPath
xlink:href="#path3128"
id="textPath3130"
style="font-size:18px"
dx="11">distributed task queue</textPath></text>
<path
id="path3215"
d="M 88.204663,95.907012 C 62.757635,95.951641 49.443105,114.65542 25.82367,128.2921 l 12.220143,18.68715 c 56.271714,-29.85238 102.087677,-6.88553 128.549737,3.60323 26.46205,10.48877 45.61859,25.44394 54.91534,80.89347 L 242.4375,230.75 C 240.52211,208.85706 233.83204,187.65727 222.84375,168.625 194.92101,120.2614 140.31049,95.815629 88.204663,95.907012 z"
style="fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="scczccss"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
inkscape:connector-curvature="0"
style="fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
d="M 92.09375,93.34375 C 66.646722,93.388379 40.869435,99.894563 17.25,113.53125 l 10.302697,17.08579 c 18.998936,-10.99607 41.06319,-17.3125 64.59375,-17.3125 67.527063,0 123.280143,53.27043 128.978553,119.32046 l 21.3125,-1.875 c -1.91539,-21.89294 -8.60546,-43.09273 -19.59375,-62.125 -27.92274,-48.3636 -78.64418,-75.372633 -130.75,-75.28125 z"
id="path3174"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
sodipodi:nodetypes="sccsccss" />
<path
transform="matrix(3.7312659,0,0,3.7312659,-461.59299,-80.243719)"
style="fill:none;stroke:#003366;stroke-width:0.50921059;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 151.69664,127.23583 c -22.29775,1.76546 -41.80483,-14.87926 -43.57029,-37.17701 -1.76545,-22.29775 14.87926,-41.804832 37.17701,-43.570286 6.75335,-0.534705 13.53294,0.633184 19.7181,3.396746 l -2.34994,5.258626"
id="path3547"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3217"
sodipodi:linespacing="125%"
transform="matrix(0.98887574,0.14874396,-0.14874396,0.98887574,36.842448,-35.9897)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
inkscape:transform-center-x="20.113291"
inkscape:transform-center-y="-118.16099"><textPath
id="textPath3219"
xlink:href="#path3210"
style="font-size:19px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#015a01;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">KVM</textPath></text>
<text
transform="matrix(0.17256398,0.98499831,-0.98499831,0.17256398,334.53716,102.09909)"
sodipodi:linespacing="125%"
id="text3223"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="-102.18218"
inkscape:transform-center-y="-51.009457"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3210"
id="textPath3225"><tspan
id="tspan3227"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#015a01;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light">libvirt</tspan></textPath></text>
<path
transform="matrix(-1.0841391,2.204492,2.204492,1.0841391,62.007667,-177.67557)"
sodipodi:type="arc"
style="opacity:0;fill:#ccff99;fill-opacity:1;stroke:#003366;stroke-width:0.77341002000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3392"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3394"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3392"
id="textPath3398"><tspan
style="font-size:30px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3396"
dx="1.4142134">CIRCLE</tspan></textPath></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-329.23999"
y="169.45934"
id="text3432"
sodipodi:linespacing="125%"
transform="matrix(0.32266286,-0.94651396,0.94651396,0.32266286,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
sodipodi:role="line"
x="-329.23999"
y="169.45934"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L;fill:#980101"
id="tspan3436">SMB</tspan></text>
<text
transform="matrix(0.20261113,-0.97925928,0.97925928,0.20261113,0,0)"
sodipodi:linespacing="125%"
id="text3440"
y="149.3541"
x="-348.85327"
style="font-size:38.21019362999999913px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
id="tspan3442"
style="font-size:19.10509681999999998px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L;fill:#980101"
y="149.3541"
x="-348.85327"
sodipodi:role="line">SFTP</tspan></text>
<text
xml:space="preserve"
style="font-size:38.21019362999999913px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#980101;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
x="-370.16513"
y="107.08025"
id="text3448"
sodipodi:linespacing="125%"
transform="matrix(0.01924015,-0.99981489,0.99981489,0.01924015,0,0)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><tspan
sodipodi:role="line"
x="-370.16513"
y="107.08025"
style="font-size:19.10509681999999998px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L;fill:#980101"
id="tspan3450">WEB</tspan></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-y="-50.660877"
inkscape:transform-center-x="0.37728737"
sodipodi:linespacing="125%"
id="text3454"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"><textPath
xlink:href="#path3464"
id="textPath3470"><tspan
id="tspan3458"
style="font-weight:bold;fill:#980101"
dx="-4.24264">LVM</tspan></textPath></text>
<path
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 125.58656,364.42906 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
id="path3464"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:transform-center-x="-70.632065"
inkscape:transform-center-y="98.769975"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3473"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-97.650821"
inkscape:transform-center-y="65.385"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="matrix(0.84808922,-0.52985344,0.52985344,0.84808922,-115.15947,86.056735)"><textPath
id="textPath3475"
xlink:href="#path3464"><tspan
style="font-weight:bold;fill:#980101"
id="tspan3477"
dx="-1.7677672">QCOW</tspan></textPath></text>
<path
inkscape:transform-center-y="44.466657"
inkscape:transform-center-x="-108.56353"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3479"
d="m 184.44313,328.58263 c 20.07888,-22.1705 31.82929,-50.62949 33.24079,-80.50758"
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
id="text3487"
sodipodi:linespacing="125%"
inkscape:transform-center-x="-1.5797689"
inkscape:transform-center-y="-50.705679"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3503"
id="textPath3506"><tspan
style="font-weight:bold;fill:#980101"
id="tspan3491"
dx="1.0606601">iSCSI</tspan></textPath></text>
<path
inkscape:transform-center-y="98.769975"
inkscape:transform-center-x="-70.632065"
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3493"
d="m 127.00077,387.05648 c 28.77579,-8.16369 53.82029,-26.07346 70.84837,-50.66486"
style="opacity:0;fill:#fdd99b;fill-opacity:1;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:transform-center-y="70.938638"
inkscape:transform-center-x="-115.63696"
sodipodi:linespacing="125%"
id="text3497"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#980101;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L"
xml:space="preserve"><textPath
xlink:href="#path3503"
id="textPath3510"><tspan
id="tspan3501"
style="font-weight:bold;fill:#980101"
dx="74.953384">NFS over IB</tspan></textPath></text>
<path
sodipodi:type="arc"
style="opacity:0;fill:#980101;fill-opacity:1;stroke:#ffffff;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3515"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="29"
sodipodi:ry="29"
d="m 121.5,243.86218 a 29,29 0 1 1 -58,0 29,29 0 1 1 58,0 z"
transform="matrix(-0.01061887,0.99994362,-0.99994362,-0.01061887,337.33068,153.95694)"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:type="arc"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#003366;stroke-width:1.89999998000000003;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3520"
sodipodi:cx="92.5"
sodipodi:cy="243.86218"
sodipodi:rx="10.000001"
sodipodi:ry="10.000001"
d="m 102.5,243.86218 a 10.000001,10.000001 0 1 1 -20.000001,0 10.000001,10.000001 0 1 1 20.000001,0 z"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3057"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3524"
id="textPath3536"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold;fill:#015a01;fill-opacity:1"
id="tspan3059"
dx="2 0 0 0 0 0 0 0 0 0 0 7.5">VT-x/AMD-V IOMMU+CUDA</tspan></textPath></text>
<path
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:type="arc"
style="fill:none;stroke:none;stroke-width:0.58075160000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path3524"
sodipodi:cx="148.5"
sodipodi:cy="86.862183"
sodipodi:rx="40.5"
sodipodi:ry="40.5"
d="m 189,86.862183 a 40.5,40.5 0 1 1 -81,0 40.5,40.5 0 1 1 81,0 z"
transform="matrix(-1.5029938,-2.9059467,2.9059467,-1.5029938,63.277693,805.94859)" />
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3550"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
xml:space="preserve"
inkscape:transform-center-x="110.47503"
inkscape:transform-center-y="3.8880154"
transform="matrix(-0.49541966,-0.86865376,0.86865376,-0.49541966,-75.005485,444.52677)"><textPath
id="textPath3552"
xlink:href="#path3524"><tspan
id="tspan3554"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#015a01;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold">Netfilter dnsmasq Open</tspan></textPath></text>
<text
inkscape:transform-center-y="3.8880154"
inkscape:transform-center-x="110.47503"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#015a01;fill-opacity:1;stroke:none;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Light"
id="text3556"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
transform="translate(1.5,-1)"><textPath
xlink:href="#path3562"
id="textPath3565"><tspan
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;fill:#015a01;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L Semi-Bold"
id="tspan3560"
dx="22.627419 0 0 0 0 0 0 0 0 0 0 1.4142135"> iptables tinydns vSwitch</tspan></textPath></text>
<path
transform="matrix(-0.71022656,3.1098739,-3.1098739,-0.71022656,468.09906,-156.26226)"
d="M 187.35849,98.27567 A 40.5,40.5 0 0 1 148.04236,127.3596"
sodipodi:ry="40.5"
sodipodi:rx="40.5"
sodipodi:cy="86.862183"
sodipodi:cx="148.5"
id="path3568"
style="fill:none;stroke:#003366;stroke-width:0.59562188;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
sodipodi:type="arc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"
sodipodi:start="0.28568475"
sodipodi:end="1.5820964"
sodipodi:open="true" />
<path
transform="matrix(-0.71022656,3.1098739,-3.1098739,-0.71022656,468.09906,-156.26226)"
style="fill:none;stroke:#003366;stroke-width:0.59562188;stroke-miterlimit:4;stroke-dashoffset:0"
d="m 148.08079,120.43357 -0.094,13.72532"
id="path3570"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3573"
d="M -5.8550661,286.3402 -46.722319,302.04979"
style="fill:none;stroke:#003366;stroke-width:1.89999998;stroke-miterlimit:4;stroke-dashoffset:0"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
id="text3138"
sodipodi:linespacing="125%"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
inkscape:export-xdpi="160.46001"
inkscape:export-ydpi="160.46001"><textPath
xlink:href="#path3575"
id="textPath3577"><tspan
style="-inkscape-font-specification:TitilliumText25L;font-family:TitilliumText25L;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:16px;fill:#ffffff;fill-opacity:1"
id="tspan3140">virtualization</tspan></textPath></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3582"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"
inkscape:transform-center-x="156.27315"
inkscape:transform-center-y="11.085366"
transform="matrix(-0.47669194,-0.87907042,0.87907042,-0.47669194,-77.778024,441.42333)"><textPath
id="textPath3584"
xlink:href="#path3575"><tspan
id="tspan3586"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">networking</tspan></textPath></text>
<text
inkscape:export-ydpi="160.46001"
inkscape:export-xdpi="160.46001"
inkscape:export-filename="/home/maat/Munka/cloud/miscellaneous/paper/sozopol13/arch.png"
sodipodi:linespacing="125%"
id="text3590"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu"
xml:space="preserve"><textPath
xlink:href="#path3588"
id="textPath3597"><tspan
id="tspan3594"
style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffffff;fill-opacity:1;font-family:TitilliumText25L;-inkscape-font-specification:TitilliumText25L">storage</tspan></textPath></text>
</g>
</svg>
% LLNCS DOCUMENT CLASS -- version 2.17 (12-Jul-2010)
% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science
%
%%
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%% Digits \0\1\2\3\4\5\6\7\8\9
%% Exclamation \! Double quote \" Hash (number) \#
%% Dollar \$ Percent \% Ampersand \&
%% Acute accent \' Left paren \( Right paren \)
%% Asterisk \* Plus \+ Comma \,
%% Minus \- Point \. Solidus \/
%% Colon \: Semicolon \; Less than \<
%% Equals \= Greater than \> Question mark \?
%% Commercial at \@ Left bracket \[ Backslash \\
%% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{llncs}[2010/07/12 v2.17
^^J LaTeX document class for Lecture Notes in Computer Science]
% Options
\let\if@envcntreset\iffalse
\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue}
\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y}
\DeclareOption{oribibl}{\let\oribibl=Y}
\let\if@custvec\iftrue
\DeclareOption{orivec}{\let\if@custvec\iffalse}
\let\if@envcntsame\iffalse
\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue}
\let\if@envcntsect\iffalse
\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue}
\let\if@runhead\iffalse
\DeclareOption{runningheads}{\let\if@runhead\iftrue}
\let\if@openright\iftrue
\let\if@openbib\iffalse
\DeclareOption{openbib}{\let\if@openbib\iftrue}
% languages
\let\switcht@@therlang\relax
\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}}
\def\ds@francais{\def\switcht@@therlang{\switcht@francais}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass[twoside]{article}
\RequirePackage{multicol} % needed for the list of participants, index
\RequirePackage{aliascnt}
\setlength{\textwidth}{12.2cm}
\setlength{\textheight}{19.3cm}
\renewcommand\@pnumwidth{2em}
\renewcommand\@tocrmarg{3.5em}
%
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
{\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm
\parfillskip -\rightskip \pretolerance=10000
\parindent #2\relax\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima #3\relax
\advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
{#4}\nobreak
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
\par}%
\fi}
%
\def\switcht@albion{%
\def\abstractname{Abstract.}
\def\ackname{Acknowledgement.}
\def\andname{and}
\def\lastandname{\unskip, and}
\def\appendixname{Appendix}
\def\chaptername{Chapter}
\def\claimname{Claim}
\def\conjecturename{Conjecture}
\def\contentsname{Table of Contents}
\def\corollaryname{Corollary}
\def\definitionname{Definition}
\def\examplename{Example}
\def\exercisename{Exercise}
\def\figurename{Fig.}
\def\keywordname{{\bf Keywords:}}
\def\indexname{Index}
\def\lemmaname{Lemma}
\def\contriblistname{List of Contributors}
\def\listfigurename{List of Figures}
\def\listtablename{List of Tables}
\def\mailname{{\it Correspondence to\/}:}
\def\noteaddname{Note added in proof}
\def\notename{Note}
\def\partname{Part}
\def\problemname{Problem}
\def\proofname{Proof}
\def\propertyname{Property}
\def\propositionname{Proposition}
\def\questionname{Question}
\def\remarkname{Remark}
\def\seename{see}
\def\solutionname{Solution}
\def\subclassname{{\it Subject Classifications\/}:}
\def\tablename{Table}
\def\theoremname{Theorem}}
\switcht@albion
% Names of theorem like environments are already defined
% but must be translated if another language is chosen
%
% French section
\def\switcht@francais{%\typeout{On parle francais.}%
\def\abstractname{R\'esum\'e.}%
\def\ackname{Remerciements.}%
\def\andname{et}%
\def\lastandname{ et}%
\def\appendixname{Appendice}
\def\chaptername{Chapitre}%
\def\claimname{Pr\'etention}%
\def\conjecturename{Hypoth\`ese}%
\def\contentsname{Table des mati\`eres}%
\def\corollaryname{Corollaire}%
\def\definitionname{D\'efinition}%
\def\examplename{Exemple}%
\def\exercisename{Exercice}%
\def\figurename{Fig.}%
\def\keywordname{{\bf Mots-cl\'e:}}
\def\indexname{Index}
\def\lemmaname{Lemme}%
\def\contriblistname{Liste des contributeurs}
\def\listfigurename{Liste des figures}%
\def\listtablename{Liste des tables}%
\def\mailname{{\it Correspondence to\/}:}
\def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%
\def\notename{Remarque}%
\def\partname{Partie}%
\def\problemname{Probl\`eme}%
\def\proofname{Preuve}%
\def\propertyname{Caract\'eristique}%
%\def\propositionname{Proposition}%
\def\questionname{Question}%
\def\remarkname{Remarque}%
\def\seename{voir}
\def\solutionname{Solution}%
\def\subclassname{{\it Subject Classifications\/}:}
\def\tablename{Tableau}%
\def\theoremname{Th\'eor\`eme}%
}
%
% German section
\def\switcht@deutsch{%\typeout{Man spricht deutsch.}%
\def\abstractname{Zusammenfassung.}%
\def\ackname{Danksagung.}%
\def\andname{und}%
\def\lastandname{ und}%
\def\appendixname{Anhang}%
\def\chaptername{Kapitel}%
\def\claimname{Behauptung}%
\def\conjecturename{Hypothese}%
\def\contentsname{Inhaltsverzeichnis}%
\def\corollaryname{Korollar}%
%\def\definitionname{Definition}%
\def\examplename{Beispiel}%
\def\exercisename{\"Ubung}%
\def\figurename{Abb.}%
\def\keywordname{{\bf Schl\"usselw\"orter:}}
\def\indexname{Index}
%\def\lemmaname{Lemma}%
\def\contriblistname{Mitarbeiter}
\def\listfigurename{Abbildungsverzeichnis}%
\def\listtablename{Tabellenverzeichnis}%
\def\mailname{{\it Correspondence to\/}:}
\def\noteaddname{Nachtrag}%
\def\notename{Anmerkung}%
\def\partname{Teil}%
%\def\problemname{Problem}%
\def\proofname{Beweis}%
\def\propertyname{Eigenschaft}%
%\def\propositionname{Proposition}%
\def\questionname{Frage}%
\def\remarkname{Anmerkung}%
\def\seename{siehe}
\def\solutionname{L\"osung}%
\def\subclassname{{\it Subject Classifications\/}:}
\def\tablename{Tabelle}%
%\def\theoremname{Theorem}%
}
% Ragged bottom for the actual page
\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil
\global\let\@textbottom\relax}}
\renewcommand\small{%
\@setfontsize\small\@ixpt{11}%
\abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
\abovedisplayshortskip \z@ \@plus2\p@
\belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
\def\@listi{\leftmargin\leftmargini
\parsep 0\p@ \@plus1\p@ \@minus\p@
\topsep 8\p@ \@plus2\p@ \@minus4\p@
\itemsep0\p@}%
\belowdisplayskip \abovedisplayskip
}
\frenchspacing
\widowpenalty=10000
\clubpenalty=10000
\setlength\oddsidemargin {63\p@}
\setlength\evensidemargin {63\p@}
\setlength\marginparwidth {90\p@}
\setlength\headsep {16\p@}
\setlength\footnotesep{7.7\p@}
\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@}
\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@}
\setcounter{secnumdepth}{2}
\newcounter {chapter}
\renewcommand\thechapter {\@arabic\c@chapter}
\newif\if@mainmatter \@mainmattertrue
\newcommand\frontmatter{\cleardoublepage
\@mainmatterfalse\pagenumbering{Roman}}
\newcommand\mainmatter{\cleardoublepage
\@mainmattertrue\pagenumbering{arabic}}
\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi
\@mainmatterfalse}
\renewcommand\part{\cleardoublepage
\thispagestyle{empty}%
\if@twocolumn
\onecolumn
\@tempswatrue
\else
\@tempswafalse
\fi
\null\vfil
\secdef\@part\@spart}
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{}{}%
{\centering
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\huge\bfseries \partname~\thepart
\par
\vskip 20\p@
\fi
\Huge \bfseries #2\par}%
\@endpart}
\def\@spart#1{%
{\centering
\interlinepenalty \@M
\normalfont
\Huge \bfseries #1\par}%
\@endpart}
\def\@endpart{\vfil\newpage
\if@twoside
\null
\thispagestyle{empty}%
\newpage
\fi
\if@tempswa
\twocolumn
\fi}
\newcommand\chapter{\clearpage
\thispagestyle{empty}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\else
\addcontentsline{toc}{chapter}{#1}%
\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\if@twocolumn
\@topnewpage[\@makechapterhead{#2}]%
\else
\@makechapterhead{#2}%
\@afterheading
\fi}
\def\@makechapterhead#1{%
% \vspace*{50\p@}%
{\centering
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\large\bfseries \@chapapp{} \thechapter
\par\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\Large \bfseries #1\par\nobreak
\vskip 40\p@
}}
\def\@schapter#1{\if@twocolumn
\@topnewpage[\@makeschapterhead{#1}]%
\else
\@makeschapterhead{#1}%
\@afterheading
\fi}
\def\@makeschapterhead#1{%
% \vspace*{50\p@}%
{\centering
\normalfont
\interlinepenalty\@M
\Large \bfseries #1\par\nobreak
\vskip 40\p@
}}
\renewcommand\section{\@startsection{section}{1}{\z@}%
{-18\p@ \@plus -4\p@ \@minus -4\p@}%
{12\p@ \@plus 4\p@ \@minus 4\p@}%
{\normalfont\large\bfseries\boldmath
\rightskip=\z@ \@plus 8em\pretolerance=10000 }}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
{-18\p@ \@plus -4\p@ \@minus -4\p@}%
{8\p@ \@plus 4\p@ \@minus 4\p@}%
{\normalfont\normalsize\bfseries\boldmath
\rightskip=\z@ \@plus 8em\pretolerance=10000 }}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-18\p@ \@plus -4\p@ \@minus -4\p@}%
{-0.5em \@plus -0.22em \@minus -0.1em}%
{\normalfont\normalsize\bfseries\boldmath}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
{-12\p@ \@plus -4\p@ \@minus -4\p@}%
{-0.5em \@plus -0.22em \@minus -0.1em}%
{\normalfont\normalsize\itshape}}
\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use
\string\subparagraph\space with this class}\vskip0.5cm
You should not use \verb|\subparagraph| with this class.\vskip0.5cm}
\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00}
\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01}
\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02}
\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03}
\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04}
\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05}
\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06}
\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07}
\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08}
\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09}
\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A}
\let\footnotesize\small
\if@custvec
\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}}
{\mbox{\boldmath$\textstyle#1$}}
{\mbox{\boldmath$\scriptstyle#1$}}
{\mbox{\boldmath$\scriptscriptstyle#1$}}}
\fi
\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}
\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil
\penalty50\hskip1em\null\nobreak\hfil\squareforqed
\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}
\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip
\halign{\hfil
$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets
\cr\to\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets
\cr\to\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
\gets\cr\to\cr}}}}}
\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr
\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr
\noalign{\vskip1pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
<\cr
\noalign{\vskip0.9pt}=\cr}}}}}
\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil
$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr
\noalign{\vskip1.2pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr
\noalign{\vskip1pt}=\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
>\cr
\noalign{\vskip0.9pt}=\cr}}}}}
\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip
\halign{\hfil
$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr
>\cr\noalign{\vskip-1pt}<\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr
>\cr\noalign{\vskip-0.8pt}<\cr}}}
{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr
>\cr\noalign{\vskip-0.3pt}<\cr}}}}}
\def\bbbr{{\rm I\!R}} %reelle Zahlen
\def\bbbm{{\rm I\!M}}
\def\bbbn{{\rm I\!N}} %natuerliche Zahlen
\def\bbbf{{\rm I\!F}}
\def\bbbh{{\rm I\!H}}
\def\bbbk{{\rm I\!K}}
\def\bbbp{{\rm I\!P}}
\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}
{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}
\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox
to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}
\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise
0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}
\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm
T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox
to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox
to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox
to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}
\def\bbbs{{\mathchoice
{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox
to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}
{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox
to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox
to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}
\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}
{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}}
{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}}
\let\ts\,
\setlength\leftmargini {17\p@}
\setlength\leftmargin {\leftmargini}
\setlength\leftmarginii {\leftmargini}
\setlength\leftmarginiii {\leftmargini}
\setlength\leftmarginiv {\leftmargini}
\setlength \labelsep {.5em}
\setlength \labelwidth{\leftmargini}
\addtolength\labelwidth{-\labelsep}
\def\@listI{\leftmargin\leftmargini
\parsep 0\p@ \@plus1\p@ \@minus\p@
\topsep 8\p@ \@plus2\p@ \@minus4\p@
\itemsep0\p@}
\let\@listi\@listI
\@listi
\def\@listii {\leftmargin\leftmarginii
\labelwidth\leftmarginii
\advance\labelwidth-\labelsep
\topsep 0\p@ \@plus2\p@ \@minus\p@}
\def\@listiii{\leftmargin\leftmarginiii
\labelwidth\leftmarginiii
\advance\labelwidth-\labelsep
\topsep 0\p@ \@plus\p@\@minus\p@
\parsep \z@
\partopsep \p@ \@plus\z@ \@minus\p@}
\renewcommand\labelitemi{\normalfont\bfseries --}
\renewcommand\labelitemii{$\m@th\bullet$}
\setlength\arraycolsep{1.4\p@}
\setlength\tabcolsep{1.4\p@}
\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}%
{{\contentsname}}}
\def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}}
\def\lastand{\ifnum\value{auco}=2\relax
\unskip{} \andname\
\else
\unskip \lastandname\
\fi}%
\def\and{\stepcounter{@auth}\relax
\ifnum\value{@auth}=\value{auco}%
\lastand
\else
\unskip,
\fi}%
\@starttoc{toc}\if@restonecol\twocolumn\fi}
\def\l@part#1#2{\addpenalty{\@secpenalty}%
\addvspace{2em plus\p@}% % space above part line
\begingroup
\parindent \z@
\rightskip \z@ plus 5em
\hrule\vskip5pt
\large % same size as for a contribution heading
\bfseries\boldmath % set line in boldface
\leavevmode % TeX command to enter horizontal mode.
#1\par
\vskip5pt
\hrule
\vskip1pt
\nobreak % Never break after part entry
\endgroup}
\def\@dotsep{2}
\let\phantomsection=\relax
\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else
{}\fi}
\def\addnumcontentsmark#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline
{\thechapter}#3}{\thepage}\hyperhrefextend}}%
\def\addcontentsmark#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}%
\def\addcontentsmarkwop#1#2#3{%
\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}%
\def\@adcmk[#1]{\ifcase #1 \or
\def\@gtempa{\addnumcontentsmark}%
\or \def\@gtempa{\addcontentsmark}%
\or \def\@gtempa{\addcontentsmarkwop}%
\fi\@gtempa{toc}{chapter}%
}
\def\addtocmark{%
\phantomsection
\@ifnextchar[{\@adcmk}{\@adcmk[3]}%
}
\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
\vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup
\parindent \z@ \rightskip \@tocrmarg
\advance\rightskip by 0pt plus 2cm
\parfillskip -\rightskip \pretolerance=10000
\leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
{\large\bfseries\boldmath#1}\ifx0#2\hfil\null
\else
\nobreak
\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
\@dotsep mu$}\hfill
\nobreak\hbox to\@pnumwidth{\hss #2}%
\fi\par
\penalty\@highpenalty \endgroup}
\def\l@title#1#2{\addpenalty{-\@highpenalty}
\addvspace{8pt plus 1pt}
\@tempdima \z@
\begingroup
\parindent \z@ \rightskip \@tocrmarg
\advance\rightskip by 0pt plus 2cm
\parfillskip -\rightskip \pretolerance=10000
\leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
#1\nobreak
\leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
\@dotsep mu$}\hfill
\nobreak\hbox to\@pnumwidth{\hss #2}\par
\penalty\@highpenalty \endgroup}
\def\l@author#1#2{\addpenalty{\@highpenalty}
\@tempdima=15\p@ %\z@
\begingroup
\parindent \z@ \rightskip \@tocrmarg
\advance\rightskip by 0pt plus 2cm
\pretolerance=10000
\leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip
\textit{#1}\par
\penalty\@highpenalty \endgroup}
\setcounter{tocdepth}{0}
\newdimen\tocchpnum
\newdimen\tocsecnum
\newdimen\tocsectotal
\newdimen\tocsubsecnum
\newdimen\tocsubsectotal
\newdimen\tocsubsubsecnum
\newdimen\tocsubsubsectotal
\newdimen\tocparanum
\newdimen\tocparatotal
\newdimen\tocsubparanum
\tocchpnum=\z@ % no chapter numbers
\tocsecnum=15\p@ % section 88. plus 2.222pt
\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt
\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt
\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt
\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt
\def\calctocindent{%
\tocsectotal=\tocchpnum
\advance\tocsectotal by\tocsecnum
\tocsubsectotal=\tocsectotal
\advance\tocsubsectotal by\tocsubsecnum
\tocsubsubsectotal=\tocsubsectotal
\advance\tocsubsubsectotal by\tocsubsubsecnum
\tocparatotal=\tocsubsubsectotal
\advance\tocparatotal by\tocparanum}
\calctocindent
\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}}
\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}}
\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}}
\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}}
\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}}
\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
\fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}}
\@starttoc{lof}\if@restonecol\twocolumn\fi}
\def\l@figure{\@dottedtocline{1}{0em}{1.5em}}
\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
\fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}}
\@starttoc{lot}\if@restonecol\twocolumn\fi}
\let\l@table\l@figure
\renewcommand\listoffigures{%
\section*{\listfigurename
\@mkboth{\listfigurename}{\listfigurename}}%
\@starttoc{lof}%
}
\renewcommand\listoftables{%
\section*{\listtablename
\@mkboth{\listtablename}{\listtablename}}%
\@starttoc{lot}%
}
\ifx\oribibl\undefined
\ifx\citeauthoryear\undefined
\renewenvironment{thebibliography}[1]
{\section*{\refname}
\def\@biblabel##1{##1.}
\small
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\if@openbib
\advance\leftmargin\bibindent
\itemindent -\bibindent
\listparindent \itemindent
\parsep \z@
\fi
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\if@openbib
\renewcommand\newblock{\par}%
\else
\renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
\fi
\sloppy\clubpenalty4000\widowpenalty4000%
\sfcode`\.=\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw
{\let\protect\noexpand\immediate
\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
\newcount\@tempcntc
\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
\@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do
{\@ifundefined
{b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries
?}\@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%
\ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne
\@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%
\else
\advance\@tempcntb\@ne
\ifnum\@tempcntb=\@tempcntc
\else\advance\@tempcntb\m@ne\@citeo
\@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}
\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else
\@citea\def\@citea{,\,\hskip\z@skip}%
\ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else
{\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else
\def\@citea{--}\fi
\advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}
\else
\renewenvironment{thebibliography}[1]
{\section*{\refname}
\small
\list{}%
{\settowidth\labelwidth{}%
\leftmargin\parindent
\itemindent=-\parindent
\labelsep=\z@
\if@openbib
\advance\leftmargin\bibindent
\itemindent -\bibindent
\listparindent \itemindent
\parsep \z@
\fi
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{}}%
\if@openbib
\renewcommand\newblock{\par}%
\else
\renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
\fi
\sloppy\clubpenalty4000\widowpenalty4000%
\sfcode`\.=\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\def\@cite#1{#1}%
\def\@lbibitem[#1]#2{\item[]\if@filesw
{\def\protect##1{\string ##1\space}\immediate
\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
\fi
\else
\@cons\@openbib@code{\noexpand\small}
\fi
\def\idxquad{\hskip 10\p@}% space that divides entry from number
\def\@idxitem{\par\hangindent 10\p@}
\def\subitem{\par\setbox0=\hbox{--\enspace}% second order
\noindent\hangindent\wd0\box0}% index entry
\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third
\noindent\hangindent\wd0\box0}% order index entry
\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
\renewenvironment{theindex}
{\@mkboth{\indexname}{\indexname}%
\thispagestyle{empty}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\let\item\par
\def\,{\relax\ifmmode\mskip\thinmuskip
\else\hskip0.2em\ignorespaces\fi}%
\normalfont\small
\begin{multicols}{2}[\@makeschapterhead{\indexname}]%
}
{\end{multicols}}
\renewcommand\footnoterule{%
\kern-3\p@
\hrule\@width 2truecm
\kern2.6\p@}
\newdimen\fnindent
\fnindent1em
\long\def\@makefntext#1{%
\parindent \fnindent%
\leftskip \fnindent%
\noindent
\llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1}
\long\def\@makecaption#1#2{%
\small
\vskip\abovecaptionskip
\sbox\@tempboxa{{\bfseries #1.} #2}%
\ifdim \wd\@tempboxa >\hsize
{\bfseries #1.} #2\par
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\def\fps@figure{htbp}
\def\fnum@figure{\figurename\thinspace\thefigure}
\def \@floatboxreset {%
\reset@font
\small
\@setnobreak
\@setminipage
}
\def\fps@table{htbp}
\def\fnum@table{\tablename~\thetable}
\renewenvironment{table}
{\setlength\abovecaptionskip{0\p@}%
\setlength\belowcaptionskip{10\p@}%
\@float{table}}
{\end@float}
\renewenvironment{table*}
{\setlength\abovecaptionskip{0\p@}%
\setlength\belowcaptionskip{10\p@}%
\@dblfloat{table}}
{\end@dblfloat}
\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
ext@#1\endcsname}{#1}{\protect\numberline{\csname
the#1\endcsname}{\ignorespaces #2}}\begingroup
\@parboxrestore
\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
\endgroup}
% LaTeX does not provide a command to enter the authors institute
% addresses. The \institute command is defined here.
\newcounter{@inst}
\newcounter{@auth}
\newcounter{auco}
\newdimen\instindent
\newbox\authrun
\newtoks\authorrunning
\newtoks\tocauthor
\newbox\titrun
\newtoks\titlerunning
\newtoks\toctitle
\def\clearheadinfo{\gdef\@author{No Author Given}%
\gdef\@title{No Title Given}%
\gdef\@subtitle{}%
\gdef\@institute{No Institute Given}%
\gdef\@thanks{}%
\global\titlerunning={}\global\authorrunning={}%
\global\toctitle={}\global\tocauthor={}}
\def\institute#1{\gdef\@institute{#1}}
\def\institutename{\par
\begingroup
\parskip=\z@
\parindent=\z@
\setcounter{@inst}{1}%
\def\and{\par\stepcounter{@inst}%
\noindent$^{\the@inst}$\enspace\ignorespaces}%
\setbox0=\vbox{\def\thanks##1{}\@institute}%
\ifnum\c@@inst=1\relax
\gdef\fnnstart{0}%
\else
\xdef\fnnstart{\c@@inst}%
\setcounter{@inst}{1}%
\noindent$^{\the@inst}$\enspace
\fi
\ignorespaces
\@institute\par
\endgroup}
\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or
{\star\star\star}\or \dagger\or \ddagger\or
\mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
\or \ddagger\ddagger \else\@ctrerr\fi}}
\def\inst#1{\unskip$^{#1}$}
\def\fnmsep{\unskip$^,$}
\def\email#1{{\tt#1}}
\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}%
\@ifpackageloaded{babel}{%
\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}%
\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}%
\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}%
}{\switcht@@therlang}%
\providecommand{\keywords}[1]{\par\addvspace\baselineskip
\noindent\keywordname\enspace\ignorespaces#1}%
}
\def\homedir{\~{ }}
\def\subtitle#1{\gdef\@subtitle{#1}}
\clearheadinfo
%
%%% to avoid hyperref warnings
\providecommand*{\toclevel@author}{999}
%%% to make title-entry parent of section-entries
\providecommand*{\toclevel@title}{0}
%
\renewcommand\maketitle{\newpage
\phantomsection
\refstepcounter{chapter}%
\stepcounter{section}%
\setcounter{section}{0}%
\setcounter{subsection}{0}%
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{equation}{0}
\setcounter{footnote}{0}%
\begingroup
\parindent=\z@
\renewcommand\thefootnote{\@fnsymbol\c@footnote}%
\if@twocolumn
\ifnum \col@number=\@ne
\@maketitle
\else
\twocolumn[\@maketitle]%
\fi
\else
\newpage
\global\@topnum\z@ % Prevents figures from going at top of page.
\@maketitle
\fi
\thispagestyle{empty}\@thanks
%
\def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}%
\def\thanks##1{\unskip{}}\def\fnmsep{\unskip}%
\instindent=\hsize
\advance\instindent by-\headlineindent
\if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else
\addcontentsline{toc}{title}{\the\toctitle}\fi
\if@runhead
\if!\the\titlerunning!\else
\edef\@title{\the\titlerunning}%
\fi
\global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}%
\ifdim\wd\titrun>\instindent
\typeout{Title too long for running head. Please supply}%
\typeout{a shorter form with \string\titlerunning\space prior to
\string\maketitle}%
\global\setbox\titrun=\hbox{\small\rm
Title Suppressed Due to Excessive Length}%
\fi
\xdef\@title{\copy\titrun}%
\fi
%
\if!\the\tocauthor!\relax
{\def\and{\noexpand\protect\noexpand\and}%
\protected@xdef\toc@uthor{\@author}}%
\else
\def\\{\noexpand\protect\noexpand\newline}%
\protected@xdef\scratch{\the\tocauthor}%
\protected@xdef\toc@uthor{\scratch}%
\fi
\addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}%
\addcontentsline{toc}{author}{\toc@uthor}%
\if@runhead
\if!\the\authorrunning!
\value{@inst}=\value{@auth}%
\setcounter{@auth}{1}%
\else
\edef\@author{\the\authorrunning}%
\fi
\global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}%
\ifdim\wd\authrun>\instindent
\typeout{Names of authors too long for running head. Please supply}%
\typeout{a shorter form with \string\authorrunning\space prior to
\string\maketitle}%
\global\setbox\authrun=\hbox{\small\rm
Authors Suppressed Due to Excessive Length}%
\fi
\xdef\@author{\copy\authrun}%
\markboth{\@author}{\@title}%
\fi
\endgroup
\setcounter{footnote}{\fnnstart}%
\clearheadinfo}
%
\def\@maketitle{\newpage
\markboth{}{}%
\def\lastand{\ifnum\value{@inst}=2\relax
\unskip{} \andname\
\else
\unskip \lastandname\
\fi}%
\def\and{\stepcounter{@auth}\relax
\ifnum\value{@auth}=\value{@inst}%
\lastand
\else
\unskip,
\fi}%
\begin{center}%
\let\newline\\
{\Large \bfseries\boldmath
\pretolerance=10000
\@title \par}\vskip .8cm
\if!\@subtitle!\else {\large \bfseries\boldmath
\vskip -.65cm
\pretolerance=10000
\@subtitle \par}\vskip .8cm\fi
\setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}%
\def\thanks##1{}\@author}%
\global\value{@inst}=\value{@auth}%
\global\value{auco}=\value{@auth}%
\setcounter{@auth}{1}%
{\lineskip .5em
\noindent\ignorespaces
\@author\vskip.35cm}
{\small\institutename}
\end{center}%
}
% definition of the "\spnewtheorem" command.
%
% Usage:
%
% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font}
% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font}
%
% New is "cap_font" and "body_font". It stands for
% fontdefinition of the caption and the text itself.
%
% "\spnewtheorem*" gives a theorem without number.
%
% A defined spnewthoerem environment is used as described
% by Lamport.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@thmcountersep{}
\def\@thmcounterend{.}
\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}}
% definition of \spnewtheorem with number
\def\@spnthm#1#2{%
\@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}}
\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}}
\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}\@addtoreset{#1}{#3}%
\expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
\csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}%
\expandafter\xdef\csname #1name\endcsname{#2}%
\global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
\global\@namedef{end#1}{\@endtheorem}}}
\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
{\@definecounter{#1}%
\expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
\expandafter\xdef\csname #1name\endcsname{#2}%
\global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}%
\global\@namedef{end#1}{\@endtheorem}}}
\def\@spothm#1[#2]#3#4#5{%
\@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}%
{\expandafter\@ifdefinable\csname #1\endcsname
{\newaliascnt{#1}{#2}%
\expandafter\xdef\csname #1name\endcsname{#3}%
\global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%
\global\@namedef{end#1}{\@endtheorem}}}}
\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@
\refstepcounter{#1}%
\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}}
\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%
\ignorespaces}
\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname
the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
\def\@spbegintheorem#1#2#3#4{\trivlist
\item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4}
\def\@spopargbegintheorem#1#2#3#4#5{\trivlist
\item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5}
% definition of \spnewtheorem* without number
\def\@sthm#1#2{\@Ynthm{#1}{#2}}
\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
{\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}%
\expandafter\xdef\csname #1name\endcsname{#2}%
\global\@namedef{end#1}{\@endtheorem}}}
\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@
\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}}
\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces}
\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1}
{#4}{#2}{#3}\ignorespaces}
\def\@Begintheorem#1#2#3{#3\trivlist
\item[\hskip\labelsep{#2#1\@thmcounterend}]}
\def\@Opargbegintheorem#1#2#3#4{#4\trivlist
\item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }}
\if@envcntsect
\def\@thmcountersep{.}
\spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape}
\else
\spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape}
\if@envcntreset
\@addtoreset{theorem}{section}
\else
\@addtoreset{theorem}{chapter}
\fi
\fi
%definition of divers theorem environments
\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily}
\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily}
\if@envcntsame % alle Umgebungen wie Theorem.
\def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}}
\else % alle Umgebungen mit eigenem Zaehler
\if@envcntsect % mit section numeriert
\def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}}
\else % nicht mit section numeriert
\if@envcntreset
\def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}
\@addtoreset{#1}{section}}
\else
\def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}
\@addtoreset{#1}{chapter}}%
\fi
\fi
\fi
\spn@wtheorem{case}{Case}{\itshape}{\rmfamily}
\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily}
\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape}
\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape}
\spn@wtheorem{example}{Example}{\itshape}{\rmfamily}
\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily}
\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape}
\spn@wtheorem{note}{Note}{\itshape}{\rmfamily}
\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily}
\spn@wtheorem{property}{Property}{\itshape}{\rmfamily}
\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape}
\spn@wtheorem{question}{Question}{\itshape}{\rmfamily}
\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily}
\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily}
\def\@takefromreset#1#2{%
\def\@tempa{#1}%
\let\@tempd\@elt
\def\@elt##1{%
\def\@tempb{##1}%
\ifx\@tempa\@tempb\else
\@addtoreset{##1}{#2}%
\fi}%
\expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname
\expandafter\def\csname cl@#2\endcsname{}%
\@tempc
\let\@elt\@tempd}
\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist
\item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5}
\def\@Opargbegintheorem##1##2##3##4{##4\trivlist
\item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }}
}
\renewenvironment{abstract}{%
\list{}{\advance\topsep by0.35cm\relax\small
\leftmargin=1cm
\labelwidth=\z@
\listparindent=\z@
\itemindent\listparindent
\rightmargin\leftmargin}\item[\hskip\labelsep
\bfseries\abstractname]}
{\endlist}
\newdimen\headlineindent % dimension for space between
\headlineindent=1.166cm % number and text of headings.
\def\ps@headings{\let\@mkboth\@gobbletwo
\let\@oddfoot\@empty\let\@evenfoot\@empty
\def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%
\leftmark\hfil}
\def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}%
\llap{\thepage}}
\def\chaptermark##1{}%
\def\sectionmark##1{}%
\def\subsectionmark##1{}}
\def\ps@titlepage{\let\@mkboth\@gobbletwo
\let\@oddfoot\@empty\let\@evenfoot\@empty
\def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%
\hfil}
\def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}%
\llap{\thepage}}
\def\chaptermark##1{}%
\def\sectionmark##1{}%
\def\subsectionmark##1{}}
\if@runhead\ps@headings\else
\ps@empty\fi
\setlength\arraycolsep{1.4\p@}
\setlength\tabcolsep{1.4\p@}
\endinput
%end of file llncs.cls
% This is LLNCS.DEM the demonstration file of
% the LaTeX macro package from Springer-Verlag
% for Lecture Notes in Computer Science,
% version 2.4 for LaTeX2e as of 16. April 2010
%
\documentclass{llncs}
%
\usepackage{makeidx} % allows for indexgeneration
%
\begin{document}
%
\mainmatter % start of the contributions
%
\title{Harnessing Wasted Computing Power for
Scientific Computing}
%
%
\author{S\'andor Guba \and M\'at\'e \H{O}ry \and Imre Szeber\'enyi}
%
\authorrunning{Ivar Ekeland et al.} % abbreviated author list (for running head)
%
%%%% list of authors for the TOC (use if author list has to be modified)
%\tocauthor{Ivar Ekeland, Roger Temam, Jeffrey Dean, David Grove,
%Craig Chambers, Kim B. Bruce, and Elisa Bertino}
%
\institute{Budapest University of Technology and Economics, Hungary,\\
\email{\{guba.sandor,orymate,szebi\}@iit.bme.hu}
}
\maketitle % typeset the title of the contribution
\begin{abstract}
Nowadays more and more general purpose workstations installed in a student
laboratory have built in multi-core CPU and graphics card providing significant
computing power. In most cases the utilization of these resources is low, and
limited to lecture hours. The concept of utility computing plays an important
role in nowadays technological development. As part of utility computing, cloud
computing offers greater flexibility and responsiveness to ICT users at lower
cost.
In  this paper, we introduce a cloud management system which enables the
simultaneous use of both dedicated resources and opportunistic environment. All
the free workstations (powered or not) are automatically added to a resource
pool, and can be used like ordinary cloud resources. Researchers can launch
various virtualized software appliances. Our solution leverages the advantages
of HTCondor and OpenNebula systems.
Modern graphics processing units (GPUs) with many-core architectures have
emerged as general-purpose parallel computing platforms that can dramatically
accelerate  scientific applications used for various simulations. Our business
model harnesses computing power of GPUs as well, using the needed amount of
unused machines. This makes the infrastructure flexible and power efficient.
Our pilot infrastructure consist of a high performance cluster and 28
workstations with dual-core CPUs and dedicated graphics cards. Altogether we
can use 10,752 CUDA cores through the network.
% felére kell rövidíteni kb.
\keywords{education cloud, grid computing, GPGPU}
\end{abstract}
%
\section{Fixed-Period Problems: The Sublinear Case}
%
With this chapter, the preliminaries are over, and we begin the search
for periodic solutions to Hamiltonian systems. All this will be done in
the convex case; that is, we shall study the boundary-value problem
\begin{eqnarray*}
\dot{x}&=&JH' (t,x)\\
x(0) &=& x(T)
\end{eqnarray*}
with $H(t,\cdot)$ a convex function of $x$, going to $+\infty$ when
$\left\|x\right\| \to \infty$.
%
\subsection{Autonomous Systems}
%
In this section, we will consider the case when the Hamiltonian $H(x)$
is autonomous. For the sake of simplicity, we shall also assume that it
is $C^{1}$.
We shall first consider the question of nontriviality, within the
general framework of
$\left(A_{\infty},B_{\infty}\right)$-subquadratic Hamiltonians. In
the second subsection, we shall look into the special case when $H$ is
$\left(0,b_{\infty}\right)$-subquadratic,
and we shall try to derive additional information.
%
\subsubsection{The General Case: Nontriviality.}
%
We assume that $H$ is
$\left(A_{\infty},B_{\infty}\right)$-sub\-qua\-dra\-tic at infinity,
for some constant symmetric matrices $A_{\infty}$ and $B_{\infty}$,
with $B_{\infty}-A_{\infty}$ positive definite. Set:
\begin{eqnarray}
\gamma :&=&{\rm smallest\ eigenvalue\ of}\ \ B_{\infty} - A_{\infty} \\
\lambda : &=& {\rm largest\ negative\ eigenvalue\ of}\ \
J \frac{d}{dt} +A_{\infty}\ .
\end{eqnarray}
Theorem~\ref{ghou:pre} tells us that if $\lambda +\gamma < 0$, the
boundary-value problem:
\begin{equation}
\begin{array}{rcl}
\dot{x}&=&JH' (x)\\
x(0)&=&x (T)
\end{array}
\end{equation}
has at least one solution
$\overline{x}$, which is found by minimizing the dual
action functional:
\begin{equation}
\psi (u) = \int_{o}^{T} \left[\frac{1}{2}
\left(\Lambda_{o}^{-1} u,u\right) + N^{\ast} (-u)\right] dt
\end{equation}
on the range of $\Lambda$, which is a subspace $R (\Lambda)_{L}^{2}$
with finite codimension. Here
\begin{equation}
N(x) := H(x) - \frac{1}{2} \left(A_{\infty} x,x\right)
\end{equation}
is a convex function, and
\begin{equation}
N(x) \le \frac{1}{2}
\left(\left(B_{\infty} - A_{\infty}\right) x,x\right)
+ c\ \ \ \forall x\ .
\end{equation}
%
\begin{proposition}
Assume $H'(0)=0$ and $ H(0)=0$. Set:
\begin{equation}
\delta := \liminf_{x\to 0} 2 N (x) \left\|x\right\|^{-2}\ .
\label{eq:one}
\end{equation}
If $\gamma < - \lambda < \delta$,
the solution $\overline{u}$ is non-zero:
\begin{equation}
\overline{x} (t) \ne 0\ \ \ \forall t\ .
\end{equation}
\end{proposition}
%
\begin{proof}
Condition (\ref{eq:one}) means that, for every
$\delta ' > \delta$, there is some $\varepsilon > 0$ such that
\begin{equation}
\left\|x\right\| \le \varepsilon \Rightarrow N (x) \le
\frac{\delta '}{2} \left\|x\right\|^{2}\ .
\end{equation}
It is an exercise in convex analysis, into which we shall not go, to
show that this implies that there is an $\eta > 0$ such that
\begin{equation}
f\left\|x\right\| \le \eta
\Rightarrow N^{\ast} (y) \le \frac{1}{2\delta '}
\left\|y\right\|^{2}\ .
\label{eq:two}
\end{equation}
\begin{figure}
\vspace{2.5cm}
\caption{This is the caption of the figure displaying a white eagle and
a white horse on a snow field}
\end{figure}
Since $u_{1}$ is a smooth function, we will have
$\left\|hu_{1}\right\|_\infty \le \eta$
for $h$ small enough, and inequality (\ref{eq:two}) will hold,
yielding thereby:
\begin{equation}
\psi (hu_{1}) \le \frac{h^{2}}{2}
\frac{1}{\lambda} \left\|u_{1} \right\|_{2}^{2} + \frac{h^{2}}{2}
\frac{1}{\delta '} \left\|u_{1}\right\|^{2}\ .
\end{equation}
If we choose $\delta '$ close enough to $\delta$, the quantity
$\left(\frac{1}{\lambda} + \frac{1}{\delta '}\right)$
will be negative, and we end up with
\begin{equation}
\psi (hu_{1}) < 0\ \ \ \ \ {\rm for}\ \ h\ne 0\ \ {\rm small}\ .
\end{equation}
On the other hand, we check directly that $\psi (0) = 0$. This shows
that 0 cannot be a minimizer of $\psi$, not even a local one.
So $\overline{u} \ne 0$ and
$\overline{u} \ne \Lambda_{o}^{-1} (0) = 0$. \qed
\end{proof}
%
\begin{corollary}
Assume $H$ is $C^{2}$ and
$\left(a_{\infty},b_{\infty}\right)$-subquadratic at infinity. Let
$\xi_{1},\allowbreak\dots,\allowbreak\xi_{N}$ be the
equilibria, that is, the solutions of $H' (\xi ) = 0$.
Denote by $\omega_{k}$
the smallest eigenvalue of $H'' \left(\xi_{k}\right)$, and set:
\begin{equation}
\omega : = {\rm Min\,} \left\{\omega_{1},\dots,\omega_{k}\right\}\ .
\end{equation}
If:
\begin{equation}
\frac{T}{2\pi} b_{\infty} <
- E \left[- \frac{T}{2\pi}a_{\infty}\right] <
\frac{T}{2\pi}\omega
\label{eq:three}
\end{equation}
then minimization of $\psi$ yields a non-constant $T$-periodic solution
$\overline{x}$.
\end{corollary}
%
We recall once more that by the integer part $E [\alpha ]$ of
$\alpha \in \bbbr$, we mean the $a\in \bbbz$
such that $a< \alpha \le a+1$. For instance,
if we take $a_{\infty} = 0$, Corollary 2 tells
us that $\overline{x}$ exists and is
non-constant provided that:
\begin{equation}
\frac{T}{2\pi} b_{\infty} < 1 < \frac{T}{2\pi}
\end{equation}
or
\begin{equation}
T\in \left(\frac{2\pi}{\omega},\frac{2\pi}{b_{\infty}}\right)\ .
\label{eq:four}
\end{equation}
%
\begin{proof}
The spectrum of $\Lambda$ is $\frac{2\pi}{T} \bbbz +a_{\infty}$. The
largest negative eigenvalue $\lambda$ is given by
$\frac{2\pi}{T}k_{o} +a_{\infty}$,
where
\begin{equation}
\frac{2\pi}{T}k_{o} + a_{\infty} < 0
\le \frac{2\pi}{T} (k_{o} +1) + a_{\infty}\ .
\end{equation}
Hence:
\begin{equation}
k_{o} = E \left[- \frac{T}{2\pi} a_{\infty}\right] \ .
\end{equation}
The condition $\gamma < -\lambda < \delta$ now becomes:
\begin{equation}
b_{\infty} - a_{\infty} <
- \frac{2\pi}{T} k_{o} -a_{\infty} < \omega -a_{\infty}
\end{equation}
which is precisely condition (\ref{eq:three}).\qed
\end{proof}
%
\begin{lemma}
Assume that $H$ is $C^{2}$ on $\bbbr^{2n} \setminus \{ 0\}$ and
that $H'' (x)$ is non-de\-gen\-er\-ate for any $x\ne 0$. Then any local
minimizer $\widetilde{x}$ of $\psi$ has minimal period $T$.
\end{lemma}
%
\begin{proof}
We know that $\widetilde{x}$, or
$\widetilde{x} + \xi$ for some constant $\xi
\in \bbbr^{2n}$, is a $T$-periodic solution of the Hamiltonian system:
\begin{equation}
\dot{x} = JH' (x)\ .
\end{equation}
There is no loss of generality in taking $\xi = 0$. So
$\psi (x) \ge \psi (\widetilde{x} )$
for all $\widetilde{x}$ in some neighbourhood of $x$ in
$W^{1,2} \left(\bbbr / T\bbbz ; \bbbr^{2n}\right)$.
But this index is precisely the index
$i_{T} (\widetilde{x} )$ of the $T$-periodic
solution $\widetilde{x}$ over the interval
$(0,T)$, as defined in Sect.~2.6. So
\begin{equation}
i_{T} (\widetilde{x} ) = 0\ .
\label{eq:five}
\end{equation}
Now if $\widetilde{x}$ has a lower period, $T/k$ say,
we would have, by Corollary 31:
\begin{equation}
i_{T} (\widetilde{x} ) =
i_{kT/k}(\widetilde{x} ) \ge
ki_{T/k} (\widetilde{x} ) + k-1 \ge k-1 \ge 1\ .
\end{equation}
This would contradict (\ref{eq:five}), and thus cannot happen.\qed
\end{proof}
%
\paragraph{Notes and Comments.}
The results in this section are a
refined version of \cite{clar:eke};
the minimality result of Proposition
14 was the first of its kind.
To understand the nontriviality conditions, such as the one in formula
(\ref{eq:four}), one may think of a one-parameter family
$x_{T}$, $T\in \left(2\pi\omega^{-1}, 2\pi b_{\infty}^{-1}\right)$
of periodic solutions, $x_{T} (0) = x_{T} (T)$,
with $x_{T}$ going away to infinity when $T\to 2\pi \omega^{-1}$,
which is the period of the linearized system at 0.
\begin{table}
\caption{This is the example table taken out of {\it The
\TeX{}book,} p.\,246}
\begin{center}
\begin{tabular}{r@{\quad}rl}
\hline
\multicolumn{1}{l}{\rule{0pt}{12pt}
Year}&\multicolumn{2}{l}{World population}\\[2pt]
\hline\rule{0pt}{12pt}
8000 B.C. & 5,000,000& \\
50 A.D. & 200,000,000& \\
1650 A.D. & 500,000,000& \\
1945 A.D. & 2,300,000,000& \\
1980 A.D. & 4,400,000,000& \\[2pt]
\hline
\end{tabular}
\end{center}
\end{table}
%
\begin{theorem} [Ghoussoub-Preiss]\label{ghou:pre}
Assume $H(t,x)$ is
$(0,\varepsilon )$-subquadratic at
infinity for all $\varepsilon > 0$, and $T$-periodic in $t$
\begin{equation}
H (t,\cdot )\ \ \ \ \ {\rm is\ convex}\ \ \forall t
\end{equation}
\begin{equation}
H (\cdot ,x)\ \ \ \ \ {\rm is}\ \ T{\rm -periodic}\ \ \forall x
\end{equation}
\begin{equation}
H (t,x)\ge n\left(\left\|x\right\|\right)\ \ \ \ \
{\rm with}\ \ n (s)s^{-1}\to \infty\ \ {\rm as}\ \ s\to \infty
\end{equation}
\begin{equation}
\forall \varepsilon > 0\ ,\ \ \ \exists c\ :\
H(t,x) \le \frac{\varepsilon}{2}\left\|x\right\|^{2} + c\ .
\end{equation}
Assume also that $H$ is $C^{2}$, and $H'' (t,x)$ is positive definite
everywhere. Then there is a sequence $x_{k}$, $k\in \bbbn$, of
$kT$-periodic solutions of the system
\begin{equation}
\dot{x} = JH' (t,x)
\end{equation}
such that, for every $k\in \bbbn$, there is some $p_{o}\in\bbbn$ with:
\begin{equation}
p\ge p_{o}\Rightarrow x_{pk} \ne x_{k}\ .
\end{equation}
\qed
\end{theorem}
%
\begin{example} [{{\rm External forcing}}]
Consider the system:
\begin{equation}
\dot{x} = JH' (x) + f(t)
\end{equation}
where the Hamiltonian $H$ is
$\left(0,b_{\infty}\right)$-subquadratic, and the
forcing term is a distribution on the circle:
\begin{equation}
f = \frac{d}{dt} F + f_{o}\ \ \ \ \
{\rm with}\ \ F\in L^{2} \left(\bbbr / T\bbbz; \bbbr^{2n}\right)\ ,
\end{equation}
where $f_{o} : = T^{-1}\int_{o}^{T} f (t) dt$. For instance,
\begin{equation}
f (t) = \sum_{k\in \bbbn} \delta_{k} \xi\ ,
\end{equation}
where $\delta_{k}$ is the Dirac mass at $t= k$ and
$\xi \in \bbbr^{2n}$ is a
constant, fits the prescription. This means that the system
$\dot{x} = JH' (x)$ is being excited by a
series of identical shocks at interval $T$.
\end{example}
%
\begin{definition}
Let $A_{\infty} (t)$ and $B_{\infty} (t)$ be symmetric
operators in $\bbbr^{2n}$, depending continuously on
$t\in [0,T]$, such that
$A_{\infty} (t) \le B_{\infty} (t)$ for all $t$.
A Borelian function
$H: [0,T]\times \bbbr^{2n} \to \bbbr$
is called
$\left(A_{\infty} ,B_{\infty}\right)$-{\it subquadratic at infinity}
if there exists a function $N(t,x)$ such that:
\begin{equation}
H (t,x) = \frac{1}{2} \left(A_{\infty} (t) x,x\right) + N(t,x)
\end{equation}
\begin{equation}
\forall t\ ,\ \ \ N(t,x)\ \ \ \ \
{\rm is\ convex\ with\ respect\ to}\ \ x
\end{equation}
\begin{equation}
N(t,x) \ge n\left(\left\|x\right\|\right)\ \ \ \ \
{\rm with}\ \ n(s)s^{-1}\to +\infty\ \ {\rm as}\ \ s\to +\infty
\end{equation}
\begin{equation}
\exists c\in \bbbr\ :\ \ \ H (t,x) \le
\frac{1}{2} \left(B_{\infty} (t) x,x\right) + c\ \ \ \forall x\ .
\end{equation}
If $A_{\infty} (t) = a_{\infty} I$ and
$B_{\infty} (t) = b_{\infty} I$, with
$a_{\infty} \le b_{\infty} \in \bbbr$,
we shall say that $H$ is
$\left(a_{\infty},b_{\infty}\right)$-subquadratic
at infinity. As an example, the function
$\left\|x\right\|^{\alpha}$, with
$1\le \alpha < 2$, is $(0,\varepsilon )$-subquadratic at infinity
for every $\varepsilon > 0$. Similarly, the Hamiltonian
\begin{equation}
H (t,x) = \frac{1}{2} k \left\|k\right\|^{2} +\left\|x\right\|^{\alpha}
\end{equation}
is $(k,k+\varepsilon )$-subquadratic for every $\varepsilon > 0$.
Note that, if $k<0$, it is not convex.
\end{definition}
%
\paragraph{Notes and Comments.}
The first results on subharmonics were
obtained by Rabinowitz in \cite{rab}, who showed the existence of
infinitely many subharmonics both in the subquadratic and superquadratic
case, with suitable growth conditions on $H'$. Again the duality
approach enabled Clarke and Ekeland in \cite{clar:eke:2} to treat the
same problem in the convex-subquadratic case, with growth conditions on
$H$ only.
Recently, Michalek and Tarantello (see \cite{mich:tar} and \cite{tar})
have obtained lower bound on the number of subharmonics of period $kT$,
based on symmetry considerations and on pinching estimates, as in
Sect.~5.2 of this article.
%
% ---- Bibliography ----
%
\begin{thebibliography}{5}
%
\bibitem {clar:eke}
Clarke, F., Ekeland, I.:
Nonlinear oscillations and
boundary-value problems for Hamiltonian systems.
Arch. Rat. Mech. Anal. 78, 315--333 (1982)
\bibitem {clar:eke:2}
Clarke, F., Ekeland, I.:
Solutions p\'{e}riodiques, du
p\'{e}riode donn\'{e}e, des \'{e}quations hamiltoniennes.
Note CRAS Paris 287, 1013--1015 (1978)
\bibitem {mich:tar}
Michalek, R., Tarantello, G.:
Subharmonic solutions with prescribed minimal
period for nonautonomous Hamiltonian systems.
J. Diff. Eq. 72, 28--55 (1988)
\bibitem {tar}
Tarantello, G.:
Subharmonic solutions for Hamiltonian
systems via a $\bbbz_{p}$ pseudoindex theory.
Annali di Matematica Pura (to appear)
\bibitem {rab}
Rabinowitz, P.:
On subharmonic solutions of a Hamiltonian system.
Comm. Pure Appl. Math. 33, 609--633 (1980)
\end{thebibliography}
\end{document}
% clmomu01.ind
%-----------------------------------------------------------------------
% CLMoMu01 1.0: LaTeX style files for books
% Sample index file for User's guide
% (c) Springer-Verlag HD
%-----------------------------------------------------------------------
\begin{theindex}
\item Absorption\idxquad 327
\item Absorption of radiation \idxquad 289--292,\, 299,\,300
\item Actinides \idxquad 244
\item Aharonov-Bohm effect\idxquad 142--146
\item Angular momentum\idxquad 101--112
\subitem algebraic treatment\idxquad 391--396
\item Angular momentum addition\idxquad 185--193
\item Angular momentum commutation relations\idxquad 101
\item Angular momentum quantization\idxquad 9--10,\,104--106
\item Angular momentum states\idxquad 107,\,321,\,391--396
\item Antiquark\idxquad 83
\item $\alpha$-rays\idxquad 101--103
\item Atomic theory\idxquad 8--10,\,219--249,\,327
\item Average value\newline ({\it see also\/} Expectation value)
15--16,\,25,\,34,\,37,\,357
\indexspace
\item Baker-Hausdorff formula\idxquad 23
\item Balmer formula\idxquad 8
\item Balmer series\idxquad 125
\item Baryon\idxquad 220,\,224
\item Basis\idxquad 98
\item Basis system\idxquad 164,\,376
\item Bell inequality\idxquad 379--381,\,382
\item Bessel functions\idxquad 201,\,313,\,337
\subitem spherical\idxquad 304--306,\, 309,\, 313--314,\,322
\item Bound state\idxquad 73--74,\,78--79,\,116--118,\,202,\, 267,\,
273,\,306,\,348,\,351
\item Boundary conditions\idxquad 59,\, 70
\item Bra\idxquad 159
\item Breit-Wigner formula\idxquad 80,\,84,\,332
\item Brillouin-Wigner perturbation theory\idxquad 203
\indexspace
\item Cathode rays\idxquad 8
\item Causality\idxquad 357--359
\item Center-of-mass frame\idxquad 232,\,274,\,338
\item Central potential\idxquad 113--135,\,303--314
\item Centrifugal potential\idxquad 115--116,\,323
\item Characteristic function\idxquad 33
\item Clebsch-Gordan coefficients\idxquad 191--193
\item Cold emission\idxquad 88
\item Combination principle, Ritz's\idxquad 124
\item Commutation relations\idxquad 27,\,44,\,353,\,391
\item Commutator\idxquad 21--22,\,27,\,44,\,344
\item Compatibility of measurements\idxquad 99
\item Complete orthonormal set\idxquad 31,\,40,\,160,\,360
\item Complete orthonormal system, {\it see}\newline
Complete orthonormal set
\item Complete set of observables, {\it see\/} Complete
set of operators
\indexspace
\item Eigenfunction\idxquad 34,\,46,\,344--346
\subitem radial\idxquad 321
\subsubitem calculation\idxquad 322--324
\item EPR argument\idxquad 377--378
\item Exchange term\idxquad 228,\,231,\,237,\,241,\,268,\,272
\indexspace
\item $f$-sum rule\idxquad 302
\item Fermi energy\idxquad 223
\indexspace
\item H$^+_2$ molecule\idxquad 26
\item Half-life\idxquad 65
\item Holzwarth energies\idxquad 68
\end{theindex}
from one.models import *
from django_extensions.management.jobs import QuarterHourlyJob
from django.core.cache import cache
import json
class Job(QuarterHourlyJob):
help = "Update statistics from OpenNebula."
def execute(self):
stat = json.loads(subprocess.check_output(['/opt/webadmin/cloud/miscellaneous/stat/stat_wrap.sh']))
cache.set('cloud_stat', stat)
......@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-07 18:16+0100\n"
"PO-Revision-Date: 2013-03-07 17:40+0100\n"
"POT-Creation-Date: 2013-03-22 10:43+0100\n"
"PO-Revision-Date: 2013-03-22 10:46+0100\n"
"Last-Translator: \n"
"Language-Team: Hungarian <cloud@ik.bme.hu>\n"
"Language: hu\n"
......@@ -18,7 +18,7 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Lokalize 1.4\n"
#: admin.py:11 models.py:318 models.py:365
#: admin.py:11 models.py:319 models.py:366
msgid "owner"
msgstr "tulajdonos"
......@@ -47,64 +47,64 @@ msgstr "VM felfüggesztése"
msgid "Resume VM"
msgstr "VM folytatása"
#: models.py:36
#: models.py:37
msgid "user"
msgstr "felhasználó"
#: models.py:39
#: models.py:40
msgid "Samba password"
msgstr "Samba jelszó"
#: models.py:40
#: models.py:41
msgid "Generated password for accessing store from Windows."
msgstr "Generált jelszó az adattár eléréséhez Windows alól."
#: models.py:42
#: models.py:43
msgid "SSH key (public)"
msgstr "SSH kulcs (nyilvános)"
#: models.py:44
#: models.py:45
msgid "Generated SSH public key for accessing store from Linux."
msgstr "Generált SSH publikus kulcs az adattár eléréséhez Linux alól."
#: models.py:46
#: models.py:47
msgid "SSH key (private)"
msgstr "SSH kulcs (magán)"
#: models.py:47
#: models.py:48
msgid "Generated SSH private key for accessing store from Linux."
msgstr "Generált SSH privát kulcs az adattár eléréséhez Linux alól."
#: models.py:49
#: models.py:50
msgid "share quota"
msgstr "megosztó kvóta"
#: models.py:51
#: models.py:52
msgid "instance quota"
msgstr "példány kvóta"
#: models.py:53
#: models.py:54
msgid "disk quota"
msgstr "lemezkvóta"
#: models.py:54
#: models.py:55
msgid "Disk quota in mebibytes."
msgstr "Lemezkvóta mebibyte-okban."
#: models.py:128
#: models.py:129
#, python-format
msgid "OpenSSH key type %s is not supported."
msgstr "A következő OpenSSH kulcstípus nincs támogatva: %s."
#: models.py:138
#: models.py:139
msgid "Invalid OpenSSH public key."
msgstr "Érvénytelen OpenSSH nyilvános kulcs."
#: models.py:143
#: models.py:144
msgid "SSH key"
msgstr "SSH kulcs"
#: models.py:144
#: models.py:145
msgid ""
"<a href=\"/info/ssh/\">SSH public key in OpenSSH format</a> used for shell "
"and store login (2048+ bit RSA preferred). Example: <code>ssh-rsa AAAAB..."
......@@ -114,294 +114,294 @@ msgstr ""
"bejelentkezéshez – ajánlás: 2048+ bites RSA. Példa: <code><code>ssh-rsa\n"
"AAAAB...QtQ== jozsi</a>."
#: models.py:154
#: models.py:155
msgid "unnamed"
msgstr "névtelen"
#: models.py:158
#: models.py:159
msgid "init"
msgstr "új"
#: models.py:158
#: models.py:159
msgid "perparing"
msgstr "előkészítés"
#: models.py:159 models.py:304
#: models.py:160 models.py:305
msgid "saving"
msgstr "mentés"
#: models.py:159 models.py:305
#: models.py:160 models.py:306
msgid "ready"
msgstr "kész"
#: models.py:161
#: models.py:162
msgid "lab"
msgstr "labor"
#: models.py:163
#: models.py:164
msgid "For lab or homework with short lifetime."
msgstr "Géptermi vagy otthoni feladatokhoz (rövid élettartam)."
#: models.py:164
#: models.py:165
msgid "project"
msgstr "projekt"
#: models.py:166
#: models.py:167
msgid "For project work."
msgstr "Projektmunkához."
#: models.py:167
#: models.py:168
msgid "server"
msgstr "szerver"
#: models.py:169
#: models.py:170
msgid "For long-term server use."
msgstr "Hosszú távú, szerver-felhasználáshoz."
#: models.py:175 models.py:218 models.py:253 models.py:292 models.py:309
#: models.py:360
#: models.py:176 models.py:219 models.py:254 models.py:293 models.py:310
#: models.py:361
msgid "name"
msgstr "név"
#: models.py:176 models.py:326
#: models.py:177 models.py:327
msgid "description"
msgstr "leírás"
#: models.py:180 models.py:321 models.py:368
#: models.py:181 models.py:322 models.py:369
msgid "created at"
msgstr "létrehozás ideje"
#: models.py:182
#: models.py:183
msgid "instance limit"
msgstr "példánykorlát"
#: models.py:183
#: models.py:184
msgid "Maximal count of instances launchable for this share."
msgstr "A megosztás alapján futtatható példányok maximális száma."
#: models.py:185
#: models.py:186
msgid "per user limit"
msgstr "felhasználónkénti korlát"
#: models.py:186
#: models.py:187
msgid "Maximal count of instances launchable by a single user."
msgstr "Egy felhasználó által indítható példányok száma."
#: models.py:254
#: models.py:255
msgid "NAT"
msgstr "NAT"
#: models.py:255
#: models.py:256
msgid "If network address translation is done."
msgstr "Hálózati címfordítás történik-e."
#: models.py:256 models.py:324
#: models.py:257 models.py:325
msgid "public"
msgstr "publikus"
#: models.py:257
#: models.py:258
msgid "If internet gateway is available."
msgstr "Van-e elérheti internetes útválasztás."
#: models.py:293
#: models.py:294
msgid "CPU cores."
msgstr "CPU magok száma."
#: models.py:294
#: models.py:295
msgid "Mebibytes of memory."
msgstr "Memória mérete mebibyte-ban."
#: models.py:295
#: models.py:296
msgid "credits"
msgstr "kredit"
#: models.py:296
#: models.py:297
msgid "Price of instance."
msgstr "Példány értéke."
#: models.py:304
#: models.py:305
msgid "new"
msgstr "új"
#: models.py:312
#: models.py:313
msgid "access method"
msgstr "elérési mód"
#: models.py:313
#: models.py:314
msgid "disk"
msgstr "lemez"
#: models.py:315
#: models.py:316
msgid "instance type"
msgstr "példánytípus"
#: models.py:316
#: models.py:317
msgid "network"
msgstr "hálózat"
#: models.py:325
#: models.py:326
msgid "If other users can derive templates of this one."
msgstr "Más felhasználók készíthetnek-e ez alapján új sablonokat."
#: models.py:327
#: models.py:328
msgid "operating system"
msgstr "operációs rendszer"
#: models.py:328
#: models.py:329
#, python-format
msgid "Name of operating system in format like \"%s\"."
msgstr "Operációs rendszer neve a következő formában: „%s”."
#: models.py:332 models.py:363
#: models.py:333 models.py:364
msgid "template"
msgstr "sablon"
#: models.py:333
#: models.py:334
msgid "templates"
msgstr "sablonok"
#: models.py:362
#: models.py:363
msgid "IP address"
msgstr "IP cím"
#: models.py:370
#: models.py:371
msgid "deployable"
msgstr "beküldhető"
#: models.py:371
#: models.py:372
msgid "pending"
msgstr "várakozó"
#: models.py:372
#: models.py:373
msgid "done"
msgstr "kész"
#: models.py:373
#: models.py:374
msgid "active"
msgstr "aktív"
#: models.py:374
#: models.py:375
msgid "unknown"
msgstr "ismeretlen"
#: models.py:375
#: models.py:376
msgid "suspended"
msgstr "felfüggesztett"
#: models.py:376
#: models.py:377
msgid "failed"
msgstr "hiba"
#: models.py:379
#: models.py:380
msgid "active since"
msgstr "aktívvá válás ideje"
#: models.py:380
#: models.py:381
msgid "Time stamp of successful boot report."
msgstr "A sikeres indulás jelentésének időpontja."
#: models.py:382
#: models.py:383
msgid "host in firewall"
msgstr "gép a tűzfalban"
#: models.py:383
#: models.py:384
msgid "password"
msgstr "jelszó"
#: models.py:384
#: models.py:385
msgid "Original password of instance"
msgstr "A példány eredeti jelszava."
#: models.py:386
#: models.py:387
msgid "OpenNebula ID"
msgstr "OpenNebula ID"
#: models.py:388
#: models.py:389
msgid "share"
msgstr "megosztás"
#: models.py:390 templates/box/vm/entry.html:58
#: models.py:391 templates/box/vm/entry.html:58
msgid "time of suspend"
msgstr "felfüggesztés ideje"
#: models.py:392 templates/box/vm/entry.html:68
#: models.py:393 templates/box/vm/entry.html:68
msgid "time of delete"
msgstr "törlés ideje"
#: models.py:396
#: models.py:397
msgid "instance"
msgstr "példány"
#: models.py:397
#: models.py:398
msgid "instances"
msgstr "példányok"
#: models.py:416
#: models.py:417
msgid "None"
msgstr "Nincs"
#: views.py:84
#: views.py:82
msgid "Invalid template ID."
msgstr "Nincs ilyen sablon."
#: views.py:87
#: views.py:85
msgid "There are running instances of this template."
msgstr "A sablonnak még vannak futó példányai."
#: views.py:89
#: views.py:87
msgid "Template is still shared."
msgstr "A sablon még meg van osztva."
#: views.py:91
#: views.py:89
msgid "You don't have permission to delete this template."
msgstr "Nincs joga törölni a sablont."
#: views.py:94
#: views.py:92
msgid "Template successfully deleted."
msgstr "A sablon törlése sikeres."
#: views.py:96
#: views.py:94
msgid "Unexpected error happened."
msgstr "Váratlan hiba történt."
#: views.py:114
#: views.py:112
msgid "Could not get Virtual Machine credentials."
msgstr "Nem találhatóak a virutális gép adatai."
#: views.py:115 views.py:531
#: views.py:113 views.py:532
msgid "Failed to power off virtual machine."
msgstr "A virtuális gép kikapcsolása sikertelen."
#: views.py:164 views.py:211
#: views.py:162 views.py:209
msgid "You do not have any free share quota."
msgstr "Nincs szabad kvótája."
#: views.py:198 views.py:232
#: views.py:196 views.py:230
msgid "You do not have enough free share quota."
msgstr "Nincs elég szabad kvótája."
#: views.py:203
#: views.py:201
#, python-format
msgid "Successfully shared %s."
msgstr "„%s” megosztása sikeres."
#: views.py:241
#: views.py:239
#, python-format
msgid "Successfully edited share %s."
msgstr "„%s” megosztás szerkesztése sikeres."
#: views.py:253
#: views.py:251
msgid "Template is being saved..."
msgstr "A sablon mentése folyamatban van…"
#: views.py:284
#: views.py:282
msgid ""
"You do not have any free quota. You can not launch this until you stop an "
"other instance."
msgstr ""
"Nincs szabad kvótája. Addig nem tud gépet indítani, amíg le nem állít egyet."
#: views.py:288
#: views.py:286
msgid ""
"The share does not have any free quota. You can not launch this until "
"someone stops an instance."
......@@ -409,7 +409,7 @@ msgstr ""
"Ennek a megosztásnak elfogyott a kvótája. Nem tudja addig elindítani, amíg\n"
"valaki le nem állít egy példányt."
#: views.py:291
#: views.py:289
msgid ""
"You do not have any free quota for this share. You can not launch this until "
"you stop an other instance."
......@@ -417,15 +417,15 @@ msgstr ""
"Nincs szabad kvótája ehhez a megosztáshoz. Nem tudja addig elindítani, amíg\n"
"nem állít le egy másik példányt."
#: views.py:294
#: views.py:292
msgid "You are not a member of the share group."
msgstr "Nem tagja a megosztás csoportjának."
#: views.py:315
#: views.py:313
msgid "Can not create template."
msgstr "Sablon létrehozása sikertelen."
#: views.py:320
#: views.py:318
msgid ""
"You have no permission to try this instance without a share. Launch a new "
"instance through a share."
......@@ -433,101 +433,101 @@ msgstr ""
"Nincs joga a sablon kipróbálására megosztás nélkül. Próbálja egy megosztáson "
"keresztül."
#: views.py:335
#: views.py:333
msgid "Failed to create virtual machine."
msgstr "A virtuális gép indítása sikertelen."
#: views.py:425
#: views.py:421
msgid "Port number is in a restricted domain (22000 to 24000)."
msgstr "A megadott port foglalt tartományba esik (22000-től 24000-ig)."
#: views.py:432
#: views.py:428
#, python-format
msgid "Port %d successfully added."
msgstr "%d számú port hozzáadása sikeres."
#: views.py:434
#: views.py:430
msgid "Adding port failed."
msgstr "Port hozzáadása sikertelen."
#: views.py:450
#: views.py:446
#, python-format
msgid "Port %s successfully removed."
msgstr "%s számú port eltávolítása sikeres."
#: views.py:452
#: views.py:448
msgid "Removing port failed."
msgstr "Port eltávolítása sikertelen."
#: views.py:462
#: views.py:458
msgid "Virtual machine is successfully deleted."
msgstr "A virtuális gép törlése sikeres."
#: views.py:464
#: views.py:460
msgid "Failed to delete virtual machine."
msgstr "A virtuális gép törlése sikertelen."
#: views.py:486
#: views.py:482
msgid "There are machines running of this share."
msgstr "A sablonnak még vannak futó példányai."
#: views.py:489
#: views.py:485
msgid "Share is successfully removed."
msgstr "Megosztás eltávolítása sikeres."
#: views.py:491
#: views.py:487
msgid "Failed to remove share."
msgstr "Megosztás törlése sikertelen."
#: views.py:499
#: views.py:495
msgid "Virtual machine is successfully stopped."
msgstr "A virtuális gép sikeresen leállt."
#: views.py:501
#: views.py:497
msgid "Failed to stop virtual machine."
msgstr "A virtuális gép leállítása sikertelen."
#: views.py:509
#: views.py:506
msgid "Virtual machine is successfully resumed."
msgstr "A virtuális gép sikeresen folytatva."
#: views.py:511
#: views.py:508
msgid "Failed to resume virtual machine."
msgstr "A virtuális gép visszatöltése sikertelen."
#: views.py:519
#: views.py:520
msgid "Virtual machine is successfully renewed."
msgstr "A virtuális gép sikeresen meghosszabbítva."
#: views.py:521
#: views.py:522
msgid "Failed to renew virtual machine."
msgstr "A virtuális gép meghosszabbítása sikertelen."
#: views.py:529
#: views.py:530
msgid "Virtual machine is successfully powered off."
msgstr "A virtuális gép kikapcsolása sikeres."
#: views.py:539
#: views.py:540
msgid "Virtual machine is successfully restarted."
msgstr "A virtuális gép újraindítása sikeres."
#: views.py:541
#: views.py:542
msgid "Failed to restart virtual machine."
msgstr "A virtuális gép újraindítása sikertelen."
#: views.py:559
#: views.py:560
msgid "Failed to add public key."
msgstr "Nyilvános kulcs hozzáadása sikertelen."
#: views.py:561
#: views.py:562
msgid "Public key successfully added."
msgstr "Nyilvános kulcs hozzáadása sikeres."
#: views.py:572
#: views.py:573
msgid "Failed to delete public key"
msgstr "Nyilvános kulcs törlése sikertelen."
#: views.py:584
#: views.py:585
msgid "Failed to reset keys"
msgstr "Kulcsok újragenerálása"
......@@ -543,40 +543,44 @@ msgstr "A kért oldal nem található. Nincs itt semmi látnivaló."
msgid "Internal Server Error... Please leave the server alone..."
msgstr "Kiszolgálóoldali hiba. A manóba!"
#: templates/base.html:35
#: templates/base.html:39
msgid "Logged in:"
msgstr "Bejelentkezve:"
#: templates/base.html:36
#: templates/base.html:40
msgid "Logout"
msgstr "Kijelentkezés"
#: templates/base.html:38
#: templates/base.html:42
msgid "Admin"
msgstr "Admin"
#: templates/base.html:41
#: templates/base.html:45
msgid "Login"
msgstr "Bejelentkezés"
#: templates/base.html:73
#: templates/base.html:79
msgid "Legal notice"
msgstr "Impresszum"
#: templates/base.html:74
#: templates/base.html:80
msgid "Policy"
msgstr "Szabályzat"
#: templates/base.html:75 templates/show.html:114
#: templates/vm-credentials.html:12 templates/box/file/box.html:14
#: templates/base.html:81 templates/show.html:123
#: templates/vm-credentials.html:13 templates/box/file/box.html:14
#: templates/box/template/box.html:15 templates/box/vm/box.html:15
msgid "Help"
msgstr "Súgó"
#: templates/base.html:76
#: templates/base.html:82
msgid "Support"
msgstr "Támogatás"
#: templates/base.html:83
msgid "Change log"
msgstr "Változásnapló"
#: templates/edit-share.html:7
#, python-format
msgid "Editing share: %(t)s"
......@@ -631,7 +635,7 @@ msgid "Cancel"
msgstr "Mégsem"
#: templates/edit-share.html:62 templates/edit-template-flow.html:49
#: templates/show.html:49 templates/box/file/box.html:112
#: templates/show.html:51 templates/box/file/box.html:112
msgid "Save"
msgstr "Mentés"
......@@ -675,8 +679,8 @@ msgstr "Csoport"
#: templates/new-share.html:86 templates/box/template/box.html:71
#: templates/box/template/box.html.py:72
#: templates/box/template/summary.html:60
#: templates/box/template/summary.html:61 templates/box/vm/entry.html:34
#: templates/box/template/summary.html:57
#: templates/box/template/summary.html:58 templates/box/vm/entry.html:34
msgid "Share"
msgstr "Megosztás"
......@@ -714,105 +718,110 @@ msgstr "Tovább &raquo;"
msgid "Launch master instance"
msgstr "Mesterpéldány indítása"
#: templates/show.html:43
#: templates/show.html:45
msgid "This is a master image for your new template."
msgstr "Ez egy mestergép az új sablonhoz."
#: templates/show.html:54
#: templates/show.html:56
msgid "Connect to the machine."
msgstr "Csatlakozzon a géphez."
#: templates/show.html:56
#: templates/show.html:58
msgid "Do all the needed installation/customization."
msgstr "Végezze el a szükséges telepítést, testreszabást."
#: templates/show.html:59
#: templates/show.html:61
msgid "Log off (keep the machine running)."
msgstr "Jelentkezzen ki (a gépet NE állítsa le)."
#: templates/show.html:62
#: templates/show.html:64
msgid "Click on the \"save\" button on the right."
msgstr "Kattintson jobboldalt a „mentés” gombra."
#: templates/show.html:65
#: templates/show.html:67
msgid "The machine will be shut down and its disk saved."
msgstr "A gép leáll, lemeze mentésre kerül."
#: templates/show.html:68
#: templates/show.html:70
msgid "You can share the template with your groups."
msgstr "Megoszthatja a sablont csoportjaival."
#: templates/show.html:80
#: templates/show.html:82 templates/show.html.py:101
msgid "Starting..."
msgstr "Indítás…"
#: templates/show.html:85
#: templates/show.html:87
msgid "Saving..."
msgstr "Mentés…"
#: templates/show.html:91
#: templates/show.html:93
msgid "Running"
msgstr "Fut"
#: templates/show.html:95
#: templates/show.html:98
msgid "Stopping..."
msgstr "Felfüggesztés…"
#: templates/show.html:103
msgid "Stopped"
msgstr "Leállítva"
#: templates/show.html:98
#: templates/show.html:106
msgid "Deleted"
msgstr "Törölve"
#: templates/show.html:101
#: templates/show.html:109
msgid "Unexpected error occured"
msgstr "Váratlan hiba történt"
#: templates/show.html:106
#: templates/show.html:114
msgid "Login credentials"
msgstr "Belépési adatok"
#: templates/show.html:117
#: templates/show.html:126
msgid ""
"This is a list about the network ports\n"
" forwarded to the public internet."
" forwarded to the public internet."
msgstr "Ez a nyilvános internet felé továbbított hálózati portok listája."
#: templates/show.html:119
#: templates/show.html:128
msgid ""
"You can access the given private port of\n"
" the VM trough the public address of the network.\n"
" "
" the VM trough the public address of the network.\n"
" "
msgstr ""
"A VM megadott belső portját elérheti a hálózat külső címén keresztül.\n"
" "
#: templates/show.html:122
#: templates/show.html:131
msgid ""
"On the IPV6 network you can access the\n"
" listed private ports direcly using the VM's global IPV6\n"
" address (connections to other ports are dropped).\n"
" "
" listed private ports direcly using the VM's global "
"IPV6\n"
" address (connections to other ports are dropped).\n"
" "
msgstr ""
"Az IPV6 hálózaton a megadott belső portokat közvetlenül érheti el a VM\n"
"globális IPV6 címén (a többi portra érkező kapcsolatokat eldobjuk).\n"
" "
#: templates/show.html:128
#: templates/show.html:138
msgid "Port administration"
msgstr "Portok kezelése"
#: templates/show.html:134 templates/vm-credentials.html:7
#: templates/show.html:144 templates/vm-credentials.html:7
msgid "Protocol"
msgstr "Protokoll"
#: templates/show.html:135
#: templates/show.html:145
msgid "Public port"
msgstr "Külső port"
#: templates/show.html:136
#: templates/show.html:146
msgid "Private port"
msgstr "Belső port"
#: templates/show.html:144 templates/box/template/box.html:91
#: templates/show.html:154 templates/box/template/box.html:91
#: templates/box/template/summary.html:24 templates/box/vm/summary.html:40
#: templates/box/vm/summary.html.py:41 templates/box/vm/summary.html:50
#: templates/box/vm/summary.html.py:51 templates/box/vm/summary.html:57
......@@ -821,62 +830,62 @@ msgstr "Belső port"
msgid "Delete"
msgstr "Törlés"
#: templates/show.html:164
#: templates/show.html:174
msgid "Add"
msgstr "Hozzáadás"
#: templates/vm-credentials.html:16
#: templates/vm-credentials.html:17
msgid ""
"You can access Linux machines through\n"
" the SSH protocol (we recommend\n"
" <a href=\"http://www.chiark.greenend.org.uk/"
" the SSH protocol (we recommend\n"
" <a href=\"http://www.chiark.greenend.org.uk/"
"~sgtatham/putty/\">\n"
" PuTTY</a> for Windows and OpenSSH for all other "
"systems).\n"
" "
" PuTTY</a> for Windows and OpenSSH for all "
"other systems).\n"
" "
msgstr ""
"A Linux gépeket az SSH protokollon érheti el. Windowshoz a <a href=\"http://"
"www.chiark.greenend.org.uk/~sgtatham/putty/\">PuTTY</a>-ot, minden más\n"
"rendszerhez az OpenSSH klienst ajánljuk.\n"
" "
#: templates/vm-credentials.html:22
#: templates/vm-credentials.html:23
msgid ""
"Graphical log in is also supported with\n"
" the <a href=\"http://www.nomachine.com/download.php"
"\">\n"
" NoMachine NX Client</a> application."
" the <a href=\"http://www.nomachine.com/download."
"php\">\n"
" NoMachine NX Client</a> application."
msgstr ""
"Grafikus bejelentkezés a <a href=\"http://www.nomachine.com/download.php\">\n"
"NoMachine NX Client</a> alkalmazással lehetséges."
#: templates/vm-credentials.html:27
#: templates/vm-credentials.html:28
msgid ""
"You can access Windows machines through\n"
" the remote desktop protocol."
" the remote desktop protocol."
msgstr "A Windows gépeket a távoli asztal protokollon érheti el."
#: templates/vm-credentials.html:29
#: templates/vm-credentials.html:30
msgid ""
"We recommend the built-in remote desktop\n"
" client for Windows and Remmina for Linux."
" client for Windows and Remmina for Linux."
msgstr ""
"Windowshoz a beépített távoli asztali kapcsolat alkalmazást, Linuxhoz a\n"
"Remminát ajánljuk."
#: templates/vm-credentials.html:38
#: templates/vm-credentials.html:40
msgid "IP"
msgstr "IP"
#: templates/vm-credentials.html:42
#: templates/vm-credentials.html:44
msgid "Port"
msgstr "Port"
#: templates/vm-credentials.html:46
#: templates/vm-credentials.html:48
msgid "Username"
msgstr "Felhasználónév"
#: templates/vm-credentials.html:50
#: templates/vm-credentials.html:52
msgid "Password"
msgstr "Jelszó"
......@@ -904,7 +913,7 @@ msgid ""
" drive, and on Linux ones as ~/sshfs."
msgstr ""
"A windowsos gépeken a Z: meghajtóra, Linuxon a ~/sshfs katalógusba\n"
"vancsatolva."
"van csatolva."
#: templates/box/file/box.html:23
msgid ""
......@@ -912,7 +921,7 @@ msgid ""
" you can see this folder also as ~/sshfs."
msgstr ""
"Ha a laborgépekre bejelentkezik (jelenleg csak Ubuntu alatt), akkor\n"
"afájlokat szintén a ~/sshfs katalógusban találja."
"a fájlokat szintén a ~/sshfs katalógusban találja."
#: templates/box/file/box.html:25
#, python-format
......@@ -923,7 +932,7 @@ msgid ""
" public key bellow."
msgstr ""
"SFTP klienst (pl. WinSCP) is használhat a %(serv)s címre csatlakozva.\n"
"Ehhezalább tudja nyilvános kulcsát regisztrálni."
"Ehhez alább tudja nyilvános kulcsát regisztrálni."
#: templates/box/file/box.html:31 templates/box/template/box.html:26
#: templates/box/vm/box.html:26
......@@ -1022,8 +1031,8 @@ msgstr "letöltés"
msgid "Last modification"
msgstr "Utolsó módosítás"
#: templates/box/key/entry.html:19 templates/box/template/summary.html:64
#: templates/box/template/summary.html:65
#: templates/box/key/entry.html:19 templates/box/template/summary.html:61
#: templates/box/template/summary.html:62
msgid "Remove"
msgstr "Törlés"
......@@ -1062,6 +1071,7 @@ msgstr ""
"Hozzon létre egyet, és ossza meg hallgatóival. Vagy használjon egy közöset."
#: templates/box/template/box.html:68 templates/box/template/summary.html:54
#: templates/box/vm/entry.html:30
msgid "Try"
msgstr "Kipróbálás"
......@@ -1072,8 +1082,6 @@ msgstr "Indítás"
#: templates/box/template/box.html:88 templates/box/template/summary.html:21
#: templates/box/template/summary.html:50
#: templates/box/template/summary.html:51
#: templates/box/template/summary.html:57
#: templates/box/template/summary.html:58
msgid "Edit"
msgstr "Szerkesztés"
......
......@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-07 18:16+0100\n"
"POT-Creation-Date: 2013-03-22 10:43+0100\n"
"PO-Revision-Date: 2013-03-07 17:02+0100\n"
"Last-Translator: \n"
"Language-Team: Hungarian <cloud@ik.bme.hu>\n"
......@@ -17,18 +17,17 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Lokalize 1.4\n"
#: static/script/cloud.js:24 static/script/cloud.min.js:1
#: static/script/cloud.js:24
msgid "Are you sure deleting key?"
msgstr "Biztosan törli a kulcsot?"
#: static/script/cloud.js:24 static/script/cloud.js.c:296
#: static/script/cloud.js:370 static/script/cloud.js.c:623
#: static/script/cloud.min.js:1 static/script/store.js:288
#: static/script/store.min.js:1
#: static/script/cloud.js:24 static/script/cloud.js.c:301
#: static/script/cloud.js:373 static/script/cloud.js.c:600
#: static/script/store.js:288
msgid "Delete"
msgstr "Törlés"
#: static/script/cloud.js:36 static/script/cloud.min.js:1
#: static/script/cloud.js:36
msgid ""
"Are you sure about reseting store credentials?<br /> You will lose your "
"access to your store account on your existing virtual machines!"
......@@ -36,96 +35,92 @@ msgstr ""
"Biztosan újragenerálja az adattár-kulcsait?<br /> El fogja veszteni az "
"adattár-hozzáférést a már futó virtuális gépekből!"
#: static/script/cloud.js:36 static/script/cloud.min.js:1
#: static/script/cloud.js:36
msgid "Reset"
msgstr "Újragenerálás"
#: static/script/cloud.js:75 static/script/cloud.min.js:1
#: static/script/store.js:323 static/script/store.min.js:1
#: static/script/cloud.js:76 static/script/store.js:323
msgid "Rename"
msgstr "Átnevezés"
#: static/script/cloud.js:271 static/script/cloud.min.js:1
#: static/script/store.js:288 static/script/store.min.js:1
#: static/script/cloud.js:276 static/script/store.js:288
msgid "Cancel"
msgstr "Mégsem"
#: static/script/cloud.js:285 static/script/cloud.min.js:1
#: static/script/cloud.js:290
#, c-format
msgid "Are you sure stopping %s?"
msgstr "Biztosan felfüggeszti a következőt: %s?"
#: static/script/cloud.js:286 static/script/cloud.min.js:1
#: static/script/cloud.js:291
msgid "Stop"
msgstr "Felfüggesztés"
#: static/script/cloud.js:295 static/script/cloud.min.js:1
#: static/script/cloud.js:300
#, c-format
msgid "Are you sure deleting %s?"
msgstr "Biztosan törli a következőt: %s?"
#: static/script/cloud.js:305 static/script/cloud.min.js:1
#: static/script/cloud.js:310
#, c-format
msgid "Are you sure restarting %s?"
msgstr "Biztosan újraindítja a következőt: %s?"
#: static/script/cloud.js:306 static/script/cloud.min.js:1
#: static/script/cloud.js:311
msgid "Restart"
msgstr "Újraindítás"
#: static/script/cloud.js:369 static/script/cloud.min.js:1
#: static/script/cloud.js:372
#, c-format
msgid "Are you sure deleting this %s template?"
msgstr "Biztosan törli a következő sablont: %s?"
#: static/script/cloud.js:547 static/script/cloud.js.c:550
#: static/script/cloud.min.js:1
#: static/script/cloud.js:551 static/script/cloud.js.c:554
msgid "Add owner"
msgstr "Tulajdonos hozzáadása"
#: static/script/cloud.js:550 static/script/cloud.min.js:1
#: static/script/cloud.js:554
msgid "Unknown"
msgstr "Ismeretlen"
#: static/script/cloud.js:623 static/script/cloud.min.js:1
#: static/script/cloud.js:600
#, c-format
msgid "Are you sure deleting <strong>%s</strong>"
msgstr "Törli a következő fájlt: <strong>%s</strong>"
#: static/script/store.js:52 static/script/store.js.c:61
#: static/script/store.js:70 static/script/store.js.c:220
#: static/script/store.js:282 static/script/store.min.js:1
#: static/script/store.js:282
msgid "file"
msgstr "fájl"
#: static/script/store.js:125 static/script/store.min.js:1
#: static/script/store.js:125
msgid "Toplist"
msgstr "Legújabb fájlok"
#: static/script/store.js:127 static/script/store.min.js:1
#: static/script/store.js:127
msgid "Back to the root folder"
msgstr "Vissza a gyökérmappába"
#: static/script/store.js:283 static/script/store.min.js:1
#: static/script/store.js:283
#, c-format
msgid "You are removing the file <strong>%s</strong>."
msgstr "Törli a következő fájlt: <strong>%s</strong>."
#: static/script/store.js:285 static/script/store.min.js:1
#: static/script/store.js:285
#, c-format
msgid "You are removing the folder <strong>%s</strong> (and its content)."
msgstr "Törli a következő könyvtárat és tartalmát: <strong>%s</strong>."
#: static/script/store.js:288 static/script/store.min.js:1
#: static/script/store.js:288
msgid "Are you sure?"
msgstr "Biztos benne?"
#: static/script/store.js:446 static/script/store.js.c:448
#: static/script/store.min.js:1
msgid "Upload"
msgstr "Feltöltés"
#: static/script/store.js:448 static/script/store.min.js:1
#: static/script/store.js:448
msgid "done, processing..."
msgstr "kész, feldolgozás..."
......
......@@ -18,6 +18,7 @@ from firewall.models import Host, Rule, Vlan, Record
from school.models import Person, Group
from store.api import StoreApi
from .util import keygen
from cloud.settings import CLOUD_URL
logger = logging.getLogger(__name__)
pwgen = User.objects.make_random_password
......@@ -487,7 +488,8 @@ class Instance(models.Model):
"""Submit a new instance to OpenNebula."""
from django.template.defaultfilters import escape
out = ""
inst = Instance(pw=pwgen(), template=template, owner=owner, share=share)
inst = Instance(pw=pwgen(), template=template, owner=owner,
share=share, state='PENDING')
inst.save()
hostname = u"cloud-%d" % (inst.id, )
with tempfile.NamedTemporaryFile(delete=False) as f:
......@@ -529,7 +531,7 @@ class Instance(models.Model):
"smbpw": escape(details.smb_password),
"sshkey": escape(details.ssh_private_key),
"neptun": escape(owner.username),
"booturl": "https://cloud.ik.bme.hu/b/%s/" % token,
"booturl": "%sb/%s/" % ( CLOUD_URL, token ),
"extra": extra}
f.write(tpl)
f.close()
......@@ -551,7 +553,6 @@ class Instance(models.Model):
{'neptun': owner.username, 'template': template.name,
'id': inst.one_id})
inst.save()
inst.update_state()
host = Host(vlan=Vlan.objects.get(name=template.network.name),
owner=owner)
host.hostname = hostname
......@@ -618,17 +619,23 @@ class Instance(models.Model):
def _change_state(self, new_state):
"""Change host state in OpenNebula."""
self._update_vm("<STATE>" + new_state + "</STATE>")
self.waiting = True
self.save()
def stop(self):
self._change_state("STOPPED")
self.waiting = True
self.save()
def resume(self):
self._change_state("RESUME")
def poweroff(self):
self._change_state("POWEROFF")
def restart(self):
self._change_state("RESET")
self.waiting = False
self.save()
def renew(self, which='both'):
if which in ['suspend', 'both']:
self.time_of_suspend = self.share.get_type()['suspendx']
......@@ -637,12 +644,12 @@ class Instance(models.Model):
if not (which in ['suspend', 'delete', 'both']):
raise ValueError('No such expiration type.')
self.save()
def save_as(self):
"""Save image and shut down."""
imgname = "template-%d-%d" % (self.template.id, self.id)
self._update_vm('<DISK id="0"><SAVE_AS name="%s"/></DISK>' % imgname)
self._change_state("SHUTDOWN")
self.waiting = True
self.save()
t = self.template
t.state = 'SAVING'
......
......@@ -15,7 +15,7 @@ $(function() {
$('.delete-template').click(function(e) {
e.preventDefault();
e.stopPropagation();
delete_template_confirm($(this).data('id'), $(this).data('name'));
delete_template_confirm($(this).data('url'), $(this).data('id'), $(this).data('name'));
});
$('.delete-key').click(function(e) {
var id = $(this).data('id');
......@@ -25,7 +25,7 @@ $(function() {
$.ajax({
'type': 'POST',
'data': 'id=' + id,
'url': '/ajax/key/delete/',
'url': $(this).data('url'),
'success': function() {
$('#key-' + id).slideUp(700);
}
......@@ -36,7 +36,7 @@ $(function() {
vm_confirm_popup(gettext('Are you sure about reseting store credentials?<br /> You will lose your access to your store account on your existing virtual machines!'), gettext('Reset'), function() {
$.ajax({
type: 'POST',
url: '/ajax/key/reset/',
url: $(this).data('url'),
success: function() {
window.location.reload();
}
......@@ -63,6 +63,7 @@ $(function() {
var oldName = $(this).data('name');
var content = $('#vm-' + id + '-name').html();
var self=this;
var url = $(this).data('url');
$(this).unbind('click').click(function(e){
e.preventDefault();
e.stopPropagation();
......@@ -72,7 +73,7 @@ $(function() {
})
$('#vm-' + id + '-name-details').hide();
$('#vm-' + id + '-name').html('<input type="text" value="' + oldName + '" />\
<input type="submit" value="' + gettext('Rename') + '" />');
<input type="submit" value="' + gettext('Rename') + '" data-url="'+url+'"/>');
$('#vm-' + id + '-name').find('input[type="text"]').click(function(f) {
f.preventDefault();
f.stopPropagation();
......@@ -85,7 +86,7 @@ $(function() {
type: 'POST',
data: 'name=' + newName,
dataType: 'json',
url: '/ajax/vm/rename/' + id + '/',
url: $(this).data('url'),
success: function(data) {
$('#vm-' + id + '-name-details').removeAttr('style');
$('#vm-' + id + '-name').text(data.name);
......@@ -97,7 +98,7 @@ $(function() {
$('.try-template').click(function(e) {
e.preventDefault();
e.stopPropagation();
new_vm($(this).data('id'));
new_vm($(this).data('url'));
});
$('.stop-vm').click(function(e) {
e.preventDefault();
......@@ -135,7 +136,7 @@ $(function() {
$('#modal-container .entry .summary').click(toggleDetails);
});
$('#new-template-button').click(function() {
$.get('/ajax/templateWizard', function(data) {
$.get($(this).data('url'), function(data) {
$('#modal-container').html(data);
})
$('#modal').show();
......@@ -146,7 +147,7 @@ $(function() {
var id=$(this).data('id');
$.ajax({
type: 'GET',
url: '/ajax/templateEditWizard/'+id+'/',
url: $(this).data('url'),
success: function(data){
$('#modal').show();
$('#modal-container').html(data);
......@@ -192,7 +193,11 @@ $(function() {
$('#modal-container').html(content);
$('#shadow').click(function() {
$('#new-group-wizard').html(content);
})
});
$('#modal .prev').click(function() {
$('#modal').hide();
$('#new-group-wizard').html(content);
});
function updateSummary() {
$('#new-group-summary-name').html($('#new-group-name').val());
......@@ -210,8 +215,8 @@ $(function() {
if ($(this).attr('type') == 'password') {
$(this).attr('type', 'text');
$(this).addClass('shown');
this.select();
} else if (this.selectionStart - this.selectionEnd == 0) {
$(this).attr('type', 'password');
$(this).removeClass('shown');
}
......@@ -235,7 +240,7 @@ $(function() {
e.stopPropagation();
$.ajax({
type: 'GET',
url: '/ajax/shareEdit/' + $(this).data('id') + '/',
url: $(this).data('url'),
success: function(data) {
$('#modal').show();
$('#modal-container').html(data);
......@@ -349,13 +354,11 @@ $(function() {
* New VM
*/
function new_vm(template_id) {
function new_vm(url) {
$.ajax({
type: 'POST',
url: '/ajax/vm/new/' + template_id + '/',
url: url,
success: function(data, b, xhrRequest) {
window.location.href = '/'; //xhrRequest.getResponseHeader("Location");
//alert(xhrRequest.getResponseHeader("Location"));
window.location.href = xhrRequest.getResponseHeader("Location");
}
})
......@@ -365,7 +368,7 @@ $(function() {
* Template delete
*/
function delete_template_confirm(id, name) {
function delete_template_confirm(url, id, name) {
confirm_message = interpolate(gettext("Are you sure deleting this %s template?"), ["<strong>" + name + "</strong>"])
vm_confirm_popup(confirm_message, gettext("Delete"), function() {
delete_template(id)
......@@ -375,10 +378,10 @@ $(function() {
* Template delete
*/
function delete_template(id) {
function delete_template(url, id) {
$.ajax({
type: 'POST',
url: '/ajax/template/delete/',
url: url,
data: 'id=' + id,
dataType: 'json',
statusCode: {
......@@ -508,7 +511,7 @@ $(function() {
var neptun = $(this).prev().val();
$.ajax({
type: 'POST',
url: '/ajax/group/' + $(this).data('id') + '/add/',
url: $(this).data('url'),
data: 'neptun=' + neptun,
dataType: 'json',
success: function(data) {
......@@ -530,13 +533,14 @@ $(function() {
var timer;
return function(e) {
var val = $(this).val().split(' ')[0];
var that = this;
clearTimeout(timer);
timer = setTimeout(function() {
if (val.length < 1) return;
$.ajax({
type: 'POST',
data: 'q=' + val,
url: '/ajax/group/autocomplete/',
url: $(that).data('url'),
dataType: 'json',
success: function(data) {
console.log(data);
......@@ -571,21 +575,6 @@ $(function() {
e.stopPropagation();
}
}());
$('#new-owner-form input[type=submit]').click(function() {
var neptun = $(this).prev().val();
$.ajax({
type: 'POST',
url: '/ajax/group/' + $(this).data('id') + '/add/',
data: 'neptun=' + neptun,
dataType: 'json',
success: function(data) {
window.location.reload();
}
}).error(function(data) {
//TODO: fancy modal alert
alert(JSON.parse(data.responseText).status);
})
});
$('#group-members .remove').click(function(e) {
e.preventDefault();
......@@ -593,37 +582,25 @@ $(function() {
var neptun = $(this).data('neptun');
$.ajax({
type: 'POST',
url: '/ajax/group/' + $(this).data('gid') + '/remove/',
url: $(this).data('url'),
data: 'neptun=' + neptun,
success: function(data) {
$('#member-' + neptun).slideUp(700);
}
});
});
/*$('#group-owners .remove').click(function(e) {
e.preventDefault();
e.stopPropagation();
var neptun = $(this).data('neptun');
$.ajax({
type: 'POST',
url: '/ajax/group/' + $(this).data('gid') + '/remove/',
data: 'neptun=' + neptun,
success: function(data) {
$('#member-' + neptun).slideUp(700);
}
});
});*/
$('#groups .delete').click(function(e) {
e.preventDefault();
e.stopPropagation();
var gid = $(this).data('id');
var name = $(this).data('name');
var url = $(this).data('url');
vm_confirm_popup(
interpolate(
gettext('Are you sure deleting <strong>%s</strong>'), [name]), gettext('Delete'), function() {
$.ajax({
type: 'POST',
url: '/ajax/group/delete/',
url: url,
data: 'gid=' + gid,
success: function() {
$('#group-' + gid).slideUp(700);
......
......@@ -12,12 +12,12 @@ body
background-position:80px 0;
margin:0;
padding:0;
overflow: scroll;
overflow-y: scroll;
}
#content
{
width:970px;
width:80%;
text-align:left;
margin:0 auto;
padding-bottom: 100px;
......@@ -62,6 +62,9 @@ body
color: #aaa;
}
}
img {
max-width: 100%;
}
}
.big {
font-size: 2em;
......@@ -287,6 +290,7 @@ body > footer {
box-shadow:0 0 30px rgba(0,0,0,0.4);
margin:0;
background-color: white;
height: 30px;
}
#http-error {
......@@ -299,6 +303,138 @@ body > footer {
padding: 20px;
}
.irasmu p {
margin-top: 20px;
.irasmu {
line-height: 1.8em;
section {
border-radius: 4px;
border: 1px solid #888;
background: #ccc;
box-shadow: 0 0 20px rgba(0,0,0,0.2);
padding: 20px;
margin: 10px;
&.teacher {
border-left: 3px solid #0b4599;
}
}
p {
margin-bottom: 10px;
&:last-child {
margin-bottom: 0px;
}
&.desc {
margin-left: 2em;
}
}
p.teacher {
background: #ddd;
padding: 20px;
border-left-width: 3px;
border-left-style: solid;
border-left-color: #0b4599;
}
p.teacher + p.teacher {
margin-top: 0;
padding-top: 0;
}
h4 {
margin: 0;
padding: 0;
font-size: 1em;
float: left;
}
h4:after {
content: " ♦ ";
}
h4 + p {
margin-top: 0;
}
h2 {
background-color:#000;
background-image:url(/static/image/hexabar.png);
background-position: right center;
background-repeat:no-repeat;
color:#eee;
font-size:1.5em;
border-radius: 4px;
border: 1px solid #888;
box-shadow: 0 0 20px rgba(0,0,0,0.2);
padding: 10px;
margin: 10px;
margin-bottom: 0;
border-bottom-style: none;
}
h2 + section {
border-radius: 0 0 4px 4px;
border-top-style: none;
margin-top: 0;
}
p.figure {
text-align: center;
&.figure-small img {
height: 200px;
transition: 1s 300ms;
-webkit-transition: 1s 300ms;
-moz-transition: 1s 300ms;
-o-transition: 1s 300ms;
-ms-transition: 1s 300ms;
transform-origin: center center;
-webkit-transform-origin: center center;
-moz-transform-origin: center center;
-ms-transform-origin: center center;
-o-transform-origin: center center;
&:hover {
height: 390px;
}
}
}
ol, ul {
margin-left: 1em;
}
nav {
background: #ddd;
padding: 10px;
border-left-width: 3px;
border-left-style: solid;
border-left-color: #ff6;
line-height: 1.2em;
li {
list-style-type: none;
ul li {
list-style-type: square;
margin-left: 1em;
}
}
}
em {
white-space: nowrap;
}
strong {
background-image: url(/static/image/hilite.png);
background-repeat: repeat;
font-style: normal;
font-weight: normal;
padding: 0 .4em;
margin-bottom: 2px;
}
}
@media (max-width: 900px) {
#content {
width: 100%;
}
.boxes {
width: 100% !important;
}
#modal-container{
width: 90%;
left: 0 !important;
margin-left: 2% !important;
}
.contentblock {
margin:5px;
}
body {
font-size: 1.1em;
}
}
.boxes {
width:480px;
width:50%;
float:left;
}
......@@ -300,7 +300,6 @@
}
.value {
float: right;
width: 200px;
text-align: right;
}
.description {
......@@ -309,7 +308,7 @@
.value {
font-size: 0.8em;
word-spacing: 3px;
width: 350px;
max-width: 200px;
}
}
}
......@@ -317,7 +316,7 @@
background-image: url(/static/icons/computer--plus.png);
}
}
#new-share .type-summary, .share-type .value {
#modal, #new-share .type-summary, .share-type .value {
&.type-summary {
font-size: .8em;
text-align: right;
......@@ -630,11 +629,12 @@ table {
.boxhelp {
position: relative;
font-weight: normal;
.boxhelp-box {
color:#000;
position: absolute;
left: -100px;
width: 500px;
max-width: 100%;
z-index: 1000000;
font-size: .7em;
background-color: #ffc;
......@@ -643,6 +643,7 @@ table {
box-shadow:0 0 30px rgba(0,0,0,0.3);
margin:20px;
display: none;
font-size: 14px;
}
.help:hover .boxhelp-box {
display: block;
......
......@@ -4,6 +4,11 @@
width: 100%;
height: 100%;
z-index: 999;
p,dl
{
margin:0;
padding:5px;
}
}
#shadow{
position: fixed;
......@@ -27,7 +32,6 @@
max-height: 60%;
overflow: auto;
.container{
max-height: 400px;
overflow: auto;
border-radius: 2px;
border: 1px solid #888;
......
......@@ -5,6 +5,7 @@ import os
import sys
import time
from django.core.mail import send_mail
from one.models import Instance
logger = logging.getLogger(__name__)
......@@ -12,3 +13,17 @@ class SendMailTask(Task):
def run(self, to, subject, msg, sender=u'noreply@cloud.ik.bme.hu'):
send_mail(subject, msg, sender, [ to ], fail_silently=False)
logger.info("[django][one][tasks.py] %s->%s [%s]" % (sender, to, subject) )
class UpdateInstanceStateTask(Task):
def run(self, one_id):
print one_id
try:
inst = Instance.objects.get(one_id=one_id)
except:
print 'nincs ilyen'
return
inst.update_state()
inst.waiting = False
inst.save()
print inst.state
<!DOCTYPE html>
{% load i18n %}
{% load l10n %}
{% load staticfiles %}
{% get_current_language as lang %}
<html lang="{{lang}}">
......@@ -12,9 +13,11 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="{% static "script/jquery.min.js" %}"></script>
<script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
{% if DEBUG %}window.localStorage.removeItem('https://cloud.ik.bme.hu/static/style/style.less:timestamp');{% endif %}
var current_user={{user.id}};
google.load('visualization', '1.0', {'packages':['corechart']});
</script>
{% if DEBUG %}<script src="{% static "script/less.min.js" %}"></script>{% endif %}
<script src="{% static "script/knockout.min.js" %}"></script>
......@@ -26,6 +29,7 @@
{% endif %}
{{ form.media }}
{% block js %}{% endblock %}
<meta name="viewport" content="target-densitydpi=device-dpi, initial-scale=1.0" />
</head>
<body>
<div id="header">
......@@ -70,16 +74,74 @@
<div class="clear"></div>
</div>
<footer>
<a href="/sites/legal/">{% trans "Legal notice" %}</a> |
<a href="/sites/policy/">{% trans "Policy" %}</a> |
<a href="/sites/help/">{% trans "Help" %}</a> |
<a href="/sites/support/">{% trans "Support" %}</a>
<div>
<div style="float: left" id="chart_cpu_div"></div>
<a href="/sites/legal/">{% trans "Legal notice" %}</a> |
<a href="/sites/policy/">{% trans "Policy" %}</a> |
<a href="/sites/help/">{% trans "Help" %}</a> |
<a href="/sites/support/">{% trans "Support" %}</a> |
<a href="/sites/changelog/#{{release}}" title="{% trans "Change log" %}">{{release}}</a>
<div style="float: right" id="chart_mem_div"></div>
</div>
{% if cloud_stat %}
<script type="text/javascript">
google.setOnLoadCallback(drawChart);
function drawChart() {
var data_cpu = new google.visualization.DataTable();
data_cpu.addColumn('string', 'Topping');
data_cpu.addColumn('number', 'Used');
data_cpu.addColumn('number', 'Allocated');
data_cpu.addColumn('number', 'Free');
data_cpu.addRows([
['CPU',
{{cloud_stat.CPU.USED_CPU}},
{{cloud_stat.CPU.ALLOC_CPU}},
{{cloud_stat.CPU.FREE_CPU}},]
]);
var cpu_options = {
'width':400,
'height':20,
isStacked: true,
enableInteractivity: false,
colors: ['red', 'orange', 'blue']
};
var data_mem = new google.visualization.DataTable();
data_mem.addColumn('string', 'Topping');
data_mem.addColumn('number', 'Used');
data_mem.addColumn('number', 'Allocated');
data_mem.addColumn('number', 'Free');
data_mem.addRows([
['RAM',
{{cloud_stat.MEM.USED_MEM|unlocalize}},
{{cloud_stat.MEM.ALLOC_MEM|unlocalize}},
{{cloud_stat.MEM.FREE_MEM|unlocalize}},]
]);
var mem_options = {
'width':400,
'height':20,
isStacked: true,
enableInteractivity: false,
colors: ['red', 'orange', 'blue'],
hAxis : {
viewWindowMode: 'explicit',
viewWindow: {
min: 0,
max: {{cloud_stat.MEM.USED_MEM|unlocalize}}+{{cloud_stat.MEM.ALLOC_MEM|unlocalize}}+{{cloud_stat.MEM.FREE_MEM|unlocalize}}
}
},
};
var chart = new google.visualization.BarChart(document.getElementById('chart_cpu_div'));
chart.draw(data_cpu, cpu_options);
var chart = new google.visualization.BarChart(document.getElementById('chart_mem_div'));
chart.draw(data_mem, mem_options);
}
</script>
{% endif %}
</footer>
<div id="modal" style="display: none">
<div id="shadow"></div>
<div id="modal-container">
</div>
<div id="modal-container"></div>
</div>
<script type="text/javascript">
var _gaq = _gaq || [];
......
......@@ -115,7 +115,7 @@
</div>
</li>
<li class="entry small-row key" style="display: none">
<div class="summary" id="reset-key">
<div class="summary" id="reset-key" data-url="{% url one.views.key_ajax_reset %}">
<div class="name">{% trans "Reset key" %}</div>
<div class="clear"></div>
</div>
......
......@@ -15,7 +15,7 @@
{{key}}
</div>
<div class="actions">
<a href="#" class="remove delete-key" data-id="{{key.id}}">
<a href="#" class="remove delete-key" data-url="{% url one.views.key_ajax_delete %}" data-id="{{key.id}}">
<img src="{% static "icons/minus-circle.png" %}" alt="{% trans 'Remove' %}" />
</a>
</div>
......
......@@ -46,7 +46,7 @@
</div>
{% endif %}
{% if not group %}
<li id="new-template-button" class="entry new small-row">
<li id="new-template-button" class="entry new small-row" data-url="{% url one.views.ajax_template_wizard %}">
<div class="summary">
<div class="name">Új Sablon</div>
<div class="clear"></div>
......@@ -65,7 +65,7 @@
<div class="status">{{t.state}}</div>
<div class="actions">
{% if t.state == 'READY' %}
<a href="#" class="try-template-button" data-id="{{t.id}}" title="{% trans "Try" %}">
<a href="#" class="try-template-button" data-url="{% url new_vm_from_template template=t.id %}" title="{% trans "Try" %}">
<img src="{% static "icons/control.png" %}" alt="{% trans "Start" %}"/>
</a>
<a href="#" class="template-share" data-id="{{t.id}}" data-gid="{{group.id}}" title="{% trans "Share" %}">
......
......@@ -17,7 +17,7 @@
<form action="{% url one.views.vm_unshare i.id %}" method="post">
<span title="{{i.name}}">{{i.name|truncatechars:20}}</span>
({{i.get_running}}/{{i.instance_limit}}) {{i.type}}
<a href="#" class="edit" data-id="{{i.id}}">
<a href="#" class="edit" data-url="{% url ajax_share_edit_wizard id=i.id %}">
<img src="{% static "icons/pencil.png" %}" alt="{% trans "Edit" %}" title="{% trans "Edit" %}" />
</a>
{% csrf_token %}
......@@ -47,21 +47,18 @@
{% endblock status %}
{% block actions %}
<a href="#" class="edit-template" data-id="{{ t.id }}" title="{% trans "Edit" %}">
<a href="#" class="edit-template" title="{% trans "Edit" %}" data-url="{% url one.views.ajax_template_edit_wizard id=t.id %}">
<img src="{% static "icons/pencil.png" %}" alt="{% trans "Edit" %}" />
</a>
{% if t.state == 'READY' %}
<a href="#" class="try-template" data-id="{{t.id}}" title="{% trans "Try" %}">
<a href="#" class="try-template" data-url="{% url one.views.vm_new_ajax template=t.id %}" title="{% trans "Try" %}">
<img src="{% static "icons/control.png" %}" alt="{% trans "Start" %}"/>
</a>
<!--<a href="#" title="{% trans "Edit" %}">
<img src="{% static "icons/pencil.png" %}" alt="{% trans "Edit" %}" />
</a>-->
<a href="#" class="template-share" data-id="{{t.id}}" data-gid="{{group.id}}" title="{% trans "Share" %}">
<img src="{% static "icons/user-share.png" %}" alt="{% trans "Share" %}" />
</a>
{% endif %}
<a href="#" class="delete-template" data-id="{{ t.id }}" data-name="{{ t.name }}" title="{% trans "Remove" %}">
<a href="#" class="delete-template" data-url="{% url one.views.ajax_template_delete %}" data-id="{{ t.id }}" data-name="{{ t.name }}" title="{% trans "Remove" %}">
<img src="{% static "icons/minus-circle.png" %}" alt="{% trans "Remove" %}" />
</a>
{% endblock actions %}
......@@ -23,7 +23,7 @@
{% endblock status %}
{% block actions %}
<a href="#" class="rename-vm" data-name="{{ vm.name }}" data-id="{{ vm.id }}" title="{% trans "Edit name" %}">
<a href="#" class="rename-vm" data-name="{{ vm.name }}" data-id="{{ vm.id }}" title="{% trans "Edit name" %}" data-url="{% url one.views.vm_ajax_rename iid=vm.id %}">
<img src="{% static "icons/pencil.png" %}" alt="{% trans "Edit name" %}" />
</a>
{% if vm.waiting %}
......
......@@ -4,15 +4,17 @@
{% block js %}
<script type="text/javascript">
{% if booting or state != 'ACTIVE' %}
{% if booting or state == 'PENDING' or i.waiting %}
var timer=setInterval(function(){
$.ajax({
type: 'GET',
dataType: 'json',
url: '{% url one.views.vm_ajax_instance_status id %}',
success: function(data){
if (!data.booting && data.state == 'ACTIVE'){
if (!data.waiting && !data.booting && data.state != 'PENDING'){
window.location.reload();
} else if (!data.waiting) {
// window.location.reload();
}
}
});
......@@ -84,14 +86,20 @@
<img src="{% static "image/load.gif" %}" />
{% trans "Saving..." %}
</p>
{% elif state == "ACTIVE" and not booting %}
{% elif state == "ACTIVE" and not booting and not i.waiting %}
<p id="connect" style="display:block; font-size:25px; line-height:2em;text-align:center;">
<a href="{{uri}}" class="button" onclick="return connectbutton();">
<img src="{% static "image/load.gif" %}" id="connecting" style="display:none;" />
{% trans "Running" %}
</a>
</p>
{% elif state == "STOPPED" %}
{% elif state == "ACTIVE" and not booting and i.waiting %}
<p style="display:block; font-size:25px; line-height:2em;text-align:center;">
{% trans "Stopping..." %}
</p>
{% elif state == "STOPPED" and i.waiting %}
<p style="font-size:25px; line-height:2em;text-align:center;">{% trans "Starting..." %}</p>
{% elif state == "STOPPED"%}
<p style="font-size:25px; line-height:2em;text-align:center;">{% trans "Stopped" %}</p>
{% endif %}
{% if state == "DONE" %}
......
{% load l10n %}
<html>
<head>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
// Create the data table.
var data_cpu = new google.visualization.DataTable();
data_cpu.addColumn('string', 'Topping');
data_cpu.addColumn('number', 'Slices');
data_cpu.addRows([
['Free CPU', {{STAT.CPU.FREE_CPU}}],
['Allocated CPU', {{STAT.CPU.ALLOC_CPU}}],
['Used CPU', {{STAT.CPU.USED_CPU}}],
]);
// Set chart options
var cpu_options = {'title':'Cloud CPU usage percent (100/CPU)',
'width':400,
'height':300,
slices: {0: {color: 'blue'}, 1:{color: 'orange'},
2:{color: 'red'}}
};
var data_mem = new google.visualization.DataTable();
data_mem.addColumn('string', 'Topping');
data_mem.addColumn('number', 'Slices');
data_mem.addRows([
['Free Memory', {{STAT.MEM.FREE_MEM|unlocalize}}],
['Allocated Memory', {{STAT.MEM.ALLOC_MEM|unlocalize}}],
['Used Memory', {{STAT.MEM.USED_MEM|unlocalize}}],
]);
// Set chart options
var mem_options = {'title':'Cloud Memory usage in {{STAT.DIMENSION}}',
'width':400,
'height':300,
slices: {0: {color: 'blue'}, 1:{color: 'orange'},
2:{color: 'red'}}
};
// Instantiate and draw our chart, passing in some options.
var chart = new
google.visualization.PieChart(document.getElementById('chart_cpu_div'));
chart.draw(data_cpu, cpu_options);
var chart = new
google.visualization.PieChart(document.getElementById('chart_mem_div'));
chart.draw(data_mem, mem_options);
}
</script>
</head>
<body>
<!--Div that will hold the pie chart-->
<div>Running VMs: {{STAT.VMS}}</div>
<div id="chart_cpu_div"></div>
<div id="chart_mem_div"></div>
</body>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('visualization', '1.0', {'packages':['corechart']});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data_cpu = new google.visualization.DataTable();
data_cpu.addColumn('string', 'Topping');
data_cpu.addColumn('number', 'Free');
data_cpu.addColumn('number', 'Allocated');
data_cpu.addColumn('number', 'Used');
data_cpu.addRows([
['CPU %', {{STAT.CPU.FREE_CPU}},{{STAT.CPU.ALLOC_CPU}},{{STAT.CPU.USED_CPU}}],
]);
var cpu_options = {
'title':'Cloud CPU usage percent (100/CPU)',
'width':900,
'height':50,
isStacked: true
};
var data_mem = new google.visualization.DataTable();
data_mem.addColumn('string', 'Topping');
data_mem.addColumn('number', 'Slices');
data_mem.addRows([
['Free Memory', {{STAT.MEM.FREE_MEM|unlocalize}}],
['Allocated Memory', {{STAT.MEM.ALLOC_MEM|unlocalize}}],
['Used Memory', {{STAT.MEM.USED_MEM|unlocalize}}],
]);
var mem_options = {
'title':'Cloud Memory usage in {{STAT.DIMENSION}}',
'width':400,
'height':300,
slices: {
0: {color: 'blue'},
1:{color: 'orange'},
2:{color: 'red'}
},
};
var chart = new google.visualization.BarChart(document.getElementById('chart_cpu_div'));
chart.draw(data_cpu, cpu_options);
var chart = new google.visualization.PieChart(document.getElementById('chart_mem_div'));
chart.draw(data_mem, mem_options);
}
</script>
</head>
<body>
<div>Running VMs: {{STAT.VMS}}</div>
<div id="chart_cpu_div"></div>
<div id="chart_mem_div"></div>
</body>
</html>
......@@ -32,8 +32,6 @@ logger = logging.getLogger(__name__)
def _list_instances(request):
instances = Instance.objects.exclude(state='DONE').filter(owner=request.user)
for i in instances:
i.update_state()
instances = instances.exclude(state='DONE')
return instances
......@@ -335,6 +333,7 @@ def vm_new(request, template=None, share=None, redir=True):
messages.error(request, _('Failed to create virtual machine.'))
inst = None
if inst:
inst.waiting = True
inst.time_of_suspend = time_of_suspend
inst.time_of_delete = time_of_delete
inst.save()
......@@ -356,9 +355,6 @@ vm_list = login_required(VmListView.as_view())
@login_required
def vm_show(request, iid):
inst = get_object_or_404(Instance, id=iid, owner=request.user)
inst.update_state()
if inst.template.state == "SAVING":
inst.check_if_is_save_as_done()
try:
ports = inst.firewall_host.list_ports()
except:
......@@ -388,10 +384,10 @@ def vm_show(request, iid):
@login_required
def vm_ajax_instance_status(request, iid):
inst = get_object_or_404(Instance, id=iid, owner=request.user)
inst.update_state()
return HttpResponse(json.dumps({
'booting': not inst.active_since,
'state': inst.state,
'waiting': inst.waiting,
'template': {
'state': inst.template.state
}}))
......@@ -612,7 +608,7 @@ def stat(request):
)))
def sites(request, site):
if site in [ "legal", "policy", "help", "support" ]:
if site in [ "legal", "policy", "help", "support", "changelog", ]:
return render_to_response("sites/%s.html" % site, RequestContext(request, {}))
else:
return redirect(home)
......
......@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-07 18:16+0100\n"
"POT-Creation-Date: 2013-03-22 10:43+0100\n"
"PO-Revision-Date: 2013-03-07 17:48+0100\n"
"Last-Translator: \n"
"Language-Team: American English <cloud@ik.bme.hu>\n"
......@@ -17,112 +17,108 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Lokalize 1.4\n"
#: models.py:12
#: models.py:13
msgid "Hungarian"
msgstr "Magyar"
#: models.py:12
#: models.py:13
msgid "English"
msgstr "Angol"
#: models.py:28
#: models.py:46
msgid "language"
msgstr "nyelv"
#: models.py:30
#: models.py:48
msgid "code"
msgstr "kód"
#: models.py:53
#: models.py:73
#, python-format
msgid "%(first)s %(last)s"
msgstr "%(last)s %(first)s"
#: models.py:59
#: models.py:82
msgid "person"
msgstr "személy"
#: models.py:60
#: models.py:83
msgid "persons"
msgstr "személyek"
#: models.py:64
#: models.py:87
msgid "course code"
msgstr "tárgykód"
#: models.py:66 models.py:68 models.py:120 models.py:146
#: models.py:89 models.py:91 models.py:143 models.py:169
msgid "name"
msgstr "név"
#: models.py:70
#: models.py:93
msgid "default group"
msgstr "alapértelmezett csoport"
#: models.py:71
msgid "New users will automatically get to this group."
#: models.py:94
msgid "New users will be automatically assigned to this group."
msgstr "Az új hallgatók automatikusan ebbe a csoportba kerülnek."
#: models.py:73 models.py:115 models.py:149 models.py:162
#: models.py:96 models.py:138 models.py:175 models.py:189
msgid "owners"
msgstr "tulajdonosok"
#: models.py:76 models.py:147
#: models.py:99 models.py:171
msgid "course"
msgstr "tárgy"
#: models.py:77
#: models.py:100
msgid "courses"
msgstr "tárgyak"
#: models.py:83
#: models.py:106
#, python-format
msgid "%s (auto)"
msgstr "%s (auto)"
#: models.py:108
#: models.py:131
msgid "short name"
msgstr "rövid név"
#: models.py:114
#: models.py:137 models.py:188
msgid "(none)"
msgstr "(nincs)"
#: models.py:121
#: models.py:144
msgid "start"
msgstr "kezdet"
#: models.py:122
#: models.py:145
msgid "end"
msgstr "vége"
#: models.py:125 models.py:148
#: models.py:148 models.py:173
msgid "semester"
msgstr "félév"
#: models.py:126
#: models.py:149
msgid "semesters"
msgstr "félévek"
#: models.py:139
#: models.py:162
msgid "There is no current semester."
msgstr "Nincs aktuális félév."
#: models.py:150
#: models.py:177
msgid "members"
msgstr "tagok"
#: models.py:154
#: models.py:181
msgid "group"
msgstr "csoport"
#: models.py:155
#: models.py:182
msgid "groups"
msgstr "csoportok"
#: models.py:161
msgid "n/a"
msgstr "n/a"
#: views.py:41
msgid "EduID is not available."
msgstr "Az EduID nem elérhető."
......@@ -147,15 +143,15 @@ msgstr "„%s” tárgy oktatóihoz felvéve."
msgid "Failed to add course \"%s\" ownership."
msgstr "„%s” tárgy oktatóihoz felvétel sikertelen."
#: views.py:148
#: views.py:150
msgid "Could not found Person object."
msgstr "Nem található Személy objektum."
#: views.py:187
#: views.py:189
msgid "Invalid NEPTUN code found."
msgstr "Érvénytelen Neptun-kód."
#: views.py:208 views.py:223 views.py:262
#: views.py:210 views.py:225 views.py:264
msgid "Invalid NEPTUN code"
msgstr "Érvénytelen Neptun-kód"
......@@ -320,6 +316,9 @@ msgstr "Felhasználó hozzáadása"
msgid "User NEPTUN code"
msgstr "Felhasználó Neptun-kódja"
#~ msgid "n/a"
#~ msgstr "n/a"
#~ msgid "Templates are customized versions of the base images."
#~ msgstr "A sablonok alaprendszerek testre szabott változatai."
......
......@@ -6,34 +6,56 @@ from django.core.exceptions import ValidationError
from datetime import datetime
from django.conf import settings
import one.models
import logging
LANGUAGE_CODE = settings.LANGUAGE_CODE
LANGUAGE_CHOICES = (('hu', _('Hungarian')), ('en', _('English')))
logger = logging.getLogger(__name__)
def create_user_profile(sender, instance, created, **kwargs):
"""
User creation hook.
Ensure that the specified user has an associated profile.
@param sender: The model class.
@type instance: User
@param instance: The user to create a profile for (if necessary).
@type created: Boolean
@param created: True if a new record was created.
"""
if created:
try:
p = Person.objects.get(code=instance.username)
except Exception:
except Person.DoesNotExist:
p = Person.objects.create(code=instance.username)
except:
except Exception as e:
logger.warning("Couldn't create profile for user: %(username)s"
"\nReason: %(exception)s",
{"username": instance.username,
"exception": e})
return
p.code = instance.username
p.clean()
p.save()
post_save.connect(create_user_profile, sender=User)
class Person(models.Model):
user = models.ForeignKey(User, null=True, blank=True, unique=True)
language = models.CharField(verbose_name=_('language'), blank=False, max_length=10,
choices=LANGUAGE_CHOICES, default=LANGUAGE_CODE)
language = models.CharField(verbose_name=_('language'), blank=False,
max_length=10, choices=LANGUAGE_CHOICES, default=LANGUAGE_CODE)
code = models.CharField(_('code'), max_length=30, unique=True)
def get_owned_shares(self):
return one.models.Share.objects.filter(group__in=self.owned_groups.all())
"""Get the shares of the groups which the person owns."""
return one.models.Share.objects.filter(
group__in=self.owned_groups.all())
def get_shares(self):
return one.models.Share.objects.filter(group__in=self.course_groups.all())
"""Get the shares of the groups which the person is a member of."""
return one.models.Share.objects.filter(
group__in=self.course_groups.all())
def short_name(self):
if self.user:
......@@ -45,15 +67,16 @@ class Person(models.Model):
return self.code
def __unicode__(self):
u = self.user
if not u:
return self.code
if u.last_name and u.first_name:
# TRANSLATORS: full name format used in enumerations
return _("%(first)s %(last)s") % {'first': u.first_name,
'last': u.last_name}
if self.user:
if self.user.last_name and self.user.first_name:
# TRANSLATORS: full name format used in enumerations
return _("%(first)s %(last)s") % {
'first': self.user.first_name,
'last': self.user.last_name}
else:
return self.user.username
else:
return u.username
return self.code
class Meta:
verbose_name = _('person')
......@@ -68,7 +91,7 @@ class Course(models.Model):
verbose_name=_('name'))
default_group = models.ForeignKey('Group', null=True, blank=True,
related_name='default_group_of', verbose_name=_('default group'),
help_text=_('New users will automatically get to this group.'))
help_text=_('New users will be automatically assigned to this group.'))
owners = models.ManyToManyField(Person, blank=True, null=True,
verbose_name=_('owners'))
......@@ -144,10 +167,14 @@ class Semester(models.Model):
class Group(models.Model):
name = models.CharField(max_length=80, verbose_name=_('name'))
course = models.ForeignKey('Course', null=True, blank=True, verbose_name=_('course'))
semester = models.ForeignKey('Semester', null=False, blank=False, verbose_name=_('semester'))
owners = models.ManyToManyField(Person, blank=True, null=True, related_name='owned_groups', verbose_name=_('owners'))
members = models.ManyToManyField(Person, blank=True, null=True, related_name='course_groups', verbose_name=_('members'))
course = models.ForeignKey('Course', null=True, blank=True,
verbose_name=_('course'))
semester = models.ForeignKey('Semester', null=False, blank=False,
verbose_name=_('semester'))
owners = models.ManyToManyField(Person, blank=True, null=True,
related_name='owned_groups', verbose_name=_('owners'))
members = models.ManyToManyField(Person, blank=True, null=True,
related_name='course_groups', verbose_name=_('members'))
class Meta:
unique_together = (('name', 'course', 'semester', ), )
......@@ -155,10 +182,10 @@ class Group(models.Model):
verbose_name_plural = _('groups')
def owner_list(self):
if self.owners:
if self.owners and self.owners.count() > 0:
return ", ".join([p.short_name() for p in self.owners.all()])
else:
return _("n/a")
return _("(none)")
owner_list.verbose_name = _('owners')
def member_count(self):
......@@ -172,4 +199,4 @@ class Group(models.Model):
@models.permalink
def get_absolute_url(self):
return ('group_show', None, {'gid':self.id})
return ('group_show', None, {'gid': self.id})
......@@ -16,7 +16,7 @@
<small class="details">(<a href="{{ group.get_absolute_url }}">{% trans "More details" %}</a>)</small>
</div>
<div class="actions">
<a href="#" class="delete" data-id="{{group.id}}" data-name="{{group.name}}">
<a href="#" class="delete" data-url="{% url school.views.group_ajax_delete %}" data-id="{{group.id}}" data-name="{{group.name}}">
<img src="{% static "icons/minus-circle.png" %}" alt="{% trans "Delete" %}" title="{% trans "Delete" %}" />
</a>
<a href="#" class="hide-group" data-id="{{group.id}}">
......
......@@ -37,7 +37,7 @@
<div class="name">{% trans "Add user" %}</div>
<div id="new-member-form">
<input type="text" placeholder="{% trans "User NEPTUN code" %}" />
<input type="submit" value="{% trans "Add user" %}" data-id="{{group.id}}"/>
<input type="submit" value="{% trans "Add user" %}" data-url="{% url school.views.group_ajax_add_new_member gid=group.id %}"/>
</div>
<div class="clear"></div>
</div>
......
......@@ -19,7 +19,7 @@
{% endif %}
</div>
<div class="actions">
<a href="#" class="remove" data-gid="{{group.id}}" data-neptun="{{member.code}}">
<a href="#" class="remove" data-url="{% url school.views.group_ajax_remove_member gid=group.id %}" data-neptun="{{member.code}}">
<img src="{% static "icons/minus-circle.png" %}" alt="{% trans 'Remove' %}" />
</a>
</div>
......
......@@ -53,7 +53,7 @@
</div>
<div class="details" id="new-owner-form">
<div class="container">
<input type="text" placeholder="{% trans "Owner name/NEPTUN" %}" />
<input type="text" placeholder="{% trans "Owner name/NEPTUN" %}" data-url="{% url school.views.group_ajax_owner_autocomplete %}"/>
<div id="new-owner-autocomplete"></div>
</div>
</div>
......
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
from django.test import TestCase
from models import create_user_profile, Person
Replace this with more appropriate tests for your application.
"""
class MockUser:
username = "testuser"
from django.test import TestCase
class CreateUserProfileTestCase(TestCase):
def setUp(self):
self.user = MockUser()
for p in Person.objects.all():
p.delete()
def test_new_profile(self):
"""Test profile creation functionality for new user."""
create_user_profile(self.user.__class__, self.user, True)
self.assertEqual(Person.objects.filter(
code=self.user.username).count(), 1)
def test_existing_profile(self):
"""Test profile creation functionality when it already exists."""
Person.objects.create(code=self.user.username)
create_user_profile(self.user.__class__, self.user, True)
self.assertEqual(Person.objects.filter(
code=self.user.username).count(), 1)
class PersonTestCase(TestCase):
def setUp(self):
self.testperson = Person.objects.create(code='testperson')
def test_language_code_in_choices(self):
"""Test whether the default value for language is a valid choice."""
# TODO
language_field = self.testperson._meta.get_field('language')
choice_codes = [code for (code, _) in language_field.choices]
self.assertIn(language_field.default, choice_codes)
def test_get_owned_shares(self):
# TODO
self.testperson.get_owned_shares()
def test_get_shares(self):
# TODO
self.testperson.get_shares()
def test_short_name(self):
# TODO
self.testperson.short_name()
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)
def test_unicode(self):
# TODO
self.testperson.__unicode__()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment