Zaemis' Digital Junk Drawer

Whoa there! It looks like you've stumbled upon my tumblr account! Here you'll find various odds and ends that didn't make the cut for my main blog, things from around the internet I'd like to share, and other tidbits I just don't want to forget.
Recent Tweets @
Posts I Like

Inter la jaroj 1840 kaj 1880, miliono da germanaj enmigrantoj transloĝiĝis al Usono. Ili fondis german-parolantajn lernejojn, preĝejojn, kaj butikojn; preskaŭ ĉia aspekto de la vivo estis kondukata germane. Post preskaŭ 100 jaroj, la germana lingvo estis precipe en multaj mez-okcidentaj usonaj urbetoj.

La censo de 1910 montris, ke la germana estis tiam vaste parolata en la regiono. Ekzemple, en Hustisford, Viskonsino, multaj loĝantoj ne povis paroli la anglan. Kaj el tiuj, kiuj ja povis, ili ne bone parolis la anglan.

Kontraŭ-germana sento rapidigis la malaltigon de la germana lingvo en kelkaj partoj de Usono dum la unua mondmilito, sed la germana estis granda parto de ĉiutaga vivo eĉ en tiaj urbetoj ĝis la 1930aj jaroj.

La radia programo All Things Considered raportis pri Hustisford kaj tiu fenomeno en aprilo, 2009. Oni povas aŭskulti la arĥivitan raporton ĉe n.pr/IUkXrX.

Por plibonigi lingvan kapablon, iu rekomendas legi bonajn librojn. Tial mi legis la romanon, verkita de germana esperantisto Ulrich Matthias, Fajron Sentis Mi Interne. La Baza Legolisto de William Auld citas ĝin kiel inda esperanta legaĵo. Bedaŭrinde, la intrigo moviĝis tro malrapide laŭ mia gusto, kaj mi ne kompatis la ĉefrolulon, ĉar li estis plendema kaj tro okupita pri amo.

Kiel knabo, Manfred Brinkmann (la juna heroo) ne havis multajn amikojn, kaj li sentis sin malgaje. Li skribis plendan amleteron al kolega lernantino, sed ŝi malakceptis lin. Poste, Manfred studis en universitato. Li esperantiĝis, amikiĝis kun esperantistoj, kaj sentis sin iom malpli izolita.

Tiu sufiĉus por bona esperanta rakonto, sed la malgaja historio daŭris. Manfred renkontis junulinon ĉe esperanta kongreso. Li amis ŝin, sed la amo ne estas reciproka; ŝi jam havis koramikon. Manfred plu serĉis koramikinon en Esperantujo, nesukcese, kaj denove li fariĝis malfeliĉa.

Kiam mi estis pli juna, mi foje malfeliĉis pro nehavebla amo. Sed mi kreskis. Mi ankoraŭ estas fraŭlo, sed mi nun ĝuas la vivon. Manfred neniam maturiĝis.

Oftdirita konsilo diras, ke amo estas trovebla kiam oni ne serĉas. Ankaŭ, oni estu bona amiko por havi bonajn amikojn. Tamen Manfred plendis kaj serĉis. Ĉar li estis tro okuptia pri amo, li ne povis agnoski la simplajn plezurojn de la vivo. Ĉiame kulpigis aliajn, li izolis sin mem.

Malgraŭ tio, la verkstilo de Matthias estas bela. Li elektis bonajn esperantajn vortojn kaj plaĉe aranĝis ilin. Se vi ŝatas bon-verkitajn librojn, legu Fajron Sentis Mi Interne. Sed se vi serĉas libron, kiu havas viglan intrigon, elektu alian.

Tradukita de la angla, kiun oni povas trovi ĉe zaemis.blogspot.com/2011/01/geolocation-search.html. Koran dankon al mia amiko, Benĉjo S, pro lia kontrol-helpo.

La populareco de servoj, kiuj permesas identigi proksimajn lokojn de intereso, daŭre kreskas pli. Mi certas, ke ĉiuj konas sociajn retejojn, kiuj permesas serĉi profilojn de homoj per poŝtkodo, aŭ mobilajn programojn, kiuj uzas geo-lokilon por identigi tajajn restoraciojn en la promenebla distanco. Surprize, oni simple aplikas tian funkciecon, kaj, en ĉi artiklo, mi diskutos, kiel fari tion.

La unua ŝtupo estas akiri la latitudan kaj longitudan koordinatojn de ajna loko, kiun vi serĉigeblos. Por la restoracia scenaro, akiru la latitudon kaj longitudon de ĉiu manĝejo. Por la soci-reteja scenaro, listigu poŝtkodojn kun la latitudoj kaj longitudoj de ĉies mezpunktoj.

Ĝenerale, poŝtkoda serĉilo estas malbona ideo; ĉies limoj malofte igas simplan plurlateron, la areoj malsamas per grandeco, kaj ĉiu povas ŝanĝiĝi laŭ la volo de la poŝtservo. Sed ofte, ni estas ligataj per la kondiĉoj de niaj klientoj, kiuj volas aĵojn, kiujn ni konas pli bone ol fari. Tial mi tenas miajn opiniaĉojn for de vi, kaj anstataŭe petas, ke vi memoras jene:

  • ZCTA ne estas poŝtkodoj, do ne uzu ilin tielmaniere. Iuj rekomendas uzi la ZCTA datumon de la Usona Buroo de la Censo por la jaro 2000 kiel senkostan poŝtkodan kaj latitudan kaj longitudan datumon en Usono, sed la buroa retejo avertas, ke ZCTA estis kreita por signi lokojn de kontado. Ili ne ĉiam kongruas kun la lokoj, kiuj estas signataj de la usona poŝtservo. Nepopulataj lokoj, kiel lagoj kaj arbaroj, povas havi proprajn ZCTA kodojn, kaj eblas ke pli etaj poŝtkodoj “ne aperi en la ZCTA mondo.”

  • Poŝtkodoj estas malstabilaj, do estu certe, ke vi komprenas la regularon pri ĝisdatigo de via datum-firmao. CD Light, LLC vendas datumarojn, kiun ili licencigas de Usona Poŝta Servo kaj Canada Post, kaj poste ili plibonigas kaj subtenas la datumon per pluraj pliaj fontoj. Ili aldonas novajn poŝtkodojn kaj forigas malaktualajn kodojn de siaj datumaroj. Trimonataj kaj monataj ĝisdatigoj estas haveblaj per bonprezigita abono. Aliflanke, federalgovernmentzipcodes.us havas senkostan usonan poŝtkodan datumaron, kiu estas malregular-ĝisdataga per malgranda aro de fontoj. Malaktualaj poŝtkodoj estas inkludataj, sed estas signataj “malkomisiita.” Tamen, ne estas klare, kiu firmao aŭ persono produktas tiun.

Ĉu vi mem gastigas vian datumaron, ĉu vi uzas ret-servon kiel GeoCoder.ca, memsciigado pri la penoj, kiuj farendas por konstrui ĝin el nuna datumaro kaj por subteni la precizecon, ne estas malbona ideo. Estas pli bone havi pli-specifajn/precizajn datumojn ol malpli.

La dua ŝtupo estas evoluigi taŭgan strategion por serĉi tra viaj datumoj. Vi ne volas kalkuli la distancon de konata fonto al ĉiuj celaj koordinatoj; la naiva kaj kruda serĉado estas malofte dezirata, eĉ se la datumaro estas malgranda kaj la trafiko al via programo/retejo estas malalta. Mia procezo estas kalkuli la latitudojn kaj longitudojn de la norda, okcidenta, suda, kaj orienta limoj de la serĉo (direktoj de 0°, 90°, 180°, kaj -90° aŭ 270° respektive). Tiam, mi serĉas tra la subaro de rekordoj, kiuj havas restantajn lokojn en ĉi tiu limigujo.

Mi uzas la jenajn formulojn por kalkuli la celajn nombrojn, kaj limigi mian datum-serĉon:

image

Vidu:

  • d estas distanco
  • R estas la radiuso de la Tero (la duon-granda akso estas 3,963.19 mejloj laŭ la WGS84 modelo)
  • ᵩ estas latitudo
  • λ is longitudo
  • θ estas direkto

Kodigitaj, la formuloj aspektas jene:

// kalkuli lat/lon-n de destino per donita komencaj loko, direkto, kaj distanco
function destino($lat,$lon, $direkto, $distanco,$mezuro="mi") {
    $radiuso = strcasecmp($mezuro, "km") ? 3963.19 : 6378.137;
    $rLat = deg2rad($lat);
    $rLon = deg2rad($lon);
    $rDirekto = deg2rad($direkto);
    $rAngDist = $distanco / $radiuso;
    $rLatB = asin(sin($rLat) * cos($rAngDist) +
        cos($rLat) * sin($rAngDist) * cos($rDirekto));
    $rLonB = $rLon + atan2(sin($rDirekto) * sin($rAngDist) * cos($rLat),
        cos($rAngDist) - sin($rLat) * sin($rLatB));
    return array("lat" => rad2deg($rLatB), "lon" => rad2deg($rLonB));
}

Simpla ĉirkauflua-funkcio vokus tiun ree kun malsamaj direktoj kaj atingi la serĉ-limojn:

// kalkuli limigujon
function limigoj($lat,$lon, $distanco,$mezuro="mi") {
    return array(
        "No" => destino($lat,$lon,   0, $distanco,$mezuro),
        "Or" => destino($lat,$lon,  90, $distanco,$mezuro),
        "Su" => destino($lat,$lon, 180, $distanco,$mezuro),
        "Ok" => destino($lat,$lon, 270, $distanco,$mezuro));
}

Rekordoj, kiuj estas trovataj inter la serĉ-loko, ankoraŭ bezonas esti limigataj, kaj mi uzas ĉi tiun formulon por kalkuli la disteancon inter du koordinatoj:

image

Kode, la formulo aspektas jene:

// kalkuli distancon inter du lat/lon koordinatoj
function distanco($latA,$lonA, $latB,$lonB, $mezuro="mi") {
    $radiuso = strcasecmp($mezuro, "km") ? 3963.19 : 6378.137;
    $rLatA = deg2rad($latA);
    $rLatB = deg2rad($latB);
    $rDuonSxangxLat = deg2rad(($latB - $latA) / 2);
    $rDuonSxangxLon = deg2rad(($lonB - $lonA) / 2);
    return 2 * $radiuso * asin(sqrt(pow(sin($rDuonSxangxLat), 2) +
         cos($rLatA) * cos($rLatB) * pow(sin($rDuonSxangxLon), 2)));
}

Serĉado per tiuj funkcioj aspektus jene ($latitudo kaj $longitudo estas la font-koordinatojn, kaj $distanco kaj $mezuro signas la deziratan serĉ-radiuson):

$lim = limigoj($latitudo,$longitudo, $distanco,$mezuro);
$peto = "SELECT loka_nomo, adreso, urbo, sxtato, posxtkodo,
    latitudo, longitudo FROM lokoj WHERE
    latitudo BETWEEN {$lim["Su"]["lat"]} AND {$lim["No"]["lat"]} AND
    longitudo BETWEEN {$lim["Ok"]["lon"]} AND {$lim["Or"]["lon"]}";
$rezulto = $db->query($peto);
$lokoj = array();
while ($vico = $rezulto->fetch(PDO::FETCH_ASSOC)) {
    $dist = distanco($latitudo,$longitudo, $vico["latitudo"],$vico["longitudo"], $mezuro);
    if ($dist <= $distanco) {
        $lokoj[] = array(
            "nomo"      => $vico["loka_nomo"],
            "adreso"    => $vico["adreso"],
            "urbo"      => $vico["urbo"],
            "sxtato"    => $vico["sxtato"],
            "posxtkodo" => $vico["posxtkodo"],
            "distanco"  => round($dist, 2));
    }
}

Havi profundan komprenadon de navigadaj matematikoj estas bona, sed tio ne estas necesa. Bonŝance, ni vivas dum tempo kiam oni povas trovi taŭgajn formulojn per facila ret-serĉo, kaj diskutoj, temataj pri la bonoj kaj malbonoj inter la simplecoj kaj precizecoj de la formuloj, estas facile troveble. Mi uzas formulojn, kiu estas bazitaj sur la formulo de Haversin. Ilia precizo sufiĉas por miaj bezonoj. Aliaj formuloj, kiel Vincenty’s Formulae, sinkoncernas pri la elipsa eco de la Tero kaj produktas pli-precizajn rezultojn, sed mi helpas personoj trovi proksimajn amikojn aŭ firmaojn… ne programas krozmisilojn.

La fina ŝtupo estas akiri la font-koordinatojn. Por la poŝtkoda ekzemplo ĉe la komenco, oni trovas la mezpunktan latitudon kaj longitudon de la poŝtkodo kaj uzi ĝin tiel serĉ-fonto. Se viaj celaj uzantaroj estas akceptemaj, vi konsiderus utiligi la geo-lokan API de JavaScript, difinita de la W3C. La API montras la objekton navigator.geolocation, kiu povas akiri la aktualan lokon de la uzanto. La uzanto malofte konas siajn precizajn koordinatojn, sed multe ret-kapablaĵoj kaj “inteligentaj telefonoj” nun havas GPS-kapablecon, kiun la retfoliumilo povas uzi. navigator.geolocation.getCurrentPosition() igis la foliumilon peti por permiso de la uzanto por montri la lokon, kaj se uzanto donas sian permison, ĝi vokas re-vokitan funkcion.

<form>
 Search <input id="tksDist" maxlength="3" name="distanco" size="3" type="text">
 <select name="mezuro">
  <option value="mi">mi</option>
  <
option value="km">km</option>
 </select> de<br>
 <input checked="checked" name="sercxPer" type="radio"
  value="posxtkodo">poŝtkodo
 <input maxlength="5" name="posxtkodo" size="5" type="text"><br>
 <input id="koordj" name="sercxPer" type="radio"
  value="koordj">koordinatoj
 <input id="tksLat" maxlength="10" name="latitudo" size="6"
  type="text"> Lat.
 <input id="tksLon" maxlength="10" name="longitudo" size="6"
  type="text"> Lon.<br>
 <input type="submit" value="Serĉi">
<form>
<script type="text/javascript">
(function () {
    function metKoordj(poz) {
        document.getElementById("koordj").checked = true;
        document.getElementById("tksLat").value =
            pos.coordinates.latitude;
        document.getElementById("tksLon").value =
            pos.coordinates.longitude;
    }

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(metKoordj);
    }
})();
</script>

Espere, vi nun povas vidi, kiel facile estas aldoni serĉadon por interesaj proksimaj lokoj al via ret-programo. Unue kaj plejantaŭe, estas grave subteni sanan datumaron, ĉar, eĉ se uzantoj komprenas ke la rezultoj estas malprecizaj, vi neniam povas sendi bonajn rezultojn per malbona datumaro. Estas plejparte simple dungi necesajn algoritmojn por efike serĉi tra la aro, kaj mi montris al vi tiun, kiun mi uzas; aliaj algoritmoj kaj formuloj estas troveblaj kaj uzeblaj se vi bezonas pli precizajn rezultojn. Kaj modernaj API-j, kiel navigator.geolocation, ebligas al vi proponi novajn manierojn, kiujn la uzantoj povas utiligi vian datumaron. Bonvolu aldiri viajn pensojn kaj spertojn al la komentoj sube.

Tradukita de la angla, kiun oni povas trovi ĉe zaemis.blogspot.com/2011/10/please-god-give-me-something-new.html. Koran dankon al mia amiko, Jon Z, kaj 黄鸡蛋/Ĉitano pro ilia kontrol-helpo.

“Jen…rigardu ĉi tiun <ligilon>. Sed, vi devas uzi la plej freŝan version de Chrome.” Aĉ! Ĉu ni ne jam spertis tion? 15 jaroj pasis, kaj ni nun reiras rekte al la sama loko, kie ni ekiris… “Plej bone aspekta pere de <ies plej ŝatatan retfoliumilon>.” Estas domaĝe.

Ne min miskomprenu. Jaroj da laboro por normigi HTML, JavaScript, la DOM, CSS, ktp klarigis multajn malklaraĵojn, kaj tio ja estis necesa. Sed striktaj reguloj ankaŭ sufokas kreadon. Ĉar HTML5 kaj ĝiaj amikoj forigis kelkajn el la limigoj, la pendolo svingiĝi antaŭen. Homoj ekkreas denove. Sed, nun kontraŭas Firefox kaj Chrome anstataŭ Internet Explorer kaj Netscape.

Tamen, estas sistema problemo preter la “foliumiloj militoj.” Ĉu vi memoras AOL? Facebook nun klopodas esti “La Interreto.” Ĉu vi memoras komputilegojn kaj verd-ekrajnojn? Ni puŝis ĉion al la komputila labortablo, kaj nun puŝas ĉion reen “al La Nubo.” Ĉiuj el la kvara kaj kvina generaciaj programlingvoj venis kaj foriris, kaj la plej bonaj, kiujn ni nun havas, estas Java kaj Clojure?! Ĉu vi memoras Ajax, nu mi volas diri DHTML, nu mi volas diri JavaScript? Ĉiuj “novigas,” sed neniu vere faras ion novan, ekscitan, aŭ unikan.

Damne, Tesla ŝtopis 200 lumampolojn teren, kaj lumigis ilin 25-mejloj for de elektra fonto en 1899, kaj Solyndra kaj Prius ankoraŭ estas la plej bonaj? Kio okazas?!

La sinusa ciklo de teknologiaj avancoj ne estus malbona, se ĉiu ciklo donus ion novan. Eble tial mi enuiĝis: ĉiu ciklo ŝajne refaradas la antaŭan ciklon, kaj neniam estas io vere nova kaj ekscita. Ni moviĝas ronde, ne spirale. Ju pli io ŝanĝiĝas, des pli ĉio restas sama. Ĉu Quindlen estas ĝusta, ke ĉiuj rakonto jam estis dirita?

Pensu pri la canvas elemento de HTML5, kiun ĉiuj laŭdas kaj opinias tiel bonega kaj mirinda, 2-dimensia desegno, kiun oni povas influi per JavaScript. Se foliumiloj farigus bonan subtenon por SVG antaŭ 10 jaroj, ni ne nun bezonus canvas. Fakte, ni jam havas tiun “novan, ekcitan teknologion” de 10 jaroj. Bedaŭrinde, SVG estas plibonega mult-maniere. Bedaŭrinde, ni havis 3-dimensian kapablecon per VRM/X3D ekde la 1990-aj jaroj. Bedaŭrine, ni kontentigis nin mem per io, kio estas malpli bona, kaj ni ridetas de orelo al orelo.

Ĉu vi ne ŝatus havi la teknologion de la estonteco 10 jarojn de nun? Tente. Sed mi ne certas ĉu mi deziros tiun… ĉar verŝajne, ĝi estos la sama kiel tio, kion mi jam havas nun dum la pasintaj 10-jaroj. Ĝi nur havas novan kampanjon de merkatiko.

When conditionally initializing several variables, what’s a better approach? This…

<?php
$a = "";
$b = 42;
if ($someCondition) {
    $a = "hello";
    $b = 7;
}


or this…

<?php
if ($someCondition) {
    $a = "hello";
    $b = 7;
}
else {
    $a = "";
    $b = 42;
}


The first does extra work by potentially setting the variables twice, but is less lines of code and may be more comfortable to those not used to PHP’s loosey-goosey scoping. The second avoids the extra work and demonstrates an understanding of PHP scope.

I don’t have a concrete answer.

The use of macros has been widely debated and mostly they are labeled as ‘evil’, as a no-no. This is the usual moral dillema that shows up whenever we have something with significant power in our hands: Anything that is powerful enough can be misused one way or the other. Should we then allow the usage of the powerful tool or ban it altogether so as to prevent its misuse (intentional or unintentional)?
Dimitris Staikos - Tips on Writing C Macros

Multaj pasvortoj estis ŝtelitaj de LinkedIn kaj aliaj retejoj; tiu igis min pripensante: se mi ŝanĝus miajn pasvortojn, uzante esperantajn literojn, ĉu ili estus pli sekuraj?

Ĝi necesigas Esperantan klavaron. Mi havas tiun kaj hejme kaj laboreje, sed mi ne povus uzi retejojn per aliaj komputiloj.

Ĉu tiu estas malbona ideo, aŭ ne?

Mi ne sentis sane kaj mi dormis multe hodaŭ, tial mi ne faris multe.

Mi redaktis kelkajn artikolojn por phpmaster.com, kaj babilis kun amikoj per ret-mesaĝilo (ni grumblis pri altaj impostoj).

Morgaŭ, mi vizitos la dentiston… Hodiaŭ estis malekcita tago. Morgaŭ estos malgoja tago!

Antaŭ unu aŭ du monatoj, mi aĉetis la libron “Vivo de Zamenhof” de Privat. Ĝi estas laŭdita en Esperantujo. Tamen, mi ne  ĝuas la libron, kaj mi malfacilege finlegos ĝin.

Mi ne ŝatas biografiojn. Mi ne zorgas, kiel oni iris de tie al ĉi tie, aŭ, kion oni diris. Tio enuigas min!

Mi pli preferas aŭbiografiojn. Mi ŝatas, kiam oni rakonas per memvortoj. Mi ŝatas vidi personecojn! Certe tiu estas malpli enua ol la alia!

Hodiaŭ, mi devas skribi ion ĉar la esperanta defio. Sed  nenio interesa okazis! Mi nur laboris, dormetis, kaj ludis Kolerajn Birdojn (“Angry Birds”).

Mi gajnis la restajn nivelojn de la unua ludo, kaj nun tiu, “Rio”, kaj “Spaco” estis gajnitaj tute. Kelkaj niveloj tro frustigis min!

Nun mi ludos “Sezonoj”.