Kihagyás

01 óra

Időmenedzsment

Az időmenedzsment nem más, mint a rendelkezésünkre álló időkeret hatékony kihasználása.

Miért kell ezzel foglalkozni?

A Forbes adatai szerint 2020-ig mintegy 2.5 kvintillió () byte-nyi adat termelődött, amelynek 90%-a 2018 után keletkezett. A szám mutatja azt az óriási információrobbanást, amelynek hatásaival nekünk embereknek meg kell birkóznunk. Ha csak a minket érdeklő témákban is próbálunk tájékozódni, egy ilyen méretű adathalmazban akkor is elvesznénk. Ráadásul az adatok jelentős része irreleváns, vagy hamis információ, amelynek zavaros világában könnyen elveszíthetjük a kontrollt.

A ránk zúduló információk nagy részét a népszerű közösségi médiaszolgáltatások adják, amelynek veszélye az is, hogy olyan algoritmusok működnek alattuk, amelyek a felhasználói viselkedés monitorozásával úgy állítják elő a javasolt tartalmakat, hogy minél több időt töltsünk az érintett platformon (ezzel ugyanis több reklámot tudnak eladni).

A kognitív túlterheltség és az ADHD kapcsolata

Manapság egy embernek egy nap alatt olyan mennyiségű információt kell feldolgoznia, amelyre példa nem volt az emberi történelemben. Az emberi agy nem erre a feladatra specializálódott, azonban meglehetősen rugalmas természete miatt valamelyest alkalmazkodott, ami sajnos nem mindig jó irányú. A figyelemhiányos tünetek és a közösségi média használata közötti kapcsolatot vizsgáló kutatások azt mutatják, hogy az addiktív használat együtt jár a figyelemhiányos tünetek magasabb szintjével.

A ránk zúduló információk szűrése nélkül nem tudjuk a feladatainkat megfelelő időben és megfelelő minőségben elvégezni, ráadásul a fentiekből következően a mentális egészségünkre nézve is veszélyt jelent.

Az időmenedzsment eszközei

Az időmenedzsment jelentősége

Az időmenedzsment segít megtalálni a fókuszt és tudatosítani, hogy mikor mire és mennyi ideig fordítod a figyelmedet.

Ahhoz, hogy az időmenedzsment sikeres legyen, elengedhetetlen, hogy céljaid megfelelően legyenek megfogalmazva. A jó célkitűzés az alábbi attribútumokkal rendelkezik:

  • Specific, vagyis konkrét
  • Measurable, vagyis mérhető
  • Achievable, vagyis elérhető
  • Relevant, azaz releváns, és
  • Time-based, azaz időhöz kötött.

Bővebben a SMART célokról itt olvashatsz.

A hatékony időmendzsment az alábbiakon nyugszik:

  • Rendszeres célmeghatározás
  • Célokhoz kapcsolódó feladatok meghatározása
  • Időigény becslése minden feladathoz
  • A munkavégzés megtervezése az egyes feladatokhoz - mely naptári napokon, mely időpontban foglalkozol a projektmunkával
  • Napi szintű feladattervezés

A gyakorlat időpontjában tartott heti stand up során csapatszinten kerül meghatározásra a következő hét feladatlistája, valamint kerül ellenőrzésre az elmúlt időszak teljesítése. A hatékony egyéni időbeosztás menedzselése azonban minden hallgatónak felelőssége, amelyben a csapat támogatást ad.

Figyeljünk arra, hogy a feladatok elosztásánál ne tervezzünk túl. A munkavégzés során iktassunk ki minden zavaró tényezőt (mobil kikapcsolása, üzenetek némítása, közösségi média tiltása), mert ezek a distractorok az ütemezett időt képesek teljesen felborítani.

Disztraktorok

A disztraktorok olyan zavaró tényezők, amelyek akadályozzák a hatékony munkavégzést, elvonják a figyelmet a munka tárgyától, rosszabb esetben lehetetlenné is teszik azt.

A projektmenedzsment eszközök (a GitLab is) lehetőséget adnak a feladatok követésére. Minden egyes feladat állapotát fontos naprakészen tartani. Ha elkezdtél egy feladatot, végeztél vele, vagy elakadtál, jelöld is azt. Az issuek kommentjei bármit elbírnak, itt minden információt jegyezz le, ami egyrészt neked is segít, de ha segítséget kérsz, akkor másnak is támaszul szolgál.

A munkavégzés támogatására használhatsz időmenedzsment szoftvereket, amelyek segítenek a fókusz fenntartásában és a zavaró tényezők elkerülésében, valamint a munkád monitorozásában.

Az időmenedzsmenthez kapcsolódó további érdekes információkat találsz ezen az oldalon.

Sztoripont alapú időmenedzsment

A sztoripont az agilis fejlesztés során alkalmazott erőforrásbecslést támogató eszköz. Olyan relatív mérőszámrendszer, amely egymáshoz viszonyítva méri egy adot feladat elvégzéséhez szükséges erőforrások mértékét. A gyakorlatban ez azt jelenti, hogy a csapat arra tesz becslést, hogy egy adott feladathoz szükséges erőforrás mértéke miként viszonyul a legegyszerűbb feladat elvégzéséhez szükséges erőforrás mértékéhez. Az erőforrások nem előírásszerűen, de a gyakorlatban legtöbbször a ráfordítandó idővel arányosak.

A sztoripontokat leggyakrabban a Fibonacci-sorozat alapján készítik el. Az indoklás az a Fibonacci számok használatára, hogy az egyes értékek exponenciális módon növekednek, ami jól tükrözzi a szubjektíve érzékelt komplexitás növekedését. Ez a szemlélet az, ami miatt inkább erőforrásbecslésről, mint időbecslésről szokás beszélni. Az emberek a komplexitást hasonlóképpen becsülik, míg a ráfordítandó idő becslésénél több eltérés tapasztalható az egyes emberek becslései között.

Sztoripontok és a Fibonacci számok

A sztoripontok nem esnek teljesen egybe a Fibonacci számokkal, ugyanis a sztoripontok a következő számsorozatból állnak: 0, 1/2, 1, 2, 3, 5, 8, 13, 20, 40, 100.

Planning poker

Egy játékos módszer, amelyet az erőforrások becslése során alkalmazhatunk. A becslést meghatározott időkeretben végezzük, ahol segítségünkre van egy kártyacsomag, amelyre a sztoripontok vannak felírva. Van ezenkívül még két speciális kártya: egy kérdőjel, amelyet akkor használnak, ha valamit tisztázni kell, valamint egy kávéscsésze, amellyel az érintett résztvevő szünetet kér.

A játék a következőképpen zajlik:

  • A játékot egy moderátor vezeti, aki nem játszik.
  • A terméktulajdonos rövid áttekintést ad egy megbecsülendő problémáról. A csapat lehetőséget kap arra, hogy kérdéseket tegyen fel és megvitassa a kérdéses problémát.
  • Mindenki képpel lefelé lerak egy kártyát, amely az érintett problémára vonatkozó becslését jelképezi.
  • Mindenki egyszerre, felfordítva mutatja be a kártyáit.
  • A magas és az alacsony becslésekkel rendelkezők szót kapnak, hogy megindokolják a becslésüket, majd a csapat ezt megvitatja.
  • Ezt követően a becslést megismétlik mindaddig, amíg a csapat konszenzusra nem jut.
  • A vita strukturáltságának biztosítása érdekében a moderátor vagy a terméktulajdonos bármikor lezárhatja a vitát, majd újabb pókerkörre kerül sor.

Ismerkedés CodeMetropolis programmal

A CodeMetropolis egy szoftvervizualizációs program.

A szoftvervizualizáció

A szoftvervizualizáció célja a szoftver tulajdonságainak látható módon történő ábrázolása valamely jelképrendszer (metafora) alapján.

A CodeMetropolis által használt metafora a város. A város elemeivel történik a forráskód elemeinek (osztályok, metódusok, attribútumok) és azok jellemzőinek (méret, komplexitási mértékek, ...) ábrázolása.

A toolset bemenete statikus forráskódelemzők által biztosított absztrakt szemantikus gráf (ASG). Jelenleg a SourceMeter, illetőleg annak nyílt forráskódú változata az OpenStaticAnalyzer, valamint a SonarQube által adott kimenet támogatott. A toolset az elemzők által adott kimenetet képezi le egy Minecraft világba. A felhasználó a Minecraft világ elemein keresztül tudja megtekinteni a forráskód szerkezetét és elemezni azt. Előnye ennek az ábrázolásnak, hogy a szokásos jellemzőktől elütő értékek feltűnően megjelennek, ezáltal segítik a problémás részek azonosítását. Mindezek mellett ez az ábrázolási forma szórakoztató is a felhasználók számára.

A toolset maga parancssoros, a következő modulokból tevődik össze:

  • CDF ConverterTool: feladata a statikus elemző programok (SourceMeter, SonarQube,...) által elemzett programok kimenetének (ASG) konverziója olyan XML alapú dokumentummá, amely az egyes elemeket és azok tulajdonságait olyan egységes szerkezetben ábrázolja, amely alkalmassá válik a Minecraft világ elemeire történő leképezésre.
  • Mapping Tool: feladata a CDF által adott kimenetből előállítani azt az XML dokumentumot, amely tartalmazza azokat a Minecraft világra történő leképezéseket, amelyek lehetővé teszik az elemek elhelyezését ebben a virtuális világban. Az egyes metrikák, amelyeket az elemző programok adtak, a Minecraft objektumok jellemzőire kerülnek leképezésre, például egy épület által reprezentált osztály kódsorainak számát az épület magasságára képezzük le.
  • Placing Tool: a leképezést tartalmazó elemek önmagukban még nem renderelhetők, ezeket el kell helyezni a layouton. A tool feladata ennek az XML-nek az elkészítése, amely már alkalmassá válik arra, hogy tényleges Minecraft világba rendereljük.
  • Rendering Tool:: feladata a Placing Tool által adott layout renderelése, a Minecraft világ elkészítése. A generált térképet a Minecraft gyökérkönyvtárából nyíló saves alkönyvtárba kell másolni. Ez Windows rendszeren jellemzően C:\Users\<username>\AppData\Roaming\.minecraft\saves helyen található.

Az elkészült világ a Minecraft indítását követően SinglePlayer üzemmódot választva elérhető a mentett világok között.

Csomag letöltése

  1. CodeMetropolis beszerzése: https://github.com/codemetropolis/CodeMetropolis
  2. Minden csapat igényelhet a gyakorlatvezetőtől egy Minecraft accountot
  3. Minecraft letöltése: https://minecraft.net/en-us/download/?ref=bm
  4. Közvetlen link Minecraft launcher: https://launcher.mojang.com/download/Minecraft.exe

Támogatott Minecraft verzió

A támogatott Minecraft verzió: 1.8. Tapasztalataink szerint a generált CodeMetropolis világ magasabb verziószinten is működik, de tesztelve az említett verzión lett.

Minecraft accountot kezelése

A csapatok felelősek a rájuk bízott accountok kezeléséért. Az account továbbadása, a gyakorlat céljától eltérő célokra történő felhasználása szigorúan tilos! Az accountok kizárólag a félév időtartamára érvényesek. Bármilyen visszaélés az accounttal fegyelemi, adott esetben büntetőjogi felelősségrevonást eredményez.

Függőségek:

Minecraft beállítása

A Minecraft beállítása az alábbi képen látható. Az aktuális verzió (amennyiben 1.8 feletti) beállítása eltérhet az itt látható példától.

Minecraft beállítása

Futtatás

CodeMetropolis futtatása:

  • CodeMetropolis_xxx-bin.zip és examples.zip kibontása
  • Az input könyvtárba az ASG (.graph) bemásolása
  • generate.bat testreszabása, futtatása
  • kimenet: worlds/demo könyvtárban található világ

A batch script tartalma a következő:

1
2
3
4
5
6
7
8
SET PATH=C:\Users\valaki\Downloads\jdk1.8.0_311\bin;%PATH%

java -jar .\converter-1.4.0.jar -t sourcemeter -s .\iFL4Eclipse.graph
java -jar .\mapping-1.4.0.jar -i .\converterToMapping.xml -m ..\..\examples\mapping\sourcemeter_mapping_example_2_0.xml
java -jar .\placing-1.4.0.jar -i .\mappingToPlacing.xml 
java -jar .\rendering-1.4.0.jar -i .\placingToRendering.xml -world .\world\

:: Comment out any step you would like to skip with the "::" marker

Warning

A batch scriptet a CodeMetropolis distro mappájából indítsuk el.

Warning

Figyelem, a scriptben jelenleg az egész toolchain futtatása zajlik. Ha valaki csak egyes részeit szeretné futtatni annak az adott sort ki kell kommenteznie. Kommentezni dupla kettőspont és szóközzel lehet. (Pl. :: echo "This is a comment")

Példacsomag letöltése futtató scripttel erről a linkről.

A CodeMetropolis Java-ban készült, ezért platformfüggetlen. Ebből adódóan Linux alatt is futtatható. A Linuxos futtató script a következő:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

# Konfigurálható változók. Ezeket minden felhasználónak be kell állítani a saját gépén

SDK_PATH = /A JDK elérési útvonala/openlogic-openjdk-8u402-b06-linux-x64/bin
MAPPING_PATH =../examples/sourcemeter_mapping_example_2_0.xml
GRAPH_PATH =./codemetropolis-toolchain-commons.graph

# Ha a .graph fájl gyakran változik, akkor a fenti GRAPH_PATH parancssori megadása javasolt, amit úgy érhettek el, hogy az alsó sort kommentezitek, és akkor a futtatáskor argumentumban meg tudjátok adni a .graph fájlt (pl. ./generate.sh random_graph.graph)
#GRAPH_PATH=$1

export PATH=$SDK_PATH:$PATH

which java

java -jar ./codemetropolis-toolchain-converter-1.4.0.jar -t sourcemeter -s $GRAPH_PATH

java -jar ./codemetropolis-toolchain-mapping-1.4.0.jar -i converterToMapping.xml -m $MAPPING_PATH

java -jar ./codemetropolis-toolchain-placing-1.4.0.jar -i mappingToPlacing.xml

java -jar ./codemetropolis-toolchain-rendering-1.4.0.jar -i placingToRendering.xml -world ./world/ -s

cp -r world/ ~/.minecraft/saves/
A fenti, hallgató által készített script a generált Minecraft világot is bemásolja a megfelelő Minecraft mappába.

A használt JDK megadása

A fenti script közvetlenül tartalmazza a JDK útvonalának beállítását, ami egy lehetséges megoldás arra, hogy a megfelelő Java verzió fusson. A következő órán a JDK beállításáról részletesen szó esik, így ha valaki az ott ismertetett megoldásokat alkalmazza, akkor a scriptben definiált SDK_PATH környezeti változóra nem lesz szükség, így az kikommentezhető. Ugyanakkor az itt bemutatott megoldás is használható.

Világ betöltése Minecraft-tal:

  • Másoljuk át a teljes demo mappát a következő helyre: %appdata%\.minecraft\saves
  • Pl.: C:\Users\username\AppData\Roaming\.minecraft\saves
  • Indítsuk el a Minecraft-ot

Amennyiben nem batch programot használunk, a következőképpen kell eljárni:

  1. Első lépésben a CDF konvertert kell lefuttatni a java -jar converter.jar -i <graph file> [-o <output.xml>] [-t <tpye>] [-p <parameter>] parancs megadásával, ahol

    • -i az input gráf,
    • -o az output XML fájl,
    • -t a konverzió típusa (sonarqube, vagy sourcemeter lehet),
    • -p paraméter, amelyek lehetnek username, password, projects, splitDirs.

    A paraméterek között a projects az elemzett projektek neve, a username/password a SonarQube részére lehet szükséges, a splitDirs=True pedig arra szolgál, hogy a generált város elemeit különböző könyvtárakba szórja szét.

    A kimeneti XML az elemek nevét és típusát tartalmazza, és a következő tool, azaz a mapping tool inputja lesz:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    <element name="void main(String[] args)" type="method">
        <children/>
        <properties>
           <property name="sourceid" type="string" value="L118"/>
           <property name="Name" type="string" value="void main(String[] args)"/>
           <property name="LongName" type="string" value="URLExpSimple.main([Ljava/lang/String;)V"/>
           <property name="CLLC" type="float" value="0.0"/>
           <property name="CC" type="float" value="0.0"/>
           <property name="CI" type="int" value="0"/>
           <property name="CCL" type="int" value="0"/>
           <property name="CCO" type="int" value="0"/>
           <property name="LLDC" type="float" value="0.0"/>
    
  2. A mapping tool a konverter eredményét használja inputként. A tool feladata a metrikák hozzárendelése a forráskódelemet jelölő objektumhoz, valamint a placing tool részére felhasználható kimeneti XML előállítása. A konvertert a java -jar mapping.jar -i <inputFile> -m <mappingFile> [-o <outputFile>] parancs futtatásával indíthatjuk el, ahol

    • -i az input XML,
    • -o az ouput XML,
    • -m a mapping file elérési útja,
    • -s a blokkok skálázására használt paraméter,
    • -v validálás, ha bekapcsoljuk, a tool validálja az elemeket és az invalid elemek elvetésre kerülnek.

    A mapping XML file célja a forrás és az épületek kapcsolatának leírására. A fájl szerkezete a következő XML példában tanulmányozható:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <linking source="method" target="floor">
        <binding from="LLOC" to="height"/>
        <binding from="NII" to="width"/>
        <binding from="NOI" to="length"/>
        <binding from="McCC" to="character">
            <conversions>
                <conversion type="quantization">
                    <parameter name="level0" value="glass"/>
                    <parameter name="level1" value="sand"/>
                    <parameter name="level2" value="planks"/>
                    <parameter name="level3" value="stone"/>
                    <parameter name="level4" value="obsidian"/>
                </conversion>
            </conversions>
        </binding>
    </linking>
    

    A source létező objektum a konverterben, a target pedig az épület, illetőleg egyéb Minecraft világban definiált objektumot jelöli. Ezek utóbbiak lehetnek: ground, garden, floor, cellar.

    A bindings azt mondja meg, hogy a forrás egyes tulajdonságai a Minecraft világ objektumának mely jellemzőihez kapcsolódnak. Ezek a jellemzők lehetnek: width, height, length, character, external_character, torches, flower-ratio, tree-ratio, mushroom-ratio.

    A character és external_character jellemzők értéke lehet: stone, cobblestone, mossy_stone, sandstone, obsidian, wood, dark_wood, birch_wood, planks, dark_planks, metal, dirt, sand, red_sand, brick, stone_brick, dark_brick, glass, gold, diamond.

  3. A placing tool készíti el a város layoutot, amit a render tool számára értelmezhető XML formában állít elő. Használata a java –jar placing.jar –i <inputFile> [-o <outputFile>] [-m] parancs futtatásával történik, ahol

    • -i az input file (mapping outputja),
    • -o az output file,
    • -l a layout algoritmus: PACK vagy TETRIS,
    • -m pedig a térkép láthatóságát állítja be.
  4. A render tool a Minecraft számára készíti el a virtuális várost. Használata a java –jar rendering.jar –i <inputFile> -w <WorldPath> [-s] parancs futtatásával történik, ahol

    • -i az input (placing outputja),
    • -w a Minecraft világ elérési útja és neve,
    • -s silent, amelynek használata esetén a világ csendesen felülíródik.

A megjelenítés a Minecraft segítségével történik, ehhez a generált világot el kell helyezni a Minecraft megfelelő könyvtárában. Ez a hely Windows esetén a C:\Users\<username>\AppData\Roaming\.minecraft, Linux esetén pedig a home könyvtárunkban lévő .minecraft/saves alkönyvtárban található.

Minecraft indítása

Minecraft indítása

Fontosabb parancsok

  • Kreatív módba váltás: /gamemode 1
  • Teleportálás: /tp x y z (ahol az y a függőleges)
  • F3: debug info, pozíció (Looking at…)
  • Parancsok engedélyezése:

Parancsok engedélyezése

Pozíció

  • Osztály keresése:
  • placingToRendering.xml
  • Megkeresni az osztály nevét
  • <position x="32" y="63" z="51"/>
    • Kicsit mellé érdemes teleportálni…

Leképezés

A leképezés felhasználó által definiált, ennek formáját mapping fájl írja le, ami egy XML. Az alábbiakban egy példát látunk a leképezés definiálására:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<mapping version=“2.0">
  <linking source="package" target="ground"/>
  <linking source="class" target="garden">
  <linking source="method" target="floor">
        <binding from="LLOC" to="height"/>
        <binding from="NII" to="width"/>
        <binding from="NOI" to="length"/>
    ...
  </linking>
...

Részletesebb leírást a CodeMetropolisról, az egyes toolok által használt formátumokról és a használatról a projekt weboldalán olvashatunk.