Sex un XML

28.05.2007

Meklējot informāciju par topošo Integrēto valsts informācijas sistēmu (IVIS), ko sola kaut kad šogad piestartēt, atradu, ka testa režīmā jau ir pieejams IVIS portāls. Īsti gan nav skaidrs, kādēļ tas ir publiski pieejams, jo pagaidām tas izskatas diezgan zaļš.

IVIS tiek veidots ļoti aktīvi izmantojot XML un dažnedažādus WS-* standartus web servisu veidošanā, lai to pēc tam izmantotu dažādu valsts reģistru integrācijā un e-pakalpojumu nodrošināšanā. Nu un lai e-pakalpojuma saņēmējs saprastu, kādus datus viņam e-pakalpojumu sniedzējs sūta, tiek definēta kaudze ar XML shēmām, kas apraksta metadatus par šiem e-pakalpojumiem.

Bet paskatoties uz patreiz pieejamajām XML shēmām rodas sajūta, ka tiek producēts pārāk daudz XMLa, kas nevienam īpaši nav vajadzīgs.

Kā piemēru apskatījos sexa definīciju (jeb latviski runājot personas dzimuma definīciju) :

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://ivis.eps.gov.lv/XMLSchemas/100001/Person/v1-0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:pers="http://ivis.eps.gov.lv/XMLSchemas/100001/Person/v1-0" targetNamespace="http://ivis.eps.gov.lv/XMLSchemas/100001/Person/v1-0" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0" id="Sex.xsd">
    <xs:annotation>
        <xs:appinfo>
            <ivis:Metadata xmlns:pers="http://ivis.eps.gov.lv/XMLSchemas/100001/Person/v1-0" xmlns:ivis="http://ivis.eps.gov.lv/XMLSchemas/100001/IVIS/v1-0">
                <ivis:Contributor href="http://www.rixtechnologies.lv" CodeListID="Authority" CodeListAgencyID="100001" CodeListAgencyName="ĪUMEPLS" CodeListLanguageID="lv" CodeListCodeValue="100002">SIA "RIX Technologies"</ivis:Contributor>
                <ivis:Contributor href="http://www.pmlp.gov.lv" CodeListID="Authority" CodeListAgencyID="100001" CodeListAgencyName="ĪUMEPLS" CodeListLanguageID="lv" CodeListCodeValue="100010">Pilsonības un Migrācijas Lietas Pārvalde</ivis:Contributor>
                <ivis:Creator href="http://www.eps.gov.lv" CodeListID="Authority" CodeListAgencyID="100001" CodeListAgencyName="ĪUMEPLS" CodeListLanguageID="lv" CodeListCodeValue="100001">Īpašu uzdevumu ministra e-pārvaldes lietās sekretariāts</ivis:Creator>
                <ivis:Date>
                    <ivis:Created>2007-05-02</ivis:Created>
                    <ivis:Declared>2007-05-02</ivis:Declared>
                    <ivis:Modified>2007-05-02</ivis:Modified>
                </ivis:Date>
                <ivis:Description>
                    <ivis:Default>Apraksta personas dzimumu</ivis:Default>
                </ivis:Description>
                <ivis:Format>
                    <ivis:Default>text/xml</ivis:Default>
                </ivis:Format>
                <ivis:Identifier Scheme="URN">URN:IVIS:100001:XSD-Person-Sex-v1-0</ivis:Identifier>
                <ivis:Language>LV</ivis:Language>
                <ivis:Publisher CodeListID="Authority" CodeListAgencyID="100001" CodeListAgencyName="ĪUMEPLS" CodeListLanguageID="lv" CodeListCodeValue="100001" href="https://ivis.eps.gov.lv/">ĪUMEPLS</ivis:Publisher>
                <ivis:Relation>
                    <ivis:ConformsTo href="URN:IVIS:100001:DOC-FR-XML-V1.00">XML shēmu izstrādes vadlīnijas</ivis:ConformsTo>
                    <ivis:ConformsTo>ISO/IEC 5218:2004</ivis:ConformsTo>
                </ivis:Relation>
                <ivis:Status>
                    <ivis:Default>PUBLISHED</ivis:Default>
                    <ivis:Version>v1.0</ivis:Version>
                </ivis:Status>
                <ivis:Subject>
                    <ivis:Category CodeListID="XMLSchemaType" CodeListAgencyID="100001" CodeListAgencyName="ĪUMEPLS" CodeListLanguageID="lv" CodeListCodeValue="1">Infrastruktūras XML shēma</ivis:Category>
                    <ivis:Keyword>IVIS</ivis:Keyword>
                    <ivis:Keyword>XML shēma</ivis:Keyword>
                    <ivis:Keyword>personas dzimums</ivis:Keyword>
                    <ivis:Project>Person</ivis:Project>
                </ivis:Subject>
                <ivis:Title>
                    <ivis:Default>Personas dzimums</ivis:Default>
                </ivis:Title>
            </ivis:Metadata>
        </xs:appinfo>
    </xs:annotation>
    <xs:complexType name="PersonSexStructure">
        <xs:annotation>
            <xs:documentation>Personas dzimuma struktūra</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="PersonSexCode" type="PersonSexCodeType">
                <xs:annotation>
                    <xs:documentation xml:lang="lv">Personas dzimuma kods</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="PersonSex" type="PersonSexType">
                <xs:annotation>
                    <xs:documentation xml:lang="lv">Personas dzimums</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="PersonSexCodeType">
        <xs:annotation>
            <xs:documentation xml:lang="lv">Personas dzimuma koda tips</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="N" />
            <xs:enumeration value="V" />
            <xs:enumeration value="S" />
            <xs:enumeration value="Z" />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="PersonSexType">
        <xs:annotation>
            <xs:documentation xml:lang="lv">Personas dzimuma tipa atšifrejums</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="nezināma" id="N" />
            <xs:enumeration value="vīrietis" id="V" />
            <xs:enumeration value="sieviete" id="S" />
            <xs:enumeration value="neizvēlēta" id="Z" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Šajā XML dokumentā 83 rindiņās ir aprakstīts klasifikators, kas sastāv no 4 rindiņām. Vai tiešām to nevar aprakstīt kaut kā vienkāršāk? Jo saturīgā informācija šeit parādās tikai pēdējās rindiņās.

Citur plašajā internetā tiek diskutēts par to, ka dažnedāžādie WS-* standarti ir noveduši pie tā, ka web servisu veidošana un uzturēšana kļūst ļoti sarežģīta un ka sākotnējais “vienkāršais” SOAP nemaz vairs nav “Simple”. Tādēļ bieži sarežģīto WS-* standartu vietā tiek izmantota vienkāršākā REST pieeja web servisu veidošanai.

Augstākminētais piemērs pēc REST pieejas varētu izskatīties aptuveni sekojoši – uz pieprasījumu http://ivis.eps.gov.lv/sexes tiktu atgriezts

<sexes description="Personas dzimums">
  <sex><id>N</id><value>nezināma</value></sex>
  <sex><id>V</id><value>vīrietis</value></sex>
  <sex><id>S</id><value>sieviete</value></sex>
  <sex><id>Z</id><value>neizvēlēta</value></sex>
</sexes>

Būtu taču viss skaidrs arī no šāda vienkārša apraksta?


Pirmā pieredze ar elektronisko dokumentu iesniegšanu

17.05.2007

Sakarā ar ruby.lv domēna reģistrēšanu bija vajadzība uzrakstīt iesniegumu DNS reģistram, ka es atteikšos no domēna, ja uz to pretendēs kāds “ruby” preču zīmes īpašnieks – ķipa Absolut Ruby Red Vodka, vai kāds tamlīdzīgs 🙂

Nu un tā kā es jau labu laiku esmu Latvijas Pasta e-paraksta kartes īpašnieks, tad iedomājos, ka šī būtu laba iespēja izmēģināt e-parakstu dzīvē.

Tā nu es sagatavoju savu iesniegumu un parakstīju to, izmantojot e-Parakstītāja programmu. Tas man izdevās veiksmīgi, bet pēc tam veicot šī dokumenta pārbaudi ieguvu brīdinājumu

Sertifikācijas statusa validācijas serviss (OCSP) nav pieejams vai neatbild

Apskatot detalizēto kļūdu žurnālu ieguvu izsmeļošāku skaidrojumu:

Sertifikātu statusa validācijas servisa (OCSP) kļūda.
׷.ٴ: Incorrect response size from backend
at ׷.ٱ.׹(Byte[] ٳ, Int32 Ӻ)
at ׷.ٱ.׹(׽ ֈ)
at Ӓ.उ.ऋ(IEnumerable`1 ऌ, Boolean ऍ, ؘ& ऎ)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Nu es gan nevērsos pie Microsoft palīdzības dienesta, bet gan pie e-me palīdzības dienesta – patlaban atbilde ir tāda, ka dažiem klientiem šāda kļūda ir, kļūdas iemesls iespējams esot tīkla līmenī (mani gan šis skaidrojums īpaši nepārliecina).

Nu bet štrunts par to, sūtīju šo savu elektronisko dokumentu ar e-parakstu uz DNS reģistru.

Pirmā atbilde bija tāda, ka elektroniskos dokumentus viņi nepieņem un ka iesniegums jāsūta “tradicionāli parakstītā” veidā.

Pēc mana atgādinājuma, ka saskaņā ar MK noteikumiem visām valsts institūcijām it kā ir jāpieņem elektroniski parakstīti dokumenti, un pēc manām norādēm, kā šo dokumentu var pārbaudīt, dokuments tomēr tika pieņemts.

Nākamā atbilde bija tāda, ka mans e-paraksts ir nederīgs. Uz to man nācās papildus pakonsultēt, kādā veidā uz datora ir jāpieinstalē Latvijas Pasta saknes sertifikāti, lai mans e-paraksts tomēr tiktu atzīts par derīgu.

Nu un tā visa rezultātā mans elektroniskais dokuments ar e-parakstu tika atīzts par labu esam!

Mani šis process neapgrūtināja un man bija prieks palīdzēt citiem kolēģiem e-paraksta lietošanas apgūšanā. Bet iedomājoties, ka ja izpildīsies solījums, ka līdz gada beigām būs 20 000 e-paraksta lietotāji, un ka šie lietotāji nebūs ar šādām tehniskajām zināšanām par e-parakstu, tad es baidos, ka viņi veiksmīgi neaizies līdz elektroniskā dokumenta iesniegšanas procesa beigām.

Tā ka rekomendētu jau tuvākajā laikā novērst vēl palikušās tehniskās nepilnības, gan arī vēl aktīvāk informēt visas valsts institūcijas par to, kā ir jārīkojas elektronisko dokumentu saņemšanas gadījumā.


ruby.lv

16.05.2007

Kā jau rakstīju iepriekš, pēdējā laikā man ir ļoti iepatikusies Ruby programmēšanas valoda un Ruby on Rails web aplikāciju izstrādes freimworks. Šo savu interesi es neturu pie sevis, es to stāstu un rādu arī citiem. Tā kā Ruby interesentu kopienas citur pasaulē izceļas ar savstarpējo izpalīdzēšanu un dalīšanos ar zināšanām, tad man likās, ka vajadzētu arī kādu vietu Latvijas Ruby interesentiem, kur dalīties ar pieredzi un kur savstarpēji sniegt palīdzību un padomus.

Tādēļ esmu izveidojis ruby.lv – Ruby kopienas diskusiju forumu vietu. Esmu tur ielicis pirmās savas rekomendācijas un pieredzi un aicinu visus citus Ruby interesentus (gan esošos, gan topošos) izmantot šos diskusiju forumus gan lai uzdotu jautājumus, uz kuriem nevarat “sagooglot” atbildes citur, kā arī lai dalītos ar savu pieredzi un rekomendācijām. Sākotnēji apsolos sniegt atbildes uz visiem jautājumiem, uz kuriem zināšu atbildes 🙂

Pie reizes varu dalīties ar savām pārdomām, kāpēc man patīk Ruby un ar to veidotais Rails:

  • Ikdienā es jau labu laiku vairs nenodarbojos ar programmēšanu, bet mani joprojām interesē jaunās programmatūras tehnoloģijas un vienmēr gribu jaunās lietas pamēģināt arī pats. Tā kā laika tam nav daudz, tad mani ir interesējuši tās tehnoloģijas, ar kurām rezultātu var sasniegt ļoti ātri. Programmatūras ziņā mani tādēļ ir interesējušas gatavās ERP sistēmas, ar kuru palīdzību rezultātu parasti var sasniegt ātrāk nekā kaut ko programmējot no nulles.
    Izmēģinot Ruby un uz tā veidoto Rails, man iepatikās šī iespēja sasniegt strādājošu rezultātu stipri ātrākā laikā ar stipri mazāku koda rindiņu skaitu. Un salīdzinot ar gatavu sistēmu ieviešanu, uz Ruby veidotās sistēmas piedāvā stipri plašākas iespējas pielāgot risinājumu konkrētām specifiskām vajadzībām, pateicoties Ruby programmēšanas valodas dinamiskajām iespējām. Un salīdzinot, piemēram, ar gatavām ERP sistēmām, risinājums ir vienkāršāks un bez liekās nevajadzīgās bagāžas, kas bieži ir problēma lielajās sarežģītajās ERP sistēmās.
  • Ruby on Rails freimworks seko “convention over configuration” principiem, kas nozīmē, ka visās aplikācijās tiek izmantoti vieni un tie paši aplikācijas veidošanas standarti. Tā rezultātā ir stipri vieglāk saprast kādas gatavas RoR aplikācijas funkcionalitāti un ir viegli vajadzības gadījumā to paplašināt ar kādu papildus funkcionalitāti.
    Agrāk, mēģinot iepazīties ar citu sistēmu funkcionalitāti, esmu juties kā tas vīrs pa kreisi šajā video klipā 🙂
  • Tā kā dotajā brīdī Ruby vēl atrodas “early adopters” stadijā (bet drīz droši vien vairs tā nebūs), tad parasti Ruby kodu ir rakstījuši labi programmētāji. Tā rezultātā skatoties uz citu rakstīto Ruby kodu bieži var iemācīties kaut ko jaunu. Tam palīdz arī tas, ka Ruby kopienā ir nerakstīts likums, ka Ruby kodam ir jābūt estētiski skaistam, kas motivē refaktorēt slikti uzrakstītu kodu un censties to padarīt vienkāršāku un tā rezultātā arī skaistāku.

Nu un kas jums patīk iekš Ruby? 🙂