Latex #3

Įžanga

Kuomet norima pradėti rašyti su LaTeX, pradžioje yra išnagrinėjamos jo komandos ir, remiantis pavyzdžiais, pradedama rašyti paprasti dokumentai. Dabar norėčiau pasistūmėti nuo savo paskutinio įrašo apie LaTeX kiek toliau ir pasidalinti dokumento formatavimo su LaTeX patirtimi.

Dokumento struktūra, grafika ir tekstas

  1. Iliustracijai atvaizduoti visuomet naudokite \figure. Automatinis iliustracijų numeravimas vėliau jums labai atsipirks, kuomet reiks papildyti kokią iliustraciją dokumento pradžioje. Taip pat naudokite \figure ir kai norima atvaizduoti ne iliustraciją, o tarkim kokį grafiką ir netgi kodo fragmentą.
  2. Lentelėms sudaryti visuomet naudokite \table. Pradžioje bus truputi nepatogu surašinėti tiek daug teksto, norint atvaizduoti tik vieną lentelę, tačiau lentelės atvaizdavimas atrodys žymiai geriau ir tvarkingiau.
  3. Taip pat yra naudinga susidaryti dažniausiai naudojamų paketų sąrašą ir parašyti šabloninę latex bylą, kurioje būtų įtraukti visi tie paketai. Tai labai palengvina situacijas, kuomet reikia rašyti kelias ataskaitas toje pačioje srityje. Taip pat, sumažinama tikimybė kompiliavimo metu susidurti su kompiliavimo klaida ir garsiai nusikeikti.
  4. Kaip įmantriau, venkite naudoti `book` ir `report` dokumento tipus. `Book` dokumento tipas yra sunkiai keičiamas ir nėra toks lankstus, kaip tarkim `article` dokumento tipas. `Report` tipo dokumento tipas automatiškai sukuria titulinį puslapį, kurio stilius retai atitinka norimą variantą, todėl geriau naudoti `article` dokumento tipą, kuris leidžia rašyti norimo stiliaus titulinius puslapius. Vienintelis `article` tipo trūkumas: nėra \chapter tag’o. Tai didelė problema, kuomet tenka rašyti labai didelius darbus ir tiesiog neužtenka \subsubsection. Tokiose situacijose galima išsisukti naudojantis enumerate tipo sąrašu:
    \begin{enumerate}
      \item Tai kas netelpa į subsub
        Tolimesnis tekstas ...
      \item Ir paskutinis
        Tolimesnis tekstas ...
    \end{enumerate}
  5. Labai rekomenduoju pasinagrinėti pgfplots, tikz bibliotekų galimybes. Naudojant šitas bibliotekas galima visiškai atsisakyti būtinybės grafikus braižyti su kita programine įranga – net signalines laiko diagramas. Galimybių jos suteikia tikrai pakankamai. Pavyzdžiui, jeigu su kažkokia programine įranga sugeneravote duomenų sekas, tai užtenka kelių eilučių, norint atvaizduoti gautus duomenis ataskaitoje.
  6. Nebelieka būtinybės naudoti Excel’į ar kokią analoginę programinė įranga, norint sugeneruoti vieną kitą grafiką. Tokio metodo pagrindinis privalumas: kuomet pasikeičia duomenys – tereikia per naujo sugeneruoti latex bylą ir viskas – nauji duomenis atvaizduoti, kur Excel variantu reiktų jį atsidaryti, pakeisti duomenis, sugeneruoti grafiką, jį išsaugoti paveikslėlio formatu ir tik tuomet atnaujinti jį darbe.
  7. Tekstą rašyti geriausia yra ne teksto blokais, o `sakinys-eilutė` principu. Kuomet yra rašoma teksto blokais – klaidos taisymas paliks teksto bloke skylę arba teksto bloko eilutė tiesiog išsitęs. Rašant `sakinys-eilute` būdu, kiekviena klaida nepaliks didelių tarpų tarp teksto ir teksto redagavimas bus patogesnis, lengvesnis akims.

Išvados

Latex yra labai patogus sprendimas rašant tiek didelis, tiek mažus dokumentus. Šiuo metu net yra išleistas latex šablonas CV Europass formatui. Jeigu niekad nedirbot su Latex ir vis dar naudojate Office tipo programinius paketus, pažiūrėkit kokias galimybes suteikia Latex ir palyginkit su savo programine įranga.

Advertisements

Užtikrintos karjeros grafiko paaiškinimas

Neseniai pateikiau vieną tokį faktą, kurį pastebiu kiekvieną kartą, kai tik baigiasi studijų semestras. Ir kas kart, tas pastebėjimas vis paaštrėja. Taip kilo priklausomybės idėja.

Įžanga

Grafikas, kurį matote aukščiau, yra subtilus geek’ų humoras, kurį turbūt supras nedaug žmonių. Noriu iškarto pasakyti, kad sekanti iliustracija nėra kažkokia pašaipa ar kažkoks nusiskundimas kaip blogai yra universitete. Viskas visiškai ne taip. Ir viskas netgi atvirkščiai. Šiame įraše pabandysiu paaiškinti grafiko idėja ir galutinai apiforminti ką jis reiškia, kad neliktų nesupratusių.

Idėjos paaiškinimui pabandysiu iliustruoti paprastu uždaviniu, dviejų skaitmenų sudėtimi, sudėties operacija. Tarkim, kad ir 2+2. Kas gali būti paprasčiau, pasakysite Jūs. Tačiau, kai tik palysi giliau, viskas tampa ne taip ir paprasta.

Paskalis

Savo aiškinimą pradėsiu nuo mokyklos. Nuo žinių židinio, nuo pačios-pačios pradžios – paskalio. Tai iki istorinė programavimo kalba, kurią programavimo tik todėl, kad kitas pasirinkimas buvo tik asembleris ar fortranas ( nors aš turbūt geriau programuočiau asembleriu ).

Mūsų nagrinėjamos problemos sprendimas paskalio atveju atrodo taip:

program sudėtis;
  var suma : integer
begin
  suma := 2 + 2;
end;

Viskas kaip ir paprasta – apsibrėžėme kintamąjį, į kurį saugosime savo operacijos atsakymą. Kintamasis, šiuo atveju, yra fundamentalus dydis, su kuriuo programoje galime operuoti. Sumos operacija irgi yra fundamentalus operatorius, kadangi realiai procesorius ( o tiksliau jo ALĮ ( aritmetinis-loginis-įrenginys ) ) visiškai “nemoka” mums įprastas matematines operacijas.

Judėkime toliau, o tiksliau – giliau.

Asembleris

Kiekvienas programinis kodas, nesvarbu kokia programavimo kalba jis būtų parašytas – yra transliuojamas į mašininį kodą ir jo asemblerinį analogą ( *.lst ). Pabandykime dabar parašyti analogišką Paskaliui dviejų kintamųjų sudėties operacijos programą Intel’io 8051 mikro-kontroleriui. Tai senas, geras 4 KB kodo atminties turintis ir 128 B duomenų atminties turintis įrenginys, kurį kai kurie, vis dar naudoja. Kaip atrodys kodas:

	.ORG 0H		; programos pradzios adresas

	MOV A, #2D	; perkeliam 2 i ACC
	ADDC A, #2D	; prie ACC pridedam 2

	.END		; susirenkam zaislus ir einam namo

Šiuo atveju, mes jau operuojame su konkrečiu įrenginiu – ACC registru, akumuliatoriumi, tik su kuriuo iki-istoriniai procesoriai galėjo atlikti aritmetines operacijas ( tik nežinau kaip dabar su daugyba/dalyba ). Tačiau čia dar lieka viena fundamentali operacija – sudėtis, ADDC ( add with carry ). Mažą užuominą tam gali duoti transliacijos byla:

0000 7402                3             MOV A, #2D      ; perkeliam 2 i ACC
0002 3402                4             ADDC A, #2D     ; prie ACC pridedam 2

Pirmas stulpelis yra adresas ( kuris prasideda nuo 0000, kaip ir buvo nurodyta .org operatoriumi ). Mus labiau domina antras stulpelis, kuriame yra nurodytas mašininis kodas. Pirmi 8b yra operacijos kodas, kur prie sumatoriaus jis yra 0x34, o toliau jau seka pats kintamasis 0x02. Vadinasi, pirmiausiai procesorius sužino ko iš jo nori programuotojas, o paskui jau paima tą skaičių, su kuriuo bus atliekama operacija.

Judam tolyn, į aparatinį lygmenį!

Aparatinis lygmuo

Aparatiniame lygmenyje mes pasiaiškinsime paprastą aparatinį įrenginį – sumatorių. Projektuoti savo sumatorių pradėsime nuo paprasčiausio jo varianto – dviejų 1b dydžių sumavimo. Štai kaip atrodo paprastas 1b sumatorius schematiškai:

Realiai, rezultatą duoda XOR loginis įtaisas, o kuomet mums nepakanka 1b atsakymui – pasijungia AND loginis įtaisas. Taigi, kai mes turime 0b1 + 0b0, tai atsakymą mes turime:

Ir atsakymas yra 0b1, o kuomet mes turime 0b1 + 0b1, tai atsakymas yra:

Teisingai, dabar mes jau turime persipildymą, kadangi 0b1 + 0b1 = 0b10 ( 1b neužtenka atsakymui išsaugoti ). Taigi, mūsų sumavimo įrenginys, turi turėti persipildymą apdorojančią grandinės dalį, todėl mums reikia papildyti duotą schemą. Galutinė schema atrodytų taip:

O taip atrodys 2b sumatorius:

Vedant iš vieno grandinės bloko į kitą grandinės bloką persipildymo išėjimą, galima sudaryti n bitų sudėjimo grandinę. Tačiau mūsų nagrinėjamai problemai užtenka ir 2b, su persipildymo kontrole, kadangi 2 yra 0b10, o 0b10 + 0b10 = 0b100, pažiūrėkime kaip tai atrodo loginėje grandinėje:

Ir štai – sudėjome du skaičius nesiremiant jokiais fundamentaliais operatoriais – kintamaisiais, aritmetiniais ženklais.

AND loginiai vartai

Aritmetines operacijas atlikome su loginiais įtaisais, tačiau ir juos juk reikia suprojektuoti. Pateiksiu vieną tokio projekto pavyzdį, panaudojus n ir p tipo MOSFET’us.

Schema nėra iškarto lengvai suprantama, tačiau ji puikiausiai veikia. Pabandykime schemoje pakelti vieną įėjimą:

O dabar pakelkime abu įėjimus:

Kaip matote, savo loginę užduotį AND grandinė atlieka kuo puikiausiai.

Nuo paprastos paskalio programos mes nusileidome iki pat aparatinio lygmens su loginėmis grandinėmis. Žemiau jau tik yra puslaidininkių teoriją, kurią bent kiek panagrinėti reiktų dar dviejų tokio pat ilgio įrašų.

Išvados

Elektronikoje nėra žmogui įprastu matematinių operacijų, kaip sudėtis, atimtis, daugyba, dalyba. Nekalbu net apie integravimą. Elektronika siekia kiekvieną žmogui įprastą operaciją aproksimuoti. Sumavimą galima pavadinti idealizuotu uždaviniu. Mes turime tik du skaičius ( arba du objektus ) ir natūraliai išplaukia išvada, kad jeigu prie dviejų kiaušinių pridėsime dar du kiaušinius, tai jau turėsime keturis kiaušinius. Tuo galime įsitikinti net skaičiuodami ant pirštų. Elektronikoje toks idealizuotas uždavinys yra aproksimuojamas naudojant puslaidininkius, iš jų sudarant logines grandis, iš loginių grandžių sudarant aparatinius įrenginius ir t.t..

Kiekvienas iš išvardintų lygmenų turi savo iššūkius ir kylančias problemas. Kiekvienas lygmuo yra įdomus ir reikalauja specifinių žinių. Problema – o kurį pasirinkti? Kokiam lygmeniui atiduoti visą savo inžinerinę esmę? Kurioje specializacijoje būčiau geresnis specialistas?

Dar taip pat į nugarą kvėpuoja tokia, labai neapibrėžta ir sunkiai kur taikoma, dirbtinio intelekto patologija..