{"id":2668,"date":"2013-06-04T12:29:56","date_gmt":"2013-06-04T10:29:56","guid":{"rendered":"http:\/\/yeti.albascout.ro\/blog\/?p=2668"},"modified":"2013-06-04T12:48:15","modified_gmt":"2013-06-04T10:48:15","slug":"scrisorica-din-camp","status":"publish","type":"post","link":"https:\/\/yeti.albascout.ro\/blog\/scrisorica-din-camp\/","title":{"rendered":"Scrisorica din camp"},"content":{"rendered":"<p>La cerceta\u0219i (la noi la Alba Iulia cel pu\u021bin), din cauza caracterului ritmic al activit\u0103\u021bilor \u0219i al faptului c\u0103 exist\u0103 o str\u00e2ns\u0103 leg\u0103tura \u0219i o predare de \u0219tafet\u0103 \u00eentre genera\u021bii, avem tendin\u021ba s\u0103 cre\u0103m \u0219i s\u0103 men\u021binem fel de fel de mici tradi\u021bii &#8211; activit\u0103\u021bi sau ac\u021biuni punctuale care au succes \u0219i sunt reluate \u00een fiecare an.<\/p>\n<p>Pornit\u0103 \u00een \u0218uridava (Campul Centrului Local din \u0218ureanu, 2008), una din ac\u021biunile astea care au devenit tradi\u021bie este <em>&#8222;scrisorica din camp&#8221;<\/em>. \u00cen ultima zi din camp, to\u021bi participan\u021bii sunt invita\u021bi s\u0103 \u00ee\u0219i adreseze o scrisoare <em>lor \u00een\u0219i\u0219i<\/em>, \u00een care s\u0103 \u00ee\u0219i scrie despre experien\u021bele tr\u0103ite \u00een camp. Scrisorica se \u00eentoarce la ei dup\u0103 un timp, pentru a-\u0219i aduce aminte de timpul petrecut \u00een camp, dar \u0219i pentru a-i ajuta s\u0103 \u00ee\u0219i dea seama cum s-au schimbat (\u00een bine :P) din momentul campului p\u00e2n\u0103 \u00een momentul \u00een care o deschid.<!--more--><\/p>\n<p>De-a lungul timpului, ac\u021biunea asta s-a modificat \u0219i s-a perfec\u021bionat &#8211; astfel, dup\u0103 \u0218uridava (sau dup\u0103 urm\u0103torul camp, nu mai \u0219tiu precis), la cererea publicului, scrisorile nu au mai fost &#8222;deschise&#8221;, ci sigilate fiecare \u00een plicul ei, destinate strict pentru ochii celor care le-au scris.<\/p>\n<p>Al\u0103turi de scrisoric\u0103, de c\u00e2\u021biva ani \u00a0trimitem \u0219i poza de grup din camp \u0219i badge-ul campului, iar de anul asta am ad\u0103ugat \u0219i o scrisoare de mul\u021bumire pentru p\u0103rin\u021bi (care sunt principalii no\u0219tri sus\u021bin\u0103tori) \u0219i un formular 2%.<\/p>\n<p>Badge-urile pentru Campul Centrului Local de anul trecut au fost f\u0103cute, ca de obicei, prin <a href=\"http:\/\/scout.ro\/shop\">ScoutShop<\/a>.<\/p>\n<figure id=\"attachment_2706\" aria-describedby=\"caption-attachment-2706\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/ccl2012_logo_badge.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2706\" alt=\"Badge Olimpiada \u00een Bocanci 2012 (logo by Georgi Hlihor)\" src=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/ccl2012_logo_badge-300x300.png\" width=\"300\" height=\"300\" srcset=\"https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/ccl2012_logo_badge-300x300.png 300w, https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/ccl2012_logo_badge-150x150.png 150w, https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/ccl2012_logo_badge.png 450w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-2706\" class=\"wp-caption-text\">Badge Olimpiada \u00een Bocanci 2012 (logo by Georgi Hlihor)<\/figcaption><\/figure>\n<figure id=\"attachment_2707\" aria-describedby=\"caption-attachment-2707\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/show_image_800_600.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2707\" alt=\"Poza de grup de la Olimpiada \u00een Bocanci\" src=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/show_image_800_600-300x193.jpg\" width=\"300\" height=\"193\" srcset=\"https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/show_image_800_600-300x193.jpg 300w, https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/show_image_800_600.jpg 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-2707\" class=\"wp-caption-text\">Poza oficial\u0103 de grup de la Olimpiada \u00een Bocanci 2012 (din p\u0103cate nu mai \u0219tiu cine este autorul)<\/figcaption><\/figure>\n<p>S\u0103pt\u0103m\u00e2nile trecute am reu\u0219it s\u0103 termin prima serie de plicuri \u0219i scrisorele &#8211; \u0219i au \u00eenceput s\u0103 ajung\u0103 pe la cerceta\u0219i &#8211; cam 120 de scrisorele \u00een total.<\/p>\n<figure id=\"attachment_2696\" aria-describedby=\"caption-attachment-2696\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05885_modified.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2696\" alt=\"\u00cen curs de \u00eempachetare - poze, badge-uri \u0219i scrisorele\" src=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05885_modified-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05885_modified-300x225.jpg 300w, https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05885_modified.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-2696\" class=\"wp-caption-text\">\u00cen curs de \u00eempachetare &#8211; poze, badge-uri \u0219i scrisorele<\/figcaption><\/figure>\n<figure id=\"attachment_2695\" aria-describedby=\"caption-attachment-2695\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05888_modified.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2695\" alt=\"Produsul aproape final, mai trebuie doar timbrele\" src=\"http:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05888_modified-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05888_modified-300x225.jpg 300w, https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05888_modified.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-2695\" class=\"wp-caption-text\">Produsul aproape final, mai trebuie doar timbrele<\/figcaption><\/figure>\n<h3>Script generare plicuri<\/h3>\n<p>Pentru c\u0103 prefer s\u0103 lucrez mai mult s\u0103 automatizez o treab\u0103 repetitiv\u0103 dec\u00e2t s\u0103 o fac muncitore\u0219te,\u00a0am scris un mic script python care parcurge un fi\u0219ier .csv \u0219i produce un .pdf \u00een care fiecare pagin\u0103 este un plic C5 (dimensiune standard de plic pentru foi A5 sau foi A4 \u00eendoite pe jum\u0103tate). Scriptul poate fi cu u\u0219urin\u021b\u0103 modificat pentru alte tipuri de plicuri \/ alte formate de date, a\u0219a c\u0103 \u00een speran\u021ba c\u0103 poate ajuta pe cineva, \u00eel copiez mai jos :)<\/p>\n<pre lang=\"python\">def break_line(line):\r\n    \"\"\"\r\n    Parses line and splits it into usable parts \r\n    \"\"\"\r\n    elms = line.strip(\" \\n\\r\").split(\";\")\r\n    destinatar = elms[1].strip(\" \\\"\")\r\n    nume = u\"%s\" % elms[2].strip(\" \\\"\")\r\n    adresa = elms[3].strip(\" \\\"\")\r\n    cod_postal = elms[6].strip(\" \\\"\")\r\n    localitate = elms[4].strip(\" \\\"\")\r\n    judet = elms[5].strip(\" \\\"\")\r\n    if judet != u\"Bucure\u0219ti\":\r\n        judet = u\"jude\u021b %s\" % judet\r\n    error = elms[7].strip(\" \\\"\") == \"!\"\r\n\r\n    return destinatar, nume, adresa, cod_postal, localitate, judet, error  \r\n\r\n#    Define envelope size\r\nC5_envelope = (22.9 * cm, 16.2 * cm)\r\n\r\n#    Font registration and settings\r\nreportlab.rl_config.warnOnMissingFontGlyphs = 0\r\npdfmetrics.registerFont(TTFont('DejaVu', '\/usr\/share\/fonts\/truetype\/ttf-dejavu\/DejaVuSerif.ttf'))\r\npdfmetrics.registerFont(TTFont('DejaVuBold', '\/usr\/share\/fonts\/truetype\/ttf-dejavu\/DejaVuSerif-Bold.ttf'))\r\npdfmetrics.registerFont(TTFont('DejaVuItalic', '\/usr\/share\/fonts\/truetype\/ttf-dejavu\/DejaVuSerif-Italic.ttf'))\r\npdfmetrics.registerFont(TTFont('DejaVuBoldItalic', '\/usr\/share\/fonts\/truetype\/ttf-dejavu\/DejaVuSerif-BoldItalic.ttf'))\r\nregisterFontFamily('DejaVu',normal='DejaVu',bold='DejaVuBold',italic='DejaVuItalic',boldItalic='DejaVuBoldItalic')\r\n\r\n#    The Story is commonly used in flowing reportlab documents to contain all flowables\r\nStory = []\r\nbuff = StringIO()\r\n\r\ndocument_settings = {\"rightMargin\" : 1 * cm, \r\n                     \"leftMargin\" : 12 * cm, \r\n                     \"topMargin\" : 9 * cm,\r\n                     \"bottomMargin\" : 1.5 * cm, \r\n                     \"pagesize\" : C5_envelope}\r\n\r\ndoc = SimpleDocTemplate(buff, **document_settings)\r\n\r\nstyles = getSampleStyleSheet()\r\nstyles.add(ParagraphStyle(name='Justify', fontName = \"DejaVu\", alignment=TA_JUSTIFY, leading = 0.65 * cm))\r\nstyles[\"Normal\"].fontName = \"DejaVu\"\r\nstyles[\"Normal\"].leading = 0.5 * cm\r\n\r\nerror_count = 0\r\n\r\nwith open(INPUT_FILE_PATH, \"rt\") as fisier:\r\n    adrese = fisier.readlines()\r\n\r\nfor line in adrese:\r\n    destinatar, nume, adresa, cod_postal, localitate, judet, error = break_line(line)\r\n\r\n    if error:\r\n        error_count += 1\r\n        continue\r\n\r\n    Story.append(Paragraph(u\"<b>Destinatar:<\/b>\", styles['Justify']))\r\n    Story.append(Paragraph(u\"<b>%s %s<\/b>\" % (destinatar, nume.upper()), styles['Justify']))\r\n    Story.append(Paragraph(u\"%s\" % adresa, styles['Justify']))\r\n\r\n    if localitate:\r\n        linie_localitate = u\"{0}\".format(localitate)\r\n        if cod_postal:\r\n            linie_localitate = u\"{0}, \".format(cod_postal) + linie_localitate\r\n        Story.append(Paragraph(linie_localitate, styles['Justify']))\r\n        Story.append(Paragraph(u\"%s\" % judet, styles['Justify']))\r\n    Story.append(PageBreak())\r\ndoc.build(Story)\r\n\r\nf = open(PDF_OUTPUT_PATH, \"wb\")\r\nf.write(buff.getvalue())\r\nbuff.close()\r\nf.close()\r\n\r\nprint \"Done, %d errors\" % error_count<\/pre>\n<p>Disponibil\u0103 ca <a href=\"https:\/\/gist.github.com\/andreiavram\/3434ba783904bc45e882\/\">github gist<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La cerceta\u0219i (la noi la Alba Iulia cel pu\u021bin), din cauza caracterului ritmic al activit\u0103\u021bilor \u0219i al faptului c\u0103 exist\u0103 o str\u00e2ns\u0103 leg\u0103tura \u0219i o predare de \u0219tafet\u0103 \u00eentre genera\u021bii, avem tendin\u021ba s\u0103 cre\u0103m \u0219i s\u0103 men\u021binem fel de fel de mici tradi\u021bii &#8211; activit\u0103\u021bi sau ac\u021biuni punctuale care au succes \u0219i sunt reluate \u00een &hellip; <a href=\"https:\/\/yeti.albascout.ro\/blog\/scrisorica-din-camp\/\" class=\"more-link\">Continu\u0103 s\u0103 cite\u0219ti <span class=\"screen-reader-text\">Scrisorica din camp<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2695,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[556,561,735],"tags":[567,571,750,589,746],"class_list":["post-2668","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cercetasi","category-linux","category-proiecte","tag-alba-iulia","tag-axente-sever","tag-camp","tag-cercetai","tag-python"],"jetpack_featured_media_url":"https:\/\/yeti.albascout.ro\/blog\/wp-content\/uploads\/2013\/06\/DSC05888_modified.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts\/2668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/comments?post=2668"}],"version-history":[{"count":13,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts\/2668\/revisions"}],"predecessor-version":[{"id":2709,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts\/2668\/revisions\/2709"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/media\/2695"}],"wp:attachment":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/media?parent=2668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/categories?post=2668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/tags?post=2668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}