<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Balássy György szakmai blogja</title>
	<atom:link href="https://balassygyorgy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://balassygyorgy.wordpress.com</link>
	<description>Megtanultam. Megosztom.</description>
	<lastBuildDate>Fri, 06 Apr 2018 19:59:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<site xmlns="com-wordpress:feed-additions:1">16172306</site><cloud domain='balassygyorgy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://secure.gravatar.com/blavatar/32188a49daf9f6083ad6865160c1dce3d267558b082fa3709d835ab025a5f80a?s=96&#038;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Balássy György szakmai blogja</title>
		<link>https://balassygyorgy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://balassygyorgy.wordpress.com/osd.xml" title="Balássy György szakmai blogja" />
	<atom:link rel='hub' href='https://balassygyorgy.wordpress.com/?pushpress=hub'/>
	<item>
		<title>Singleton unit tesztel&#233;se, avagy .NET-ben mi&#233;rt nem 12 h&#243;napb&#243;l &#225;ll az &#233;v?</title>
		<link>https://balassygyorgy.wordpress.com/2018/04/06/singleton-unit-test/</link>
					<comments>https://balassygyorgy.wordpress.com/2018/04/06/singleton-unit-test/#respond</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Fri, 06 Apr 2018 19:59:30 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[teszt]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=3019</guid>

					<description><![CDATA[Íme mai vizsgálódásunk tárgya: public class Calendar { private static Calendar _instance; public static Calendar Instance { ... } private Calendar() { } public string[] GetMonthNames() { string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames; return Sorter.Alphabetically(names); } // És még sokan mások... } Két dolgot mindenképp érdemes ezen az osztályon megfigyelni: van egy GetMonthNames metódusa és követi a [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Íme mai vizsgálódásunk tárgya:</p>
<pre>public class Calendar
{
  private static Calendar _instance;

  public static Calendar Instance { ... }

  private Calendar() { }

  public string[] GetMonthNames()
  {
    string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
    return Sorter.Alphabetically(names);
  }

  // És még sokan mások...
}</pre>
<p>Két dolgot mindenképp érdemes ezen az osztályon megfigyelni: van egy <strong>GetMonthNames</strong> metódusa és követi a Singleton tervezési mintát. A kettő nyilván összefügg, a metódust <strong>Calendar.Instance.GetMonthNames()</strong> formában lehet meghívni.</p>
<p>Mivel ez egy nagyobb, korosabb kódbázis része, mielőtt nagyobb változtatásokba fogunk, írjunk unit teszteket a <strong>GetMonthNames</strong> függvényhez. És itt rögtön belefutunk abba a problémába, hogy nem tudjuk izolálni a metódust, bele van drótozva, hogy függ a <strong>DateTimeFormatInfo</strong> és a <strong>Sorter</strong> osztályoktól. Az előbbi a .NET Framework része, az utóbbit viszont én találtam ki, ugyanebben a projektben van:</p>
<pre>public static class Sorter
{
  public static string[] Alphabetically(string[] values)
  {
    return values.OrderBy(v =&gt; v).ToArray();
  }
}</pre>
<p>Alakítsuk át, de úgy, hogy a <strong>Calendar</strong> osztályban lévő 123 másik metódust, és az őket hívó kódot ne kelljen módosítani.</p>
<p>A függőséget írjuk le egy interfésszel, mert azt könnyű lesz mockolni:</p>
<pre>public interface ISorter
{
  string[] Alphabetically(string[] values);
}</pre>
<p>Implementáljuk úgy, hogy visszavezetjük a már meglévő, <strong>static </strong>megvalósításra:</p>
<pre>public class SorterWrapper : ISorter
{
  public string[] Alphabetically(string[] values) =&gt; Sorter.Alphabetically(values);
}</pre>
<p>Másként fogalmazva eddig annyit csináltunk, hogy a <strong>static</strong> implementációt becsomagoltuk egy példányosítható implementációba, amit egy interfésszel is le tudunk írni.</p>
<p>Mivel az eredeti <strong>Calendar</strong> osztály nyilvános interfészéhez nem akarunk hozzányúlni, vezessünk be újabb osztályt, amit én fantáziadúsan <strong>MonthManager</strong>-nek neveztem el:</p>
<pre>public class MonthManager
{
  private ISorter _sorter;

  public MonthManager(ISorter sorter)
  {
    this._sorter = sorter;
  }

  public string[] GetMonthNames()
  {
    string[] names = DateTimeFormatInfo.CurrentInfo.MonthNames;
    return this._sorter.Alphabetically(names);
  }
}</pre>
<p>Ez már egy kiválóan tesztelhető osztály, aminek a függőségét a konstruktoron keresztül meg lehet adni. (Az egyszerűség kedvéért a <strong>DateTimeFormatInfo</strong> függőséggel itt szándékosan nem foglalkozom.)</p>
<p>Módosítani kell természetesen az eredeti <strong>Calendar</strong> osztályt is, de szerencsére csak a belső implementációját, a publikus interfésze változatlan marad:</p>
<pre>public class Calendar
{
  // Singleton...

  private MonthManager _monthManager;

  private Calendar()
  {
    ISorter sorter = new SorterWrapper();
    this._monthManager = new MonthManager(sorter);  
  }

  public string[] GetMonthNames()
  {
    return this._monthManager.GetMonthNames();
  }
}</pre>
<p>Ehhez már könnyen írhatunk teszteket:</p>
<pre>public class IdentitySorter : ISorter
{
  public string[] Alphabetically(string[] values) =&gt; values;
}

[TestClass]
public class CalendarTests
{
  [TestMethod]
  public void ShouldReturnTwelveMonths()
  {
    MonthManager mgr = new MonthManager(new IdentitySorter());
    string[] months = mgr.GetMonthNames();
    Assert.AreEqual(12, months.Length);
  }
}</pre>
<p>Igazán kár, hogy ez a teszt hibát fog jelezni, méghozzá mindig! Látod a hibát?</p>
<p>Nem? Mert nincs is! Ez feature <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>A .NET Frameworkben lévő <strong>System.Globalization.Calendar</strong> osztályt úgy tervezték, hogy mindenféle naptárt le tudjon írni, van is <a href="https://docs.microsoft.com/hu-hu/dotnet/api/system.globalization.calendar?view=netframework-4.7.1" target="_blank">11 származtatott osztálya</a>, köztük például a <strong>GregorianCalendar</strong>. Természetesen az egyes naptárak máshogy értelmezhetik a hónap fogalmát és ennek megfelelően más lehet a számuk is. Ennek a támogatását pedig úgy sikerült megoldani, hogy a <strong>DateTimeFormatInfo</strong> osztály <strong>MonthNames</strong> tulajdonsága <strong>CurrentCulture</strong>-tól függetlenül mindig 13 (!) elemű tömböt ad vissza, ami a mi naptárunk esetén a 12 hónap nevét jelenti, a 13. elem pedig egy üres string. Mindezért persze nem a .NET a felelős, így van ez a Win32 API-ban is (lásd <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/dd373856(v=vs.85).aspx" target="_blank">LOCALE_SMONTHNAME13</a> konstans) már jó rég óta.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2018/04/06/singleton-unit-test/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3019</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>
	</item>
		<item>
		<title>Mutasd az importjaidat, megmondom, ki vagy</title>
		<link>https://balassygyorgy.wordpress.com/2018/01/04/mutasd-az-importjaidat/</link>
					<comments>https://balassygyorgy.wordpress.com/2018/01/04/mutasd-az-importjaidat/#respond</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Thu, 04 Jan 2018 05:20:46 +0000</pubDate>
				<category><![CDATA[Webfejlesztés]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[teszt]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=3017</guid>

					<description><![CDATA[Na jó, azt talán nem, de arra utalhat, hogy mennyire karbantartható a kódod. Írtál-e már ilyet: import { SomeClass } from 'somelib'; ... const s = new SomeClass(); Vagy épp ilyet: import * as someFunc from 'somelib'; ... const s = someFunc(); Ismerős, ugye? Én is rengetegszer írtam le hasonló sorokat, már csak azért is, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Na jó, azt talán nem, de arra utalhat, hogy mennyire karbantartható a kódod.</p>
<p>Írtál-e már ilyet:</p>
<pre>import { SomeClass } from 'somelib';
...
const s = new SomeClass();</pre>
<p>Vagy épp ilyet:</p>
<pre>import * as someFunc from 'somelib';
...
const s = someFunc();</pre>
<p>Ismerős, ugye? Én is rengetegszer írtam le hasonló sorokat, már csak azért is, mert minden könyvtár, library, package README-je pontosan ezt ajánlja. Van ezzel a mintával azonban (legalább) két probléma, ami miatt egy ideje igyekszem kerülni.</p>
<h2>Függőségek kezelése</h2>
<p>Ha gátlástalanul követed ezt a mintát, egyetlen alkalmazáson belül ugyanazt a sort le fogod írni százszor (vagy még többször). Miért? Mert viszi a kezed a copy-paste. Egyszerű, kényelmes, működik, nem igaz?</p>
<p>Így viszont nagyon nehéz lesz meghatározni, hogy<strong> a Te alkalmazásodnak <em>pontosan</em> mire is van szüksége</strong>, mitől függ, mi a dependenciája. A kódból mindössze annyi fog látszódni (de csak miután a kedvenc editorod “Find in All Files” funkciójával rákeresel), hogy a te kódod számtalan helyen hivatkozik egy külső csomagra, tehát az a <em>csomag</em> kell neki, függ tőle.</p>
<p>A valóság azonban más: a te alkalmazás logikádnak <strong>nem egy <em>csomagra</em> van szüksége, hanem egy <em>funkcióra</em></strong>, egy logikára, amit történetesen egy külső csomagban implementált valaki más. Csakhogy ez most abszolút nem látszik a kódodból.</p>
<p>Íme egy konkrétabb példa a népszerű <a href="https://www.npmjs.com/package/lodash" target="_blank">lodash</a> csomaggal (*):</p>
<pre>var _ = require('lodash');</pre>
<p>Ez a csomag számtalan segédfüggvényt tartalmaz, szinte kizárt, hogy a te alkalmazásodnak mindegyikre szüksége van. Hogyan derítheted ki, hogy pontosan mit használsz? Rákeresel az összes fájlodban arra, hogy “_”.</p>
<p>De miért érdekes ez?</p>
<p>Például mert előfordulhat, hogy a hivatkozott csomagot le akarod cserélni valami másra. A nyílt forráskódú világban csomagok jönnek, mennek, ma még ez volt a legjobb, holnap már az lesz. Mert a régiben van egy bug, amit a fejlesztője már sosem fog kijavítani, vagy mert csak az új kompatibilis a legújabb Node verzióval, ami meg kell az appod többi részének. Vagy egyszerűen azért, mert frissen akarod tartani az appod kódját, és csak olyan dependenciákat szeretnél, amik körül aktív a közösség.</p>
<p>Szinte biztos, hogy nem fogsz találni egy másik könyvtárt, csomagot, ami API szinten kompatibilis a régivel. Olyanra van szükséged, ami <strong><em>funkció</em> szinten kompatibilis</strong>, amit csak akkor tudsz kideríteni, ha pontosan ismered, hogy milyen funkcióra hivatkozol.</p>
<p>Ha ez megvan, akkor már csak az kell, hogy a lehető legkevesebb helyen kelljen átírni a hivatkozást a kódodban.</p>
<p>Ebből rögtön következik is a megoldás: törekedj arra, hogy <strong>a külső csomagokra való hivatkozásokat pontosan egyetlen helyen írd le a kódodban</strong>, azaz csomagold be őket egy osztályba, ami csak azokat a funkciókat publikálja, amire a te appod épít. Ez a módszer ráadásul olvashatóbbá is tudja tenni a kódodat, például “sha256()” helyett sokkal jobb függvény nevet is ki tudsz találni, igaz?</p>
<p>Ez a módszer nekem nagyon bevált, bár megjegyzem, nem követem fanatikusként, mert a framewörk szintű libek (pl. Angular) csomagolása túl nagy overhead lenne.</p>
<h2>Tesztelhetőség</h2>
<p>Ha egy osztályod importon keresztül hivatkozik egy másikra, akkor annak az osztálynak a unit tesztelése rémálom lesz, mert a hivatkozott osztály mockolásához a fájl betöltő logikát kell meghekkelni (például <a href="https://github.com/request/request-promise#mocking-request-promise" target="_blank">Mocking Request-Promise</a>). </p>
<p>A megoldás nem újdonság: <strong>DI</strong>. Nem csak azt nyerjük vele, hogy könnyebb a tesztelés, de elég ránézni tipikusan a konstruktorra, és messziről látszik, hogy az adott osztály milyen más osztályoktól függ. </p>
<p>TypeScriptben például sokszor importálunk interface-eket csak azért, hogy legyen típus leírónk, ami miatt nagyon el tudnak szaporodni az import sorok, és gyakran nem látszik ránézésre, hogy melyik import hoz be funkcionalitást, és melyik csak típus információt. Ezen is segít a DI, ha törekszünk arra, hogy az importot csak típus leírásokhoz használjuk, minden másra ott a DI.</p>
<h2>Mi ebben az újdonság?</h2>
<p>Semmi az ég világon. Tényleg. Ennek ellenére mégsem akarnak kipusztulni ezek a kódok. A README-k, tutorialok, cikkek, blogok mindig az egyszerűségre fognak törekedni, olyan példákat fogsz bennük találni, amik segítenek a megértésben, az elindulásban. Nem az a céljuk, hogy vakon kövesd őket egy komolyabb alkalmazásban, ahol neked a <strong>karbantarthatóság és fenntarthatóság</strong> legalább olyan fontos, mint az egyszerűség. Amikor mégis leírsz egy ilyen sort legközelebb, gondolj arra, hogy ezzel <strong>mit veszel a nyakadba</strong>.</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2018/01/programming-is-thinking.png"><img title="programming-is-thinking" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="programming-is-thinking" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2018/01/programming-is-thinking_thumb.png?w=590&#038;h=290" width="590" height="290" /></a></p>
<p>&#160;</p>
<p>*: A példa kicsit sántít, mert a lodash lehetővé tesz finomabb importokat is, csak épp kevesen használják.</p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8c2f7610-5861-4898-85c3-95a9dd3cc313" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/JavaScript" rel="tag">JavaScript</a>,<a href="http://technorati.com/tags/TypeScript" rel="tag">TypeScript</a>,<a href="http://technorati.com/tags/DI" rel="tag">DI</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2018/01/04/mutasd-az-importjaidat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3017</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2018/01/programming-is-thinking_thumb.png" medium="image">
			<media:title type="html">programming-is-thinking</media:title>
		</media:content>
	</item>
		<item>
		<title>Mi lesz veled, Angular? Gondolatok az Angular Connect 2017 ut&#225;n</title>
		<link>https://balassygyorgy.wordpress.com/2017/11/13/mi-lesz-veled-angular/</link>
					<comments>https://balassygyorgy.wordpress.com/2017/11/13/mi-lesz-veled-angular/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Mon, 13 Nov 2017 19:15:00 +0000</pubDate>
				<category><![CDATA[Webfejlesztés]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[TypeScript]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2993</guid>

					<description><![CDATA[A héten volt szerencsém részt venni a Londonban rendezett két napos Angular Connect 2017 konferencián, ebben a blog bejegyzésben pedig néhány ott hallott gondolatot és benyomást jegyzek fel részint magamnak emlékeztetőül, részint mert másnak is hasznosak lehetnek. Az itt leírtak közül több nem szó szerint így hangzott el az előadók szájából, ez már az én [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-connect-welcome.jpg"><img title="Angular Connect Welcome" style="background-image:none;float:right;padding-top:0;padding-left:0;margin:0 0 0 10px;display:inline;padding-right:0;border-width:0;" border="0" alt="Angular Connect Welcome" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-connect-welcome_thumb.jpg?w=113&#038;h=200" width="113" align="right" height="200" /></a>A héten volt szerencsém részt venni a Londonban rendezett két napos <a href="https://www.angularconnect.com/" target="_blank">Angular Connect 2017</a> konferencián, ebben a blog bejegyzésben pedig néhány ott hallott gondolatot és benyomást jegyzek fel részint magamnak emlékeztetőül, részint mert másnak is hasznosak lehetnek. </p>
<p>Az itt leírtak közül több <em>nem</em> szó szerint így hangzott el az előadók szájából, ez már az én kivonatom. A fontosabb előadásokról <a href="https://www.youtube.com/channel/UCzrskTiT_ObAk3xBkVxMz5g/videos" target="_blank">videófelvétel</a> készült, azok megtekinthetőek a konferencia honlapján, az tekinthető hiteles forrásnak.</p>
<h2>Át kell állni Angular@latest-re</h2>
<p>Tisztán látszik, hogy a <strong>Google nagyon komolyan veszi az Angulart</strong>. Nem egyszerűen egy szabadidőben készülő open source projektről van szó, hanem egy olyan technológiáról, amibe azért invesztálnak, mert ők maguk is használják. Az egyik legnagyobb projektjük, a <a href="https://console.cloud.google.com" target="_blank">Google Cloud Console</a> több, mint 10 ezer TypeScript és 3 ezer Angular fájlt tartalmaz. </p>
<p>Ez nem újdonság, így volt ez már az AngularJS idején is, ám ebből rögtön két dolog is következik. </p>
<p>Az első, hogy a fejlesztés nem áll meg. Jó elvek szerint készült, és stabil alapokon áll már az Angular, ezért látványos új funkciókkal egyre ritkábban fogunk találkozni, viszont <strong>a motorháztető alatt folyamatos fejlesztések</strong> történnek minden verzióban. Itt a legfontosabb célterület a <strong>teljesítmény</strong>, aminek egyik összetevője az első oldalbetöltés ideje (Time To Interactive), a másik pedig az alkalmazás futása közbeni sebesség. Egyik területen sem muzsikál rosszul az Angular már most sem, de a csapat nem állt meg, minden verzióban egyre kisebb a bundle és egyre gyorsabb az app. </p>
<p>Ehhez az kell, hogy nagyon sok energiát öljön a fejlesztőcsapat abba, hogy <strong>a fordító egyre okosabb</strong> legyen. Csak egy példa: a Build Optimizer a TypeScript fordító sajátosságait és képességeit kihasználva tovább pofozza a kódot annak érdekében, hogy a minification még hatékonyabb legyen. Olyan trükköket csinál a kód variálásával, amivel egy átlagos projektben egy átlagos fejlesztő biztosan nem foglalkozna, Google méretekben viszont már sokat számít, mi pedig élvezhetjük a sok munka és kutatás eredményeit. </p>
<p>A második következménye annak, hogy a Google komolyan használja az Angulart, hogy a folyamatos <strong>upgrade-nek egyszerűnek kell lennie</strong>. A fejlesztő csapat szerint az Angular API stabil, nem várhatók breaking change-ek, a v4-ről v5-re történő átállás például a legtöbb projektnél <strong>egyszerű verzió szám átírás</strong> a package.json-ban, és máris új fordítót kap az app és gyorsabban fog futni. A Google alkalmazásainak eddig 25%-át migrálták át Angularra.</p>
<p>Adott tehát egy olyan keretrendszer, ami <strong>minden verzióban egyre hatékonyabb</strong> lesz, és a készítők szerint nem lesz nehéz az átállás az újabb verziókra. Tegyük még hozzá azt a tényt, hogy az Angular fejlesztők száma már meghaladja az AngularJS fejlesztők számát, és hogy az AngularJS-be valószínűleg már sokáig nem fog invesztálni a Google és máris ott tartunk, hogy az élő projekteket <strong>célszerű átmigrálni Angularra, és folyamatosan frissíteni</strong> a legújabb verzióra, azaz most v5-re.</p>
<h2>Upgrade, de hogyan?</h2>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-upgrade.jpg"><img title="Angular upgrade" style="background-image:none;float:right;padding-top:0;padding-left:0;margin:0 0 10px 10px;display:inline;padding-right:0;border-width:0;" border="0" alt="Angular upgrade" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-upgrade_thumb.jpg?w=200&#038;h=89" width="200" align="right" height="89" /></a>Kérdés, hogy mit kezdjünk a meglévő AngularJS kódbázissal, hogyan vigyük át Angularra?</p>
<p>Hogy <strong>upgrade vagy újraírás</strong> a jó megoldás, arra nincs egyértelmű, minden esetre működő válasz. A hivatalos álláspont szerint meg kell vizsgálni a kódbázis sajátosságait és a jövőbeli várható üzleti elvárásokat, és ezeknek a fényében kell dönteni. Ez egyáltalán nem új és nem meglepő.</p>
<p>Nincs meglepetés sajnos azzal kapcsolatban sem, hogy az <a href="https://angular.io/guide/upgrade" target="_blank">upgrade-et hogyan</a> érdemes kivitelezni. Nincs varázsszer, az <strong><a href="https://angular.io/guide/upgrade#upgrading-with-ngupgrade" target="_blank">ngUpgrade</a></strong> &quot;az&quot; eszköz, legfeljebb azt lehet variálni, hogy milyen lépésben haladunk. Ha az alkalmazásunk több &quot;oldalból&quot; áll, akkor érdemes lehet route-onként haladni.</p>
<p>Összességében tehát az upgrade területén nincs más lehetőségünk, mint <strong>időt allokálni rá, és végigcsinálni</strong>. Itt szerintem a legtöbb projektben nem a mérnöki, hanem a menedzsment oldal fogja a nehézséget jelenteni.</p>
<h2>Mit kezdjünk a nagy kódbázissal?</h2>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/bazel1.png"><img title="Bazel" style="border-top:0;border-right:0;background-image:none;border-bottom:0;float:right;padding-top:0;padding-left:0;border-left:0;margin:0 0 10px 10px;display:inline;padding-right:0;" border="0" alt="Bazel" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/bazel_thumb1.png?w=200&#038;h=83" width="200" align="right" height="83" /></a>A folyamatosan bővülő kódbázis egyre nagyobb kihívást jelent. Növekszik a repository mérete, növekszik a fordítási idő, egyre több csapat dolgozik ugyanazon a kódon, egyre nagyobb problémát okoz a függőségek kezelése. Mit lehet tenni?</p>
<p>A Google és a Facebook a <a href="https://danluu.com/monorepo/" target="_blank"><strong>monorepo</strong></a> híve, az alkalmazások és a library-k egyetlen nagy repository-ban vannak, míg az Amazonnál és a Netflixnél a <strong>microrepository</strong>-ban hisznek, ott minden független egymástól. Bármelyiket is valljuk, <a href="https://youtu.be/Rt38N-Uek0s?t=1h32m44s" target="_blank">a választás feltételekhez kötött</a>.</p>
<p>A Google részben nyilvánossá tette a <strong>saját fejlesztésű build eszközét</strong>, a <a href="https://bazel.build/" target="_blank">Bazel</a>t, aminek az erőssége, hogy a kód módosításai után csak azt fordítja újra, amire kihatással lehet. Ha nincs publikus API változás, akkor csak az adott komponenst, ha van, akkor pedig azokat, amik arra épülnek. Így elérték, hogy az edit-and-refresh élmény 2 másodperc alatt legyen. Ehhez persze az is kellett, hogy <strong>a kódot okosan szervezzék</strong>. Átlagosan náluk 1 package-ben 1 Angular modul van, 1 modul pedig átlagosan 1.5 komponenst tartalmaz. Ezzel nem csak azt nyerik, hogy gyors a build, hanem azt is, hogy tiszták az interfészek és dokumentáltak a függőségek. </p>
<p>Továbbá érdemes megnézni, hogy az <a href="https://github.com/angular/angular.io" target="_blank">Angular.io</a> webhely <a href="https://github.com/angular/angular/blob/master/aio/package.json" target="_blank">buildeléséhez milyen megoldásokat</a> választottak, és abból mit tudunk felhasználni. Ez az Angular alkalmazás náluk az állatorvosi ló, sok benchmark erre vonatkozik.</p>
<h2>DRY vagy PRY?</h2>
<p>A <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank">Don&#8217;t Repeat Yourself</a> elv szerint üldözni kell minden kód duplikációt, ha valahol ismétlődő kódot találunk, akkor azt azonnal refaktorálnunk kell.</p>
<p>Ám ha ezt túl korán tesszük meg, lábon lőhetjük magunkat. A közös kódrészlet <strong>függőséget</strong> jelent, az interfésze <strong>contract</strong>ként kezelendő, aminek a változásait csak megfelelő <strong>körültekintéssel és kommunikációval</strong> lehet elvégezni. </p>
<p>Ha van megbízható CI infrastruktúránk és jó teszt lefedettségünk, akkor ez költséges, de nem kockázatos. Kiszervezzük a közös kódot egy saját package-be, és ha bármi változik a package-ben, akkor újrafordítunk minden olyan alkalmazást és package-et, ami arra épül és újra is teszteljük azokat.</p>
<p>Ám ha nem vagyunk ilyen szerencsés helyzetben, akkor <strong>a túl korán alkalmazott DRY nem csak költséges, de kockázatos is lehet</strong>. Amíg tehát egy kódrészlet gyakran változik, addig inkább a <strong>Please Repeat Yourself</strong> (PRY) elvet érdemes követni, és csak a stabilizálódott kódokat kiszervezni közös helyre.</p>
<p>Mielőtt azonban vallást váltunk és elkezdjük követni a PRY elvet, érdemes feltenni magunknak a kérdést: vajon vissza fogunk-e térni később, és <strong>refaktoráljuk-e a már stabil kódrészletünket</strong>, vagy a jól működő dolgokhoz általában nem nyúlunk?</p>
<p>Zárójelben jegyzem meg, hogy a build eszközeink (TypeScript compiler, Angular compiler, Build Optimizer, minifier, Webpack stb.) nagyon agresszíven törekszenek a duplikáció kiszűrésére, “mutatványos környezetben” (production) tehát nem nagy a veszteség.</p>
<h2>Hogyan teszteljünk nagy kódbázist?</h2>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/cucumber.png"><img title="Cucumber" style="background-image:none;float:right;padding-top:0;padding-left:0;margin:0 0 10px 10px;display:inline;padding-right:0;border-width:0;" border="0" alt="Cucumber" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/cucumber_thumb.png?w=100&#038;h=100" width="100" align="right" height="100" /></a>A tesztelés terén nem tartogatott meglepetéseket a konferencia. Volt ugyan <a href="https://www.angularconnect.com/2017/sessions/#s-675" target="_blank">egy előadás</a> a <a href="https://github.com/jan-molak/serenity-js" target="_blank">SerenityJS</a>-ről, ami nem a Protractorban megszokott <a href="https://github.com/angular/protractor/blob/master/docs/page-objects.md" target="_blank">Page Objects</a> elvet követi, hanem a <a href="http://serenity-js.org/design/screenplay-pattern.html" target="_blank">Screenplay Pattern</a>t, de engem nem győzött meg. </p>
<p>Egyrészt azért, mert szerintem a Page Object módszert is lehet úgy használni, hogy a felsorolt problémákat elkerülje (kód mérete, olvashatósága, duplikációk stb.), másrészt pedig azért, mert nem látom, hogy ez miért jobb, mint a jól bevált <a href="https://github.com/cucumber/cucumber/wiki/Gherkin" target="_blank">Gherkin-Cucumber páros</a>.</p>
<p>Ami viszont fontos – bár nem új – gondolat az előadásból, hogy a <strong>teszteket igenis tervezni kell</strong>. A jól megtervezett teszt esetekből lesznek a jól megtervezett teszt implementációk, azaz a karbantartható teszt kód.</p>
<h2>Mi várható 2018-ban?</h2>
<p>A fordító és a runtime folyamatos fejlesztésén kívül az Angular csapat természetesen újabb funkciókkal is bővíti a keretrendszert, amiből a PWA, az Angular Universal és az Angular Elements kapott nagyobb teret a konferencián.</p>
<h3>PWA</h3>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/pwa.png"><img title="PWA" style="background-image:none;float:left;padding-top:0;padding-left:0;margin:0 10px 10px;display:inline;padding-right:0;border-width:0;" border="0" alt="PWA" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/pwa_thumb.png?w=120&#038;h=87" width="120" align="left" height="87" /></a>A PWA, vagy teljes nevén <a href="https://developers.google.com/web/progressive-web-apps/" target="_blank">Progressive Web Apps</a>, a legújabb (?) név arra a jelenségre, hogy webes technológiákkal készített és az interneten hosztolt programkód olyan felhasználói élményt nyújtson, mint egy telepített, vastag kliens alkalmazás. Technológiai szinten az <a href="https://pascalprecht.github.io/slides/angular-and-service-workers" target="_blank">újdonságot</a> a <a href="https://developers.google.com/web/fundamentals/primers/service-workers/" target="_blank">Service Worker</a> jelenti, ami biztosítja az <strong>offline működés</strong> feltételeit. Ezt a komponenst az Angular csapat becsomagolta egy @angular/service-worker package-be, ami lehetővé teszi, hogy nagyon <a href="https://medium.com/@webmaxru/a-new-angular-service-worker-creating-automatic-progressive-web-apps-part-1-theory-37d7d7647cc7" target="_blank">kényelmesen készítsünk Angularral PWA-t</a>. A CLI 1.6 bétájában már megjelenik a <strong>&#8211;service-worker</strong> kapcsoló, későbbi verziókban pedig várható, hogy ez lesz az alapértelmezett, tehát érdemes készülni rá.</p>
<p>A PWA nem egy fekete-fehér terület, vannak hátrányai (például verzió frissítés), ami miatt egyáltalán nem biztos, hogy minden esetben megéri használni. Érdemes viszont <a href="https://pascalprecht.github.io/slides/angular-and-service-workers" target="_blank">megismerkedni vele</a> és szem előtt tartani mint lehetőséget (és <a href="https://chromium.googlesource.com/chromium/src/+/lkcr/docs/security/service-worker-security-faq.md" target="_blank">mint biztonsági tényezőt is</a>), mert jelentősen növelhetjük vele a felhasználói élményt.</p>
<h3>Angular Universal</h3>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-universal.jpg"><img title="Angular Universal" style="background-image:none;float:left;padding-top:0;padding-left:0;margin:0 10px 10px;display:inline;padding-right:0;border-width:0;" border="0" alt="Angular Universal" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-universal_thumb.jpg?w=120&#038;h=41" width="120" align="left" height="41" /></a></p>
<p>A 4.0 verziótól már az Angular részeként elérhető <a href="https://github.com/angular/universal" target="_blank">Angular Universal</a> célja, hogy platform és eszköz támogatást adjon szerver oldali HTML renderelés megvalósításához. A feladat nem csak annyi, hogy a backendről érkező HTML sztringet beszúrunk a weboldal közepére, hanem támogatni kell a kereső motorokat és az oldalról tartalmat kiollózó egyéb alkalmazásokat (pl. Facebook, Slack), miközben többféle stratégiát (pl. statikus renderelés fordításkor) is kell tudnia támogatni.</p>
<p>Olyan környezetben, ahol a teljesítmény problémákat okoz, érdemes megismerkedni a <a href="https://universal.angular.io/" target="_blank">fogalommal</a> és az <a href="https://github.com/angular/universal-starter" target="_blank">Angularos megvalósítással</a>.</p>
<h3>Angular Elements</h3>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-labs.png"><img title="Angular Labs" style="background-image:none;float:left;padding-top:0;padding-left:0;margin:0 10px 10px;display:inline;padding-right:0;border-width:0;" border="0" alt="Angular Labs" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-labs_thumb.png?w=120&#038;h=129" width="120" align="left" height="129" /></a>A szoftverfejlesztés egyik problémája, hogy általában le kell tenni a voksunkat valamelyik keretrendszer mellett, és utána annak a szabályai szerint kell játszanunk. Különösen bosszantó ez egy olyan környezetben, mint a web, ahol mindegy, hogy milyen kliens oldali platformot választunk, végül mezei HTML és JavaScript kód fog futni a böngészőben, miközben az egyes keretrendszerek között nincs, vagy csak nagyon körülményes az átjárás.</p>
<p>Ezen a problémán próbál segíteni az egyelőre csak az <a href="https://blog.angular.io/the-angular-team-at-angularmix-2d56fd7fde65" target="_blank">Angular Labs</a> részeként elérhető <a href="https://moduscreate.com/blog/angular-elements-ngcomponents-everywhere/" target="_blank">Angular Elements</a>, aminek az a célja, hogy a <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components/Custom_Elements" target="_blank">Custom Elements</a> szabvány lehetőségeit felhasználva úgy csomagolja be az Angularos komponenseinket, hogy más keretrendszerek számára standard HTML elementnek tűnjenek. A kezdeményezés még nagyon gyerekcipőben jár, jövőre lehet belőle valami, mindenesetre üdítő látvány, hogy az Angular csapat nem zárkózik be, nyitott más platformok felé, és támogatni akarja a library fejlesztőket.</p>
<p>Ezek voltak a visszatérő témák, de ezeken kívül még sok más terület is terítékre került: forms, animations, DevKit, Schematics, ABC, Query, DI, aria, internationalization, flex layout, security, burnout, VR – szerencsére a <a href="https://www.youtube.com/channel/UCzrskTiT_ObAk3xBkVxMz5g/videos" target="_blank">videók mind megtekinthetők a Youtube-on</a>. Mindkét nap keynote-tal kezdődött, érdemes megnézni őket.</p>
<p>Ráadásként az Angular csapat egy ígéretet is tett: kigyomlálják a Github repóban található közel 2000 issue-t és több, mint 300 PR-t. Külön embert vettek fel erre <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:029295dd-e7f6-44eb-baeb-7df290d30353" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/Angular" rel="tag">Angular</a>,<a href="http://technorati.com/tags/web" rel="tag">web</a>,<a href="http://technorati.com/tags/JavaScript" rel="tag">JavaScript</a>,<a href="http://technorati.com/tags/TypeScript" rel="tag">TypeScript</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2017/11/13/mi-lesz-veled-angular/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2993</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-connect-welcome_thumb.jpg" medium="image">
			<media:title type="html">Angular Connect Welcome</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-upgrade_thumb.jpg" medium="image">
			<media:title type="html">Angular upgrade</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/bazel_thumb1.png" medium="image">
			<media:title type="html">Bazel</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/cucumber_thumb.png" medium="image">
			<media:title type="html">Cucumber</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/pwa_thumb.png" medium="image">
			<media:title type="html">PWA</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-universal_thumb.jpg" medium="image">
			<media:title type="html">Angular Universal</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2017/11/angular-labs_thumb.png" medium="image">
			<media:title type="html">Angular Labs</media:title>
		</media:content>
	</item>
		<item>
		<title>Hogyan nyerhetn&#233; vissza a BKK a bizalmamat?</title>
		<link>https://balassygyorgy.wordpress.com/2017/07/27/hogyan-nyerhetne-vissza-a-bkk-a-bizalmamat/</link>
					<comments>https://balassygyorgy.wordpress.com/2017/07/27/hogyan-nyerhetne-vissza-a-bkk-a-bizalmamat/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Thu, 27 Jul 2017 09:02:58 +0000</pubDate>
				<category><![CDATA[Biztonság]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2991</guid>

					<description><![CDATA[Az elmúlt két hétben alig telt el nap anélkül, hogy ne derült volna ki valami újabb “érdekesség” a BKK új, online, elektronikus jegyértékesítési rendszerével kapcsolatban. Sokan, sokféleképpen elmondták már, hogy a rendszer fejlesztői milyen szakmai és kommunikációs hibákat követtek el, azt azonban egyetlen cikkben sem láttam vitatni, hogy elektronikus jegyértékesítési rendszerre szükség van. Az elkövetett [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Az elmúlt két hétben alig telt el nap anélkül, hogy ne derült volna ki valami újabb “érdekesség” a BKK új, online, elektronikus jegyértékesítési rendszerével kapcsolatban. Sokan, sokféleképpen elmondták már, hogy a rendszer fejlesztői milyen szakmai és kommunikációs hibákat követtek el, azt azonban egyetlen cikkben sem láttam vitatni, hogy <em><strong>elektronikus jegyértékesítési rendszerre szükség van.</strong></em></p>
<p>Az elkövetett “bakik” azonban jelentősen megingatták a felhasználói bizalmat mind a szolgáltatóban, mind pedig az elkészült rendszerben, ami elég érdekes patthelyzethez vezetett: <em><strong>mind a szolgáltatónak, mind pedig a felhasználóknak érdekük lenne használni egy ilyen rendszert, de nem ezt.</strong></em></p>
<p><strong>Adott tehát a feladat, ki kell mászni erről a mélypontról, mindannyiunk érdekében. Te hogyan tennéd?</strong> Ha te lennél a BKK-nál az a most frissen kinevezett, új <em>vezető</em>, akinek sikerre kell vinnie az elektronikus jegyértékesítési rendszert, te mit csinálnál? Utasként, <em>felhasználóként</em>, mit várnál el a BKK-tól, hogy bátran használni merd a rendszert? Informatikusként, szoftverfejlesztőként, IT biztonsági <em>szakemberként</em> <strong>mi kellene neked ahhoz, hogy megbízz egy új rendszerben?</strong></p>
<p>Eljátszottam a gondolattal, hogy ha én kerülnék ilyen kihívás elé, én milyen irányba vinném a projektet. Tettem mindezt úgy, hogy a mostani rendszerről a sajtóban megjelenteken kívül semmit sem tudok: nem ismerem a követelményeket, az anyagi kereteket, a jogi korlátokat, az integrációs igényeket, ezért ezeket figyelembe se tudtam venni. Minden döntésnek vannak hátrányai, az egyszerűség kedvéért itt csak az előnyökre térek ki.</p>
<h2>További károk megelőzése</h2>
<p><strong>Felbontanám a szerződést a T-Systems-szel, és az erről szóló dokumentumokat nyilvánossá tenném.</strong> Miért? A mostani rendszer fabatkát sem ér, és a fejlesztő cég elveszítette szavahihetőségét: nincs az a felhasználó, aki szívesen használná, vagy aki elhinné, hogy a fejlesztő “megerősítette”, és most már biztonságos. Egy új, tiszta lappal induló projektben ez csak ballaszt.</p>
<p><strong>Megsemmisíteném a jelenlegi adatbázist</strong>, méghozzá egy IT biztonsági cég felügyeletével, akiknek az igazolását nyilvánossá tenném. Miért? Egyrészt nincs rá szükség egy tiszta lappal induló új rendszernél, másrészt nagyjából 1 napnyi felhasználási adat van benne, amit simán hagynék veszni, de leginkább azért, hogy elejét vegyem azoknak a vádaknak, hogy továbbra is innen szivárog ki személyes adat. Meg aztán úgyis van róla backup a dark weben <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<p>Közreműködő IT biztonsági cégként egy olyat választanék, aki nem mamut és akit a hazai szakma elismer. Legalább három IT biztonsági konferencia van hazánkban minden évben, bőven lehet választani a felvonuló cégek közül.</p>
<h2>Új alapok</h2>
<p><strong>Az új rendszert kezdettől fogva a Kerckhoff elvet követve fejleszteném.</strong> Miért? A Kerckhoff elv szerint a rendszer csak akkor lehet biztonságos, ha egy támadó a titkosítási kulcson kívül a rendszer összes paraméterét ismerheti. És miért ne ismerhetné bárki, hiszen ez egy közpénzből fejlesztett, nagyon érzékeny személyes adatokat kezelő, közérdekű rendszer.</p>
<p><strong>Nyilvánossá tenném a forráskódot és minden dokumentációt.</strong> Miért? Egyrészt mert ebben az országban nagyon sokan tudnának értékesen hozzátenni a projekthez, másrészt mert a transzparencia hatalmas erő. Kockázatos, de bátor tett lenne, ha a fejlesztőcsapat kiállna, és azt mondaná: íme, erre költöttük a pénzeteket. Mi hiszünk abban, hogy ez így jó, de tessék, nézzétek meg minden részletét, és szóljatok hozzá, kíváncsiak vagyunk a véleményetekre. Fontos, hogy a nyílt forráskód, nem jelenti a demokratikus döntéshozatalt. A szakmai döntésekért valakiknek vállalniuk kell a felelősséget, nem lehet azt mondani, hogy a “tömeg megszavazta”. Viszont hiszek abban, hogy a jótanácsot meghallgatni illik, de megfogadni nem feltétlenül kell.</p>
<p><strong>Egy szakmai műhelyre bíznám a fejlesztést, nem egy multira.</strong> Miért? Még ha feltételezzük is, hogy ugyanaz a szakmai kompetencia megvan mindkét esetben, a motiváció lényegesen eltérő a két esetben. Nagyon sokat számít, hogy a projekt résztvevői pontosan mit akarnak elérni: egy jól működő, általuk is használt, a felhasználók elégedettségére törekvő rendszert akarnak készíteni, vagy más az elsődleges cél.</p>
<p><strong>Arcokat tennék a projekt mellé.</strong> Miért? Az összes sikeres projekt, amit eddig láttam, részben annak köszönheti az eredményeit, hogy valaki vagy valakik a saját gyereküknek érezték. Akinek ott a neve, az arca, az elérhetősége és a felelőssége, az teljesen máshogy áll a projekthez, mint egy sokadik, névtelen alvállalkozó. És természetesen a felhasználói oldal is máshogy áll hozzájuk. </p>
<p><strong>Iteratívvá tenném a fejlesztést.</strong> Miért? Ma már nagyon maradi megközelítés azt gondolni, hogy egy szoftver projekt az átadásakor készen van. Mindig jönnek visszajelzések, mindig találunk hibákat, mindig lehet javítani az alkalmazáson.</p>
<p><strong>Continuous integration, continuous delivery és automatizált tesztelés.</strong> Miért? Egyszerűen nélkülözhetetlen az iteratív fejlesztéshez, pont.</p>
<p><strong>Publikálnám a roadmapet. </strong>Miért? A roadmap mutatja, hogy mit szeretne még elérni a csapat, mi mindenre gondoltak még, és milyen irányba megy a fejlesztés. Bár minden roadmap változik, a felhasználói oldal számára mégis tervezhetőséget biztosít. Különösen, ha ez egy valóban élő dokumentum, aminek a változásait a fejlesztők el is magyarázzák (akár szóban, online meeting formájában).</p>
<h2>Operations</h2>
<p><strong>A kódot felhő szolgáltatónál, serverless alapokon futtatnám.</strong> Miért? A felhő mellett számos érv van, ennél a projektnél talán az a legfontosabb, hogy ne csak jól skálázódó és biztonságos legyen, de egyszerűen és olcsón üzemeltethető is. Erre ma szerintem a serverless a legjobb megoldás.</p>
<p><strong>Ops a BKK-nál.</strong> Miért? A rendszer a BKK ügyfeleinek személyes adatait kezeli, tehát a BKK-nak kell felelnie értük. Fontos az is, hogy a rendszer zavartalan működése a BKK számára a legfontosabb, ezért a közvetlen üzemeltetés a legpraktikusabb. Serverless környezetben a szolgáltató számos monitorozási lehetőséget és automatikus skálázást ad, miközben nagyon jól definiálható, hogy ki férhet hozzá a tárolt adatokhoz.</p>
<h2>Biztonság</h2>
<p><strong>Federált authentikáció.</strong> Miért? A felhasználók azonosítása nem kis feladat, ha nem kell megcsinálni, azzal csak nyer a projekt. Arról nem is beszélve, hogy nem egyszerű jól megcsinálni, komoly felelősség. Ráadásul, ha figyelembe vesszük a projekt célközönségét is, akkor az is elképzelhető, hogy egy magyarország.hu + Google + Facebook hármas szinte mindenkit lefed.</p>
<p><strong>Activity log a saját tevékenységeimről.</strong> Miért? A rendszerben megvan, hogy ki, mikor, milyen tranzakciókat hajtott végre. Annak a lehetősége, hogy a felhasználók a saját tevékenységeiket így visszakövethetik, számos félreértést eloszlat.</p>
<p><strong>GDPR megfelelőség.</strong> Miért? Nem csak azért, mert 2018. májusától úgyis kötelező, hanem azért is, mert egyszerűen tisztává teszi a képet: mindenki láthatja, hogy a rendszer milyen adatokat tárol róla és kérheti azok törlését.</p>
<p><strong>Security review, nyilvános dokumentációval.</strong> Miért? Szinte minden security review-n kiderül valami, amire a fejlesztők nem gondoltak, és amivel jobbá lehet tenni a rendszert. </p>
<p><strong>Béta teszt időszak.</strong> Miért? Nehéz elsőre jót alkotni, kellenek a korai visszajelzések, az életszerű adatok. Ez a teszt lehet akár zártkörű, meghívásos is, még az is jobb, mint azonnal nekifutni a nagyközönségnek.</p>
<p><strong>Bug bounty program.</strong> Miért? Erről az utóbbi időben sokat írtak, nem szeretném ragozni: tiszta és megéri.</p>
<p><strong>Felkutatnám a más országokban létező elektronikus jegy megoldásokat.</strong> Miért? Nem lepődnék meg, ha az derülne ki, hogy a létező megoldások sem garantálják, hogy az elektronikus jegyek biztosan nem hamisíthatóak. Lehet, hogy az is elég, ha nagyobb munka hamisítani, mint megvenni.</p>
<h2>Ráadás</h2>
<p><strong>Közzétenném az adatokat anonimizált formában.</strong> Miért? Ebben a rendszerben nagy mennyiségű adat gyűlik össze, a hasonló rendszerek kutatásával foglalkozó szakemberek számára ez nagyon hasznos és értékes adatforrás. Ennek az adatbázisnak az elemzésével a közlekedést meghatározó döntések születhetnek.</p>
<p>&#160;</p>
<p>Nektek ez így elég lenne, ilyen körülmények között ti bíznátok egy új rendszerben? Mit hagytam ki? </p>
<p>&#160;</p>
<p>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2017/07/27/hogyan-nyerhetne-vissza-a-bkk-a-bizalmamat/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2991</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>
	</item>
		<item>
		<title>Mi&#233;rt gyeng&#237;ted a jelszavamat?</title>
		<link>https://balassygyorgy.wordpress.com/2016/10/01/miert-gyengited-a-jelszavamat/</link>
					<comments>https://balassygyorgy.wordpress.com/2016/10/01/miert-gyengited-a-jelszavamat/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Sat, 01 Oct 2016 04:12:12 +0000</pubDate>
				<category><![CDATA[Biztonság]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2989</guid>

					<description><![CDATA[Nem tudom, ki hogy van vele, én nem szeretem sűrűn változtatni a jelszavaimat. Egyszerűen azért, mert macerás, viszi az időmet. A szolgáltatásokat használni szeretem, nem a beállításaikkal bíbelődni. Ennek ellenére – részben az utóbbi időszakban közzétett ellopott jelszó adatbázisoknak köszönhetően – rászoktattam magam, hogy a korábbiaknál gyakrabban cseréljem a jelszavaimat. Az ilyenkor szokásos ajánlás, hogy [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Nem tudom, ki hogy van vele, én nem <em>szeretem</em> sűrűn változtatni a jelszavaimat. Egyszerűen azért, mert macerás, viszi az időmet. A szolgáltatásokat használni szeretem, nem a beállításaikkal bíbelődni. Ennek ellenére – részben az utóbbi időszakban <a href="https://haveibeenpwned.com/" target="_blank">közzétett ellopott jelszó adatbázisoknak</a> köszönhetően – rászoktattam magam, hogy a korábbiaknál gyakrabban cseréljem a jelszavaimat. </p>
<p>Az ilyenkor szokásos ajánlás, hogy a jelszó legyen komplex, és ne használjuk több helyen. Számomra komplex az, ami elég hosszú, van benne kisbetű, nagybetű, szám és még valamilyen speciális karakter is. Csakhogy nem kevés olyan weboldal van, ami ezt nem engedi beállítani.</p>
<p>Íme az egyik:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/aegon.png"><img title="Aegon" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="Aegon" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/aegon_thumb.png?w=550&#038;h=250" width="550" height="250" /></a></p>
<p>Én ezt nem értem, miért nem használhatok ékezetes karaktereket? Csak nem varchar van az adatbázisban nvarchar helyett? Miért nem használhatok extra karaktereket, talán SQL injectiontől féltek? Gondoltam megkérdezem:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/aegon-twitter.png"><img title="Aegon-Twitter" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="Aegon-Twitter" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/aegon-twitter_thumb.png?w=560&#038;h=76" width="560" height="76" /></a></p>
<p>Valószínűleg rossz csatornán tettem, a Twitter fiókjukat évek óta nem frissítették, és a jelek szerint nem is olvassák. Vagy csak fittyet hánynak rá.</p>
<p>Persze nem ők az egyetlenek, a <a href="https://nemzetiutdij.hu/" target="_blank">Nemzeti Útdíjfizetési Szolgáltató</a> is hasonló cipőben jár:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/nemzetiutdij-twitter.png"><img title="NemzetiUtdij-Twitter" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="NemzetiUtdij-Twitter" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/nemzetiutdij-twitter_thumb.png?w=580&#038;h=379" width="580" height="379" /></a></p>
<p>Sőt! Ők nem mondják meg, hogy mit <em>nem tartalmazhat</em> a jelszó, egyszerűen csak “Nem megfelelő formátum” hibaüzenetet írnak ki. Twitteren nem találtam meg őket, de megírtam nekik a kérdésemet, és alig 17 nap alatt válaszoltak is egy 5 (!) oldalas levéllel, amiből a következőket tudtam meg:</p>
<blockquote>
<p><em>“Tárgy: Autópálya használati díj fizetésének ellenőrzése”</em></p>
</blockquote>
<p>Ajjaj, szerintem nem, de ezen lépjünk túl. Kaptam Iktatószámot is, úgy látszik azért komolyan vesznek.</p>
<blockquote>
<p><em>“Tisztelt Balássy György!        <br />Társaságunkhoz intézett megkeresését köszönjük.”</em></p>
</blockquote>
<p>Eddig minden rendben, piros pont a két-s-ipszilonért.</p>
<blockquote>
<p><em>“Tájékoztatjuk, hogy a jelszó csupán az angol abc kis- és nagybetűiből állhat, valamint számokból.”</em></p>
</blockquote>
<p>Ezen pattogok én is.</p>
<blockquote>
<p><em>“Fontos, hogy egységes karakterek legyenek megadhatóak, hiszen vannak külföldi ügyfeleink, akik nem feltétlen rendelkeznek magyar billentyűzettel, ezáltal pl.: ékezettel.        <br />A belépést és regisztrációt mindenki számára elérhetővé kell tennünk, ami az angol abc használatával valósul meg.”</em></p>
</blockquote>
<p>Álljunk meg egy szóra. Nem úgy van ez, hogy én választok magamnak jelszót, amit azután én a saját kezemmel, a saját billentyűzetemmel gépelek be? Amilyen karaktert nem tartalmaz a billentyűzetem, azt nyilván nem fogom és ezért nem is akarom beírni, de amit tartalmaz, azt nagyon szeretném. Orosz karakter például biztosan nem lesz a jelszavamban, de csak azért nem, mert én úgy akarom.</p>
<blockquote>
<p><em>“Továbbá attól, hogy nem adható meg ékezet és speciális karakter, még nem lesz gyengébb a jelszó.”</em></p>
</blockquote>
<p>Ez egyszerűen nem igaz (feltételezve, hogy ugyanazt értjük “gyengébb” alatt).&#160; Fejtegethetnénk itt most a problématér méretét, ki is próbálhatnánk L0phtCrackkel vagy John the Ripperrel, hogy kinek van igaza, de mivel a levél írójától sem várom el, hogy ilyen eszközökkel rendelkezzen, nézzünk inkább néhány kevésbé tudományos eszközt a <a href="https://www.google.hu/search?q=how+strong+is+my+password" target="_blank">Google találati listájáról</a>, amik megmondják, hogy szerintük a különböző jelszavakat mennyi ideig tart feltörni:</p>
<table cellspacing="0" cellpadding="2" border="0">
<tbody>
<tr>
<td>&#160;</td>
<td>
<p align="center">“almafa”</p>
</td>
<td>
<p align="center">“álmáfá”</p>
</td>
<td>
<p align="center">“álmáfá!”</p>
</td>
</tr>
<tr>
<td><a title="https://howsecureismypassword.net/" href="https://howsecureismypassword.net/">https://howsecureismypassword.net/</a></td>
<td>
<p align="center">8 ms</p>
</td>
<td>
<p align="center">1 perc</p>
</td>
<td>
<p align="center">5 óra</p>
</td>
</tr>
<tr>
<td><a title="https://password.kaspersky.com/" href="https://password.kaspersky.com/">https://password.kaspersky.com/</a></td>
<td>
<p align="center">9 perc</p>
</td>
<td>
<p align="center">3 óra</p>
</td>
<td>
<p align="center">2 nap</p>
</td>
</tr>
<tr>
<td><a title="http://www.passwordmeter.com/" href="http://www.passwordmeter.com/">http://www.passwordmeter.com/</a></td>
<td>
<p align="center">5% &#8211; Very Weak</p>
</td>
<td>
<p align="center">45% – Good</p>
</td>
<td>
<p align="center">60% – Strong</p>
</td>
</tr>
<tr>
<td><a title="http://random-ize.com/how-long-to-hack-pass/" href="http://random-ize.com/how-long-to-hack-pass/">http://random-ize.com/how-long-to-hack-pass/</a></td>
<td>
<p align="center">kevesebb, mint 1 másodperc</p>
</td>
<td>
<p align="center">13 másodperc</p>
</td>
<td>
<p align="center">12 perc 57 másodperc</p>
</td>
</tr>
<tr>
<td><a title="http://password-checker.online-domain-tools.com/" href="http://password-checker.online-domain-tools.com/">http://password-checker.online-domain-tools.com/</a></td>
<td>
<p align="center">3 másodperc</p>
</td>
<td>
<p align="center">1 nap</p>
</td>
<td>
<p align="center">2 év</p>
</td>
</tr>
</tbody>
</table>
<p>A számok pontosak? Valószínűleg nem, sőt még az arányaik sem azonosak. Az viszont tisztán látszik, hogy nem azonos nagyságrendben mozognak az egyes oszlopokban szereplő értékek.</p>
<blockquote>
<p><em>“Javasolhatjuk továbbá, hogy szíveskedjen nagybetűt használni, ez még inkább növeli a jelszó erősségét.”</em></p>
</blockquote>
<p>Mihez képest? Az angol abc kis- és nagybetűihez, valamint a számokhoz képest? Azt már használok, köszönöm.</p>
<p>A levél további 4 és fél oldala arról szól, hogy a fogyasztóvédelmi törvény szerint mit tehetek és hova fordulhatok, ha nem vagyok elégedett: ügyfélszolgálat, e-ügyfélszolgálat, levelezési cím, személyes ügyintézés, békéltető testület, bíróság stb. Egyébként ISO 9001, ISO 14001, BS OHSAS 18001, Certified IQNet Management System minősítésekről árulkodik még a levél.</p>
<p>A jó hír az, hogy itt legalább hosszú jelszót be tudok írni, amivel azért van lehetőségem elfogadható erősségű jelszót megadni, még ha nem is használhatom azt, amelyiket én szeretném. Nagyságrenddel rosszabbak azok az oldalak, ahol a jelszó hossza korlátozott.</p>
<p>Ezzel együtt az ilyen korlátozások bennem azt a gyanút ébresztik, hogy valami nem stimmel az oldal jelszó kezelése környékén, hiszen a hash algoritmusoknak nem szokott problémát okozni pár ékezet, aposztróf vagy felkiáltójel. </p>
<p>Mit tegyünk ezekkel a weboldalakkal?</p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bbcdf828-29a6-4d3c-973b-4cccc8ab6959" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/security" rel="tag">security</a>,<a href="http://technorati.com/tags/password" rel="tag">password</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2016/10/01/miert-gyengited-a-jelszavamat/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2989</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/aegon_thumb.png" medium="image">
			<media:title type="html">Aegon</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/aegon-twitter_thumb.png" medium="image">
			<media:title type="html">Aegon-Twitter</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/10/nemzetiutdij-twitter_thumb.png" medium="image">
			<media:title type="html">NemzetiUtdij-Twitter</media:title>
		</media:content>
	</item>
		<item>
		<title>&#214;tdimenzi&#243;s t&#225;rgyak nyomtat&#225;sa 3D nyomtat&#243;val</title>
		<link>https://balassygyorgy.wordpress.com/2016/04/01/otdimenzios-targyak-nyomtatasa-3d-nyomtatoval/</link>
					<comments>https://balassygyorgy.wordpress.com/2016/04/01/otdimenzios-targyak-nyomtatasa-3d-nyomtatoval/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Thu, 31 Mar 2016 22:01:00 +0000</pubDate>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[3D nyomtatás]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2981</guid>

					<description><![CDATA[Pontosan 5 évvel ez előtt ezen a napon vált online elérhetővé a British Journal of Psychology 49. évadának 1. száma, amelyben Lionel Penrose és fia, Roger Penrose Impossible Objects címmel publikált egy cikket olyan tárgyakról, amelyek szerintük nem létezhetnek. Ezek közül talán a Penrose-háromszög a legismertebb: A cikk eredetije jóval korábban, 1958-ban jelent meg, és [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Pontosan 5 évvel ez előtt ezen a napon vált online elérhetővé a <em><a href="http://onlinelibrary.wiley.com/doi/10.1111/j.2044-8295.1958.tb00634.x/abstract" target="_blank">British Journal of Psychology 49. évadának 1. száma</a></em>, amelyben <a href="https://en.wikipedia.org/wiki/Lionel_Penrose" target="_blank">Lionel Penrose</a> és fia, <a href="https://en.wikipedia.org/wiki/Roger_Penrose" target="_blank">Roger Penrose</a> <em>Impossible Objects</em> címmel publikált egy cikket olyan tárgyakról, amelyek szerintük nem létezhetnek. Ezek közül talán a Penrose-háromszög a legismertebb:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-penrose-triangle.png"><img title="5d-penrose-triangle" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-penrose-triangle" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-penrose-triangle_thumb.png?w=200&#038;h=174" width="200" height="174" /></a></p>
<p>A cikk eredetije jóval korábban, 1958-ban jelent meg, és az azóta eltelt több, mint 50 év alatt a tudomány sokat fejlődött. Mai tudásunkkal már kijelenthetjük, hogy Penrose-ék tévedtek, ezek a tárgyak igenis létezhetnek, a modern 3D nyomtatási technológia segítségével mi magunk is létrehozhatjuk őket.</p>
<p>Első lépésként egy modellre lesz szükségünk, amit ki tudunk nyomtatni. Itt jön az első probléma, ugyanis a hagyományos térbeli rajzoló alkalmazások maximum három dimenzióval tudnak megbirkózni, márpedig itt nekünk többre lesz szükségünk. Azaz felejtsük is el rögtön a SketchUpot, a Blendert, az AutoCADet, a Mayat, TInkercadet stb., hiszen ezek csak 3D-ben tudnak gondolkodni.</p>
<p>Az egyetlen lehetséges megoldás (legalábbis én másról nem tudok), hogy a modellünket kódban írjuk le, amire szerencsére létezik már bevált, és elterjedt megoldás, az <a href="http://www.openscad.org/" target="_blank">OpenSCAD</a>. Kiváló eszköz! Aki csak egy kicsit is vonzódik a programozáshoz, annak csak ajánlani tudom, hogy így írja le a 3D modelljeit. Mivel itt kóddal dolgozunk, nem korlátoz minket a háromdimenziós tér, bátran használhatunk olyan transzformációkat, amik további dimenziókba viszik a modellünket. Amire szükségünk lesz, az a <strong>to5d()</strong> metódus, ami az OpenSCAD CheatSheeten a Transformations csoportban található:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-openscad.png"><img title="5d-openscad" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-openscad" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-openscad_thumb.png?w=550&#038;h=316" width="550" height="316" /></a></p>
<p>Ha így sikerült elkészíteni az ötdimenziós modellünket, jöhet is a nyomtatás, aminek első lépése az STL modell szeletelése. Én ehhez leggyakrabban <a href="https://ultimaker.com/en/products/cura-software" target="_blank">Cura</a>t szoktam használni, mert számomra nagyon átlátható a felülete. Sajnos talán pont az átláthatóság miatt számos opció nincs kivezetve az alap felhasználói felületre, hanem csak az <strong>Expert config </strong>ablakban érhető el:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-expert-config.png"><img title="5d-cura-expert-config" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-cura-expert-config" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-expert-config_thumb.png?w=550&#038;h=612" width="550" height="612" /></a></p>
<p>Sőt, az ötdimenziós nyomtatás még ide sincs alapból kivezetve, de a figyelmesebb szemlélők észrevehetik, hogy míg a legtöbb szöveg egymástól függőlegesen egészséges távolságra van elhelyezve, addig a <strong>Black Magic</strong> kategóriában nagyon össze vannak zsúfolva a sorok. Ennek az az oka, hogy ha bepipáljuk az első két opciót, akkor megjelenik egy harmadik <strong>Enable more dimensions </strong>néven, pipáljuk be ezt is:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-black-magic-settings.png"><img title="5d-cura-black-magic-settings" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-cura-black-magic-settings" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-black-magic-settings_thumb.png?w=229&#038;h=94" width="229" height="94" /></a></p>
<p>Ez után már nem lesz gond az OpenSCAD-ből exportált 5D STL fájl megnyitása, amit azután a szokásos módon nyomtathatunk. Íme, nekem így sikerült a Penrose-háromszög:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-triangle.jpg"><img title="5d-triangle" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-triangle" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-triangle_thumb.jpg?w=550&#038;h=367" width="550" height="367" /></a></p>
<p>Íme egy másik fénykép, együtt egy 3D tárggyal:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-triangle-with-pencil.jpg"><img title="5d-triangle-with-pencil" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-triangle-with-pencil" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-triangle-with-pencil_thumb.jpg?w=550&#038;h=494" width="550" height="494" /></a></p>
<p>A képet a telefonommal, vaku nélkül készítettem, az élek egyenetlensége pedig a hobbi kategóriás nyomtatóm tökéletlenségének az eredménye.</p>
<p>Az első “lehetetlen” tárgyam létrehozása után következő lépésként a svéd <a href="https://en.wikipedia.org/wiki/Oscar_Reutersv%C3%A4rd" target="_blank">Oscar Reutersvärd</a> kockákból felépített háromszögét nyomtattam ki, amit ő eredetileg így képzelt el (Forrás: <a href="https://hu.wikipedia.org/wiki/F%C3%A1jl:Reutersv%C3%A4rd%E2%80%99s_triangle.svg" target="_blank">Wikipedia</a>):</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-reutersvard-triangle.png"><img title="5d-reutersvard-triangle" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-reutersvard-triangle" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-reutersvard-triangle_thumb.png?w=325&#038;h=282" width="325" height="282" /></a></p>
<p>Ennek az OpenSCAD modellje egyébként még egyszerűbb, hiszen csak kilenc darab kockát kell létrehozni. Miután ez megvan, megnyithatjuk a modellt Curaban:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-preview.png"><img title="5d-cura-preview" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-cura-preview" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-preview_thumb.png?w=550&#038;h=335" width="550" height="335" /></a></p>
<p>Az előnézeti képen jobb oldalon, alulról a második kockánál látszik egy világosabb sárga rész, amit nem tudok megmagyarázni. Szerencsére csak a kép renderelése hibás, a nyomtatás simán ment, íme az eredmény:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cubes.jpg"><img title="5d-cubes" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-cubes" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cubes_thumb.jpg?w=550&#038;h=401" width="550" height="401" /></a></p>
<p>A lehetetlen objektumok kapcsán eszembe jutott <a href="https://en.wikipedia.org/wiki/Ascending_and_Descending" target="_blank">M.C. Escher híres képe a végtelen lépcsőházról</a>, ezért elkészítettem annak is a modelljét, így mutat Curaban:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-stairs.png"><img title="5d-cura-stairs" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="5d-cura-stairs" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-stairs_thumb.png?w=550&#038;h=523" width="550" height="523" /></a></p>
<p>Amint elkészül vele a nyomtató, feltöltöm a fotót.</p>
<p>A fenti példákból is látszik, hogy a 3D nyomtató már nem csak háromdimenziós tárgyak nyomtatására használható, <strong>ne ragadjatok le a 3D-nél!</strong></p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0b45ab6c-f1f5-4dcb-ad82-bd56c4af80dc" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/3D+printing" rel="tag">3D printing</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2016/04/01/otdimenzios-targyak-nyomtatasa-3d-nyomtatoval/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2981</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-penrose-triangle_thumb.png" medium="image">
			<media:title type="html">5d-penrose-triangle</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-openscad_thumb.png" medium="image">
			<media:title type="html">5d-openscad</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-expert-config_thumb.png" medium="image">
			<media:title type="html">5d-cura-expert-config</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-black-magic-settings_thumb.png" medium="image">
			<media:title type="html">5d-cura-black-magic-settings</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-triangle_thumb.jpg" medium="image">
			<media:title type="html">5d-triangle</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-triangle-with-pencil_thumb.jpg" medium="image">
			<media:title type="html">5d-triangle-with-pencil</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-reutersvard-triangle_thumb.png" medium="image">
			<media:title type="html">5d-reutersvard-triangle</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-preview_thumb.png" medium="image">
			<media:title type="html">5d-cura-preview</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cubes_thumb.jpg" medium="image">
			<media:title type="html">5d-cubes</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/5d-cura-stairs_thumb.png" medium="image">
			<media:title type="html">5d-cura-stairs</media:title>
		</media:content>
	</item>
		<item>
		<title>3D nyomtat&#225;s: 15 modell, 15 tapasztalat</title>
		<link>https://balassygyorgy.wordpress.com/2016/03/17/3d-nyomtatas-15-modell-15-tapasztalat/</link>
					<comments>https://balassygyorgy.wordpress.com/2016/03/17/3d-nyomtatas-15-modell-15-tapasztalat/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Thu, 17 Mar 2016 22:44:27 +0000</pubDate>
				<category><![CDATA[3D nyomtatás]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2910</guid>

					<description><![CDATA[Egy hónappal ez előtt a LogMeIn jóvoltából szerencsés tulajdonosa lettem egy 3D nyomtatónak. Mivel a konkrét típus kiválasztása is az én feladatom volt, vásárlás előtt alaposan körbejártam a témát, így azzal a gondolattal állhattam neki a 3D nyomtatásnak, hogy tudomány ide vagy oda, a sikeres nyomtatáshoz leginkább bizony szerencse kell. A 2D és a 3D [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Egy hónappal ez előtt a <a href="http://logmein.hu/" target="_blank">LogMeIn</a> jóvoltából szerencsés tulajdonosa lettem egy 3D nyomtatónak. Mivel a konkrét típus kiválasztása is az én feladatom volt, vásárlás előtt alaposan körbejártam a témát, így azzal a gondolattal állhattam neki a 3D nyomtatásnak, hogy tudomány ide vagy oda, a sikeres nyomtatáshoz leginkább bizony szerencse kell. A 2D és a 3D nyomtatás egyszerűsége és megbízhatósága között ugyanis ég és föld a különbség. Minden nyomtatás tartogat magában nehézséget, meglepetést és tanulságot is. Rendszerint többet, mint amire számítanánk.</p>
<h2>1. “Okay”</h2>
<p>A gyártó útmutatásait követve elsőként azt a <a href="http://www.thingiverse.com/thing:10017" target="_blank">modellt</a> nyomtattam ki, ami a nyomtatóval érkezett:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/okay-hand.jpg"><img title="okay-hand" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="okay-hand" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/okay-hand_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>A dolog pofonegyszerűnek tűnt, mert a modellből készített GCODE fájl rajta volt a nyomtatóhoz kapott SD kártyán, nem kellett semmilyen paramétert állítani, gyakorlatilag csak a Print gombot kellett megnyomni. Gondoltam ha a nyomtató hardverileg rendben van és jól van betöltve a nyomtatószál, akkor ennek sikerülnie kell. </p>
<p>“Szinte” sikerült is, ez lett belőle:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/okay-hand-printed.jpg"><img title="okay-hand-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="okay-hand-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/okay-hand-printed_thumb.jpg?w=550&#038;h=398" width="550" height="398" /></a></p>
<p>Hát majdnem ugyanaz. Történt ugyanis, hogy nagyjából félórányi nyomtatás után egy finom pattanást követően elmozdult a tárgy a tárgyasztalon, onnan kezdve pedig kuka az egész.</p>
<p>Tanulság:</p>
<ul>
<li>A tárgyasztal tapadása az egyik legfontosabb tényező a sikeres nyomtatáshoz, mégis mindenki küzd ezzel. Vannak házi módszerek, drága felületek, de igazán 100%-os, egyszerűen használható, jól tapadó, de könnyen eltávolítható megoldás nincs (legalábbis én nem tudok róla). </li>
<li>A nyomtatóval együtt vásároltam a tárgyasztalra egy üveglapot, hogy biztosan sík legyen a felület, a szintezés ugyanis a másik kritikus tényező a sikeres nyomtatáshoz. Elméletileg ez a tapadáson is segíthet, ám azt nem szabad elfelejteni, hogy lefogja egy kicsit a tárgyasztal fűtését. Az én nyomtatómhoz üveglap nélkül másoknak bevált a 60°C-os tárgyasztal, nekem viszont biztos több kell az üveglap miatt. A későbbiekben 70°C-os tárgyasztallal nyomtattam, és jobbak lettek az eredmények. </li>
</ul>
<h2>2. Kalibrációs kocka</h2>
<p>Második kísérletként a nyomtató precizitását próbáltam ki egy sima <a href="http://www.thingiverse.com/thing:953162" target="_blank">kalibrációs kocka</a> segítségével, ami ilyen bonyolult:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/calibration-cube.jpg"><img title="calibration-cube" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="calibration-cube" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/calibration-cube_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Egy pontosan 20×20×20 milliméteres kockát akartam nyomtatni, ami nem tűnik nehéz feladatnak. A nyomtatás igen jónak indult, ám végül csak ez lett belőle:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/calibration-cube-printed.jpg"><img title="calibration-cube-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="calibration-cube-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/calibration-cube-printed_thumb.jpg?w=550&#038;h=396" width="550" height="396" /></a></p>
<p>Az ok ugyanaz: a tárgy elmozdult a tárgyasztalon.</p>
<p>Ezzel együtt a nyomtatás nem volt teljesen hiábavaló, mert ebből is tanultam két dolgot:</p>
<ul>
<li>Ez a nyomtató meglepően pontos. Hagyományos kézi sublerrel mérve a kocka alapjai 20,0 × 20,0 milliméteresek. A második tizedesjegynél biztosan van eltérés, de az már nekem belefér. </li>
<li>Nem élhetek hajlakk nélkül! </li>
</ul>
<h2>3. Kábelvezető</h2>
<p>A 3D nyomtató tulajdonosok előszeretettel nyomtatnak 3D nyomtató alkatrészeket. Vagy azért, hogy tuningolják a nyomtatójukat, vagy azért, hogy valami problémát küszöböljenek ki. Az én esetemben az utóbbi fordult elő, a mozgó tárgyasztalhoz vezető kábel ugyanis előszeretettel akadt be a nyomtató vázának egyik merev sarkába. Persze nem én voltam az első, aki ezt tapasztalta, van már rá <a href="http://www.thingiverse.com/thing:1218943" target="_blank">megoldás a Thingiverse</a>-en:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cable-protector.png"><img title="cable-protector" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="cable-protector" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cable-protector_thumb.png?w=451&#038;h=372" width="451" height="372" /></a></p>
<p>Letöltöttem, és alig pár perc alatt sikeresen ki is nyomtattam:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cable-protector-printed.jpg"><img title="cable-protector-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="cable-protector-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cable-protector-printed_thumb.jpg?w=550&#038;h=411" width="550" height="411" /></a></p>
<p>Ezen a képen, ilyen brutálisan felnagyítva (az eredeti kb. 3 × 1 cm) nem tűnik valami szépnek, a valóságban azonban egészen rendben van. Tökéletesen illeszkedik, és ami még fontosabb, tökéletesen működik is.</p>
<p>Ez volt az első sikeres nyomtatásom, és persze ebből is tanultam:</p>
<ul>
<li>A 3D nyomtatással valóban meg lehet oldani valós problémákat, viszonylag gyorsan. Persze ezt a modellt valakinek el kellett készítenie, de már rengeteg modell érhető el a neten, és nagyon jó esély van rá, hogy a te problémádba más már belefutott, és rajzolt hozzá egy modellt. Lelőhelyekből nekem legjobban a <a href="http://www.thingiverse.com/" target="_blank">Thingiverse</a> jött be, de sokan a <a href="https://www.youmagine.com/" target="_blank">YouMagine</a>-re esküsznek, míg mások az <a href="http://www.instructables.com/" target="_blank">Instructablest</a> preferálják. Persze rengeteg ilyen <a href="http://www.hongkiat.com/blog/download-free-stl-3d-models/" target="_blank">gyűjtemény oldal</a> van. </li>
<li>A sikeres nyomtatás egyik oka, hogy végre nem volt gondom a tárgyasztal tapadásával. Egyrészt mert 70°C-ra fűtöttem, másrészt mert követve az egyik legjobb népi praktikát, hajlakkot fújtam rá nyomtatás előtt. Igen, kutya közönséges hajlakkot. Soha nem gondoltam volna korábban, de Garnier Fructis Extra Strong hajlakk van az asztalomon, és nem csak, hogy minden nap használom, de nem tudok nélküle élni! (Kérem ezt a mondatot senki ne ragadja ki a környezetéből.) Annyira jól működik, hogy meleg tárgyasztalról le se tudom vésni az eredményt, meg kell várnom, amíg lehűl a nyomtató, akkor viszont egy jól irányzott pofonnal simán lejön. </li>
</ul>
<p>Na, itt tart ma a 3D nyomtatás: hajlakk és pofon kell a sikerhez (vö. a 2D nyomtatás mennyire sima ügy ehhez képest). </p>
<h2>4. Szintező csavar</h2>
<p>Megörülve a sikeres nyomtatásnak, és megmámorosodva a nyomtató tuning “képességeimtől”, következőként <a href="http://www.thingiverse.com/thing:874155" target="_blank">ezt a modellt</a> nyomtattam ki:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/thumbwheel.jpg"><img title="thumbwheel" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="thumbwheel" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/thumbwheel_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Ilyen lett az eredmény:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/thumbwheel-printed.jpg"><img title="thumbwheel-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="thumbwheel-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/thumbwheel-printed_thumb.jpg?w=550&#038;h=344" width="550" height="344" /></a></p>
<p>Ez egy kézzel tekergethető csavar anya, ami jelentősen egyszerűsítheti a tárgyasztal szintezését, különösen, ha önzáró anya kerül bele.</p>
<p>A nyomtatás a korábbiak alapján már sima ügy volt, de emlékezetes:</p>
<ul>
<li>Azt hittem, szét fog esni a nyomtató, annyira rázkódott a modell szélén lévő apró kiszögellések nyomtatása közben. Elsőre nagyon meglepett, de azóta más modellnél is találkoztam vele, és eddig minden rendben van. </li>
<li>Az ennyire apró részletek nem lesznek tökéletesek, hiába állítom 0.1 mm-re a rétegvastagságot. Itt főként a felületből “vésett” számokra és rovátkákra gondolok, amiket a nyomtató nem kimar, hanem a következő réteggel körberajzol. Bár olvashatóan látszanak a számok és a jelölések, a számok vonalának a vastagsága nem egyenletes – de persze ez csak közelről megnézve látszik. </li>
<li>A modellnek a tárgyasztallal érintkező része igen minimálisan, de kicsit “szétfolyik”. </li>
<li>Ilyen rücskös szélű modellnél nem célszerű karimát (brim) nyomtatni, mert nem lehet szépen leválasztani. </li>
<li>A fém csavar tökéletesen illeszkedik a műanyagba, pontosabban alig tudtam belepasszírozni, de utána nagyon jól szorul. Ehhez biztosan a tervező kitartó kísérletezése kellett, de a végeredmény nagyon jó. Mindenféle ragasztó nélkül jól kombinálható a műanyag és a fém. </li>
</ul>
<h2>5. Lehetetlen fecskefarok csapolás</h2>
<p>Ennyi tisztán praktikus nyomtatás után a választásom egy <a href="http://www.thingiverse.com/thing:1345120" target="_blank">szórakoztató modellre</a> esett, ami a hagyományos fecskefarok csapolásnak egy lehetetlennek tűnő változata:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible-dovetail.jpg"><img title="impossible-dovetail" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="impossible-dovetail" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible-dovetail_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Nekem nem volt bátorságom nyomtatószálat cserélni, ezért egyféle anyagból nyomtattam ki a modell két felét:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible_dovetail_parts.jpg"><img title="impossible_dovetail_parts" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="impossible_dovetail_parts" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible_dovetail_parts_thumb.jpg?w=550&#038;h=383" width="550" height="383" /></a></p>
<p>Amik tökéletesen illeszkednek:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible_dovetail_assembled.jpg"><img title="impossible_dovetail_assembled" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="impossible_dovetail_assembled" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible_dovetail_assembled_thumb.jpg?w=550&#038;h=386" width="550" height="386" /></a></p>
<p>Elégedett vagyok az eredménnyel, pontos, és pont annyira laza, amennyire kell.</p>
<p>De:</p>
<ul>
<li>Majdnem letörtem a modell egyik sarkát, miközben próbáltam lefeszegetni a tárgyasztalról, annyira jól fogta a hajlakk. Azóta nem feszegetek semmit, inkább várok, amíg lehűl a tárgyasztal. </li>
<li>A felső képen látszik, hogy nem tökéletes a tárgy teteje. Úgy állítottam be a szeletelő programot, hogy 10% legyen a modell kitöltése, azaz ne legyen tömör, mert itt nem szükséges akkora szilárdság, viszont így gyorsabb lesz a nyomtatás, és kevesebb nyomtatószálat használ. Arra viszont nem gondoltam, hogy ha az üreges modellt nem fedem be elég vízszintes réteggel, akkor ott be lehet látni, nem lesz tökéletes a fedés. Ezt okozhatja az, hogy a nyomtatófej nem nyom elég nyomtatószálat (under extrusion), aminek a módosítása viszont a modell minden részére kihatna, ezért inkább azt a megoldást választottam, hogy a következő nyomtatásoknál emeltem az alsó és felső rétegek számát (Bottom/Top thickness beállítás Cura-ban). </li>
</ul>
<h2>6. Microsoft Band töltő</h2>
<p>Ennyire kísérletezés után ideje volt valami mindennapi használati tárgyat is nyomtatni, így rögtön felcsillant a szemem, amikor megláttam <a href="http://www.thingiverse.com/thing:1136302" target="_blank">ezt a modellt</a> (a képet a <a href="https://www.microsoft.com/en-us/store/apps/3d-builder/9wzdncrfj3t6" target="_blank">Microsoft 3D Builder</a>éből fotóztam, ami egy egészen jó program):</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/band-stand.png"><img title="band-stand" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-stand" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/band-stand_thumb.png?w=550&#038;h=420" width="550" height="420" /></a></p>
<p>Ez egy dokkoló, amibe beleteheti az ember tölteni a Microsoft Band típusú okosóráját. Mivel a modell hátulja tartalmaz közvetlen alátámasztás nélküli vízszintes felületeket, ezért úgy döntöttem, hogy támaszanyagot fogok nyomtatni. Ilyen lett az eredmény:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/band-stand-printed.jpg"><img title="band-stand-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-stand-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/band-stand-printed_thumb.jpg?w=550&#038;h=350" width="550" height="350" /></a></p>
<p>Tanulságok:</p>
<ul>
<li>A támaszanyag lutri. Lehet, hogy nem is kellene (ennél a modellnél talán elhagyható lett volna), de ez sajnos csak nyomtatás után derül ki. Modelltől függően néha nagyon egyszerű eltávolítani, néha viszont nagyon macerás. Itt például nekem ezt az üreget teljesen meg kellett tisztítanom, hogy be tudja fogadni a töltő csatlakozóját, és ez a kicsi, íves felületek miatt nagyon nehéz volt, majdnem addig tartott, mint a nyomtatás. </li>
<li>A ferde felületek lépcsősek lesznek, még akkor is, ha nagyon kicsi rétegvastagsággal nyomtat az ember. Ezt lehet csiszolni, ABS-nél acetonozni, vagy csak simán el lehet viselni. Indusztriális dizájn. Ki tudja, a látszó beton és a dekor rozsda után lehet, hogy ez lesz a következő trend. A lényeg, hogy számítani kell rá. Ennél a modellnél elvileg meg lehet azt tenni, hogy elforgatom úgy, hogy ne az alja, hanem a teteje legyen párhuzamos a tárgyasztallal, így az aljára kerülnek a lépcsők (persze akkor sok támaszanyag kell alulra). </li>
</ul>
<h2>7. Gombfoci</h2>
<p>Erre azért vagyok büszke, mert ez volt az első, amikor nem csak letöltöttem valamit, hanem nulláról megalkottam, kinyomtattam, majd <a href="http://www.thingiverse.com/thing:1359651" target="_blank">fel is töltöttem</a>, hogy mások is használhassák. Ez az ultrabonyolult test egy gombfoci játékos:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/button-soccer.jpg"><img title="button-soccer" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="button-soccer" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/button-soccer_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>A 3D modellt SketchUpban rajzoltam, amit már <a href="https://3dwarehouse.sketchup.com/by/balassy" target="_blank">korábban is használtam asztalosmunkák modellezésére</a>, mert pontosan lehet vele rajzolni (megadhatók a méretek). Letölthető hozzá egy <a href="https://extensions.sketchup.com/en/content/sketchup-stl" target="_blank">SketchUp STL nevű plugin</a>, ami képes a modellből STL fájlt generálni, amit már a 3D nyomtatós szeletelő programok ismernek, így a tervezéstől a nyomtatásig végigvihető a folyamat, és végül a folyamat minden fájlját fel lehet tölteni a Thingiverse-re.</p>
<p>Persze ez sem ment simán:</p>
<ul>
<li>A SketchUp hátránya, hogy nagyon kis méreteknél néha bénázik. Ezt a programot eredetileg építészeknek tervezték, márpedig ők nagyon ritkán akarnak tizedmilliméteres pontosságot. Ennél a modellnél az lett volna az egyik feladat, hogy lekerekítsem a felső sarkot kb. fél milliméterrel, és bár ezt egy csiszolópapírral sokkal egyszerűbb megcsinálni, úgy gondoltam, hogy belerajzolom a modellbe, hogy dokumentálva legyen. Ezen a feladaton a SketchUp Follow Me eszköze látványosan elbukott, szétesett a modell. Fórumok szerint ilyenkor a bevált gyakorlat a modell ezerszeres felnagyítása, majd kicsinyítése. </li>
<li>Nyomtatás után a belső méretek, a lyukak némileg kisebbek lesznek. Ez ismert tény a 3D nyomtatás világában, olvastam már róla, hogy talán orvosolni is lehet, itt nekem annyira nem volt kritikus, hogy a belső és a külső méret is pontos legyen. </li>
<li>Rajzolni nagyon szeretek SketchUpban, de egy modellt módosítani nagyon nem, mert nehézkesnek találom. Bár már korábban is belefutottam az <a href="http://www.openscad.org/" target="_blank">OpenSCAD</a>be, <a href="http://www.thingiverse.com/suf/about" target="_blank">Gömöri Zoli</a> felhívta rá a figyelmemet, hogy lehet, hogy jobban járok, ha rajzolgatás helyett inkább programkóddal írom le a modellt. És valóban, rászánva egy fél napot a tanulásra, mára sok esetben az OpenSCAD tűnik jobb megközelítésnek az egyszerű módosíthatósága miatt. A <a href="http://www.thingiverse.com/customizable" target="_blank">modellek testreszabhatósága a Thingiverse</a>-en pedig briliáns ötlet! </li>
</ul>
<p>Időközben készítettem még egy gombfoci modellt, akinek kapusra van szüksége, <a href="http://www.thingiverse.com/thing:1416709" target="_blank">innen tudja letölteni</a>.</p>
<h2>8. Nyomtatószál csipesz</h2>
<p>Van 5 percem, mit is nyomtassak? Biszbaszt:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/filament-clip.jpg"><img title="filament-clip" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="filament-clip" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/filament-clip_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Persze meg tudom magyarázni: olvastam róla, hogy probléma lehet abból, ha a nyomtatószál fellazul a tekercsen, ez a kis mütyür pedig ezt segít elkerülni. Kinyomtatva ilyen lett:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/filement-clip-printed.jpg"><img title="filement-clip-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="filement-clip-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/filement-clip-printed_thumb.jpg?w=550&#038;h=350" width="550" height="350" /></a></p>
<p>A végeredmény jó, működik, az anyag meglepően rugalmas.</p>
<p>A tanulság pedig az, hogy a képen is látható karima (brim) nem jó ilyen kicsi dolgokhoz, a tutaj (raft) sokkal könnyebben és szebben leszedhető.</p>
<h2>9. Billog</h2>
<p>A 3D nyomtató tökéletesen alkalmas felesleges dolgok nyomtatására, például készíthetünk vele Valentin napra <a href="http://www.thingiverse.com/thing:1342104" target="_blank">nyomdát</a>, amivel a pirítósunkat billogozhatjuk meg:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/toast.jpg"><img title="toast" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="toast" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/toast_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Ezt viszonylag nagy, 0.3 mm-es rétegvastagsággal nyomtattam, arra számítva, hogy majd igen csúnya lesz (ami ennél a felhasználásnál belefér), de végül egészen jó lett az eredmény. Ez valószínűleg a modell egyszerűségének köszönhető, hiszen nincsenek benne hidak és ferde felületek.</p>
<h2>10. Raspberry Pi doboz</h2>
<p>A Thingiverse-en rengeteg dizájnt találhatunk kedvenc Raspberry Pi-nk becsomagolására, én végül <a href="http://www.thingiverse.com/thing:922740" target="_blank">ezt</a> választottam a szerelhetősége és a felszerelhetősége miatt:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/raspberry-pi-case.jpg"><img title="raspberry-pi-case" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="raspberry-pi-case" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/raspberry-pi-case_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>A modell több részből áll, külön kell nyomtatni az alját és a tetejét. Bele lehet csavarozni a panelt, és végül össze lehet csavarozni a két oldalt.</p>
<p>A “projekt” végére itt is okosabb lettem:</p>
<ul>
<li>Rettenetesen sokáig tartott a nyomtatás, mivel gyakorlatilag tömör lett a végeredmény. Nem tanulmányoztam alaposan a modellt nyomtatás előtt, viszont a korábbiak alapján elég sok vízszintes réteget állítottam be. A nagy, egybefüggő vízszintes felületek nyomtatása sok időt vett igénybe. Simán lehetett volna kevesebb vízszintes réteget nyomtatni, ez a modell elbírta volna. </li>
<li>Amit viszont alig viselt el, az a falak feszegetése. Amikor ugyanis le akartam szedni az eredményt a tárgyasztalról, persze a függőlegesen álló falaknál fogtam meg, és ott kezdtem ráncigálni, ami kis híján a rétegek szétválásához vezetett. Az ilyen vékony falaknál erre vigyázni kell. </li>
<li>Legközelebb alaposan megnézem, hogy a modell tervezője milyen csavarokat ajánl. Ha nem metrikusakat, akkor inkább keresek másik modellt, mert nagyon nehéz az inchben megadott méretekhez hasonlót találni. </li>
</ul>
<h2>11. Malac</h2>
<p><a href="http://www.thingiverse.com/thing:1275429" target="_blank">Ez az ülő röfi</a> ajándékba készült:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/piggy.jpg"><img title="piggy" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="piggy" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/piggy_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Ilyen lett kb. 35 percnyi nyomtatás után, 0.3 mm rétegvastagsággal:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/piggy-printed.jpg"><img title="piggy-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="piggy-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/piggy-printed_thumb.jpg?w=550&#038;h=421" width="550" height="421" /></a></p>
<p>Ezen a fotón megint csúnyábbnak tűnik az eredmény, mint a valóságban, hiszen ott sokkal kisebb a tárgy. A rétegek nem lettek ennyire zavaróak, bár az igaz, hogy a 0.3 mm ilyen íves tárgynál már túl sok. A malac elején látható bajusz és szakáll támaszanyag akart lenni az orra alá, de egyrészt nem sikerült rendesen kinyomtatni, másrészt feleslegesnek is bizonyult.</p>
<h2>12. Imbuszkulcs tartó</h2>
<p>A következő kísérlet majdnem teljes kudarc lett. <a href="http://www.thingiverse.com/thing:1320526" target="_blank">Ezt a modellt</a> akartam kinyomtatni, ami egy praktikus tároló imbuszkulcsok számára:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/hex-key-holder.jpg"><img title="hex-key-holder" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="hex-key-holder" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/hex-key-holder_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>A korábbiakból tanulva itt már óvatosabb voltam, és alaposabban szemügyre vettem a modellt nyomtatás előtt. </p>
<p>Bár a <a href="http://www.thingiverse.com/thing:1320526" target="_blank">Thingiverse-en számtalan fotó</a> bizonyítja, hogy ez egy használható modell, amikor én Cura-ban megnyitottam, olyan aprónak tűnt, hogy rögtön gyanússá vált. A hozzászólásokat elolvasva hamar kiderült, hogy ez másnak is probléma, és az oka az, hogy a szerző amerikai mértékrendszerben dolgozott, azaz a modellben a méretek nem milliméterben, hanem inchben vannak. Szerencsére ezt könnyű orvosolni, a szeletelő programban simán felnagyítottam a modellt 25.4-szeresére, és máris jónak látszott a méret.</p>
<p>Ezután azonban tovább vizsgálódtam, és a rétegek ellenőrzésekor kiderült, hogy a Cura a modellen lévő lyukakból mindössze hármat vett észre. Betöltöttem a modellt más szeletelő programba, ám ott is hasonló eredményt kaptam. Mivel a fotók nagyon meggyőzőek voltak az oldalon, egy kicsit bíztam benne, hogy csak a szeletelő programok megjelenítése hibás, ezért próbaként kinyomtattam pár réteget, és így nagyon hamar egyértelművé vált, hogy nem a megjelenítéssel van gond, hanem a modellel.</p>
<p>Ez időnként előfordul, és szerencsére vannak javítási lehetőségek. A Microsoft 3D Builder programja megnyitás után automatikusan felkínálja a modell javítását, de használhatjuk a Netfabb által készített, és Microsoft Azure-ban futó <a href="https://modelrepair.azurewebsites.net/" target="_blank">Model Repair Service</a>-t is. Sajnos ebben az esetben egyik sem segített, a modell hibás maradt, így nem maradt más lehetőségem, mint hogy szomorúan lemondtam a nyomtatásról.</p>
<p>Előtte azonban még megírtam a tapasztalataimat egy kommentben a szerzőnek, illetve a többi Thingiverse felhasználónak, hogy másnak ne kelljen ugyanezt az utat végigküzdenie. Alig telt el pár nap, és jött az <a href="http://www.thingiverse.com/thing:1320526/#comment-828394" target="_blank">alábbi válasz</a> a szerzőtől:</p>
<blockquote>
<p><em>“Fixed the issues many of you were speaking about. I was using a slicer software with a repair feature built in, so I was overlooking the issue. Everything should be good now. Uploaded the print in MM too. Thanks for all the feedback. Let me know if you have any more issues. ”</em></p>
</blockquote>
<p>Azaz hallgatva a visszajelzésekre utánajárt a problémának, kijavította, és feltette a modellt olyan formában, hogy az többeknek hasznos legyen. Az is kiderül a hozzászólásból, hogy a szerzőnek azért nem tűnt fel a hibás modell, mert az ő szeletelő programja automatikusan javította azt. Tehát neki nem volt semmi gondja, hagyhatta volna az egészet úgy, ahogy neki jó, de ő mégis vette a fáradságot, és feltöltötte a javított verziót is, mert mások csak azt tudják használni. Ez a hozzáállás nagyon tetszik!</p>
<p>Ismét felcsillant a remény, hogy ezt is sikerül kinyomtatni!</p>
<h2>13. Menő Manó</h2>
<p>Gyerekkorom nagy kedvence, az olasz Osvaldo Cavandoli alkotása; amikor megláttam, nem tudtam ellenállni neki:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/la-linea.jpg"><img title="la-linea" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="la-linea" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/la-linea_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Lekicsinyítettem a modellt, és alig 20 perc alatt el is készült:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/la-linea-printed.jpg"><img title="la-linea-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="la-linea-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/la-linea-printed_thumb.jpg?w=550&#038;h=354" width="550" height="354" /></a></p>
<p>Ennek a nyomtatásnak két tanulsága volt:</p>
<ul>
<li>A PLA ilyen méretekben meglepően rugalmas. </li>
<li>Aki ezt meglátja az asztalomon, rögtön beleszeret a 3D nyomtatásba <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </li>
</ul>
<h2>14. Villáskulcs tartó</h2>
<p>Ez a nyomtatás is a másik hobbimhoz kapcsolódik, ugyanis némi bosszankodás után arra jutottam, hogy kellene egy normális tartó a villáskulcsaim számára, és ehhez találtam <a href="http://www.thingiverse.com/thing:1288463" target="_blank">ezt a modellt</a>:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/wrench-organizer-printed.jpg"><img title="wrench-organizer-printed" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="wrench-organizer-printed" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/wrench-organizer-printed_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>Így néz ki a modell:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/wrench-organizer.jpg"><img title="wrench-organizer" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="wrench-organizer" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/wrench-organizer_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>A nyomtatás gyönyörűen sikerült, minden részletével meg voltam elégedve. Aztán belepróbáltam a legnagyobb villáskulcsomat a legnagyobb helyre, és csodák csodája szépen bele is passzolt. Sőt, igazából még lötyögött is egy kicsit, ezért áttettem a mellette lévő helyre. Na ezt nem kellett volna. Ott ugyanis már feszült, és egy pillanat alatt el is tört a modell. A legkisebb erőltetéstől kitört a fésű foga. </p>
<p>A dolog nyitja igen egyszerű. Úgy nyomtattam a tárgyat, ahogy a modellben szerepelt, nem forgattam semerre. A 3D nyomtatásnál a rétegek közötti tapadás viszonylag gyenge, azaz ha van megfelelő erő, akkor a rétegek szétválaszthatóak. Ennél a modellnél a vízszintes alap és a függőleges “fogak” találkozásánál nagyon kicsi a felület (különösen, ha nem tömör a nyomtatás), és ahhoz képest nagyon nagy az erőkar. Mindenféle erőlködés nélkül, ujjal ki lehet törögetni a fogakat.</p>
<p>Így, ebben a formában ez a tárgy nagyon szép, ám teljesen használhatatlan lett. Amint lesz egy kis időm, újra meg fogom próbálni, ám ezúttal elforgatom majd a modellt, és az oldalára állítva fogom nyomtatni.</p>
<h2>15. Könyök</h2>
<p>Egy másik házi projekt kapcsán felmerült az igény, hogy össze kellene tudni kapcsolni három darab 16 milliméteres fém csövet, például műanyag sarkokkal, ezért megterveztem hozzá <a href="http://www.thingiverse.com/thing:1385580" target="_blank">ezt a modellt</a>:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/elbow.jpg"><img title="elbow" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="elbow" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/elbow_thumb.jpg?w=550&#038;h=413" width="550" height="413" /></a></p>
<p>A modell SketchUpban készült, és már ott sokat tanultam azzal kapcsolatban, hogy egy hengert milyen nehéz jó helyen megfogni, és a térben pontosan forgatni.</p>
<p>Számítottam rá, hogy a hengerek belső átmérője a nyomtatás után kicsit kisebb lesz, mint a modellben, ezért különböző méretű kicsi hengerek próba nyomtatásával kísérleteztem ki a megfelelő méretet. Ez a módszer bevált, merem ajánlani. Azt azonban elfelejtettem, hogy a modell sajátosságaiból adódóan a háromféle lyuk biztosan nem lesz azonos méretű. A függőlegesen álló hengert nagyon pontosan tudja nyomtatni a gép, hiszen az rétegenként egy fekvő kört jelent, ami nem probléma. Nem úgy a másik két hengert, ott ugyanis sok, pontosan pozícionált rétegnek kell kiadnia a henger álló kör metszetét, ami sikerülhet jól, de szinte biztosan nem lesz tökéletes. És akkor még arról nem is beszéltem, hogy a behajló részeken valamennyi anyag lógás is várható. Magyarul aki lyukakat ilyen helyzetben nyomtat, az számítson torzulásra.</p>
<p>Ráadásul ennél a modellnél is előjön a rétegek közötti tapadás problémája. Ha a vízszintes lyukak mérete nem tökéletes (például anyag belógás miatt), és valaki mégis beleerőlteti az eredetileg pontosan illeszkedő csövet, akkor előfordulhat, hogy ez a sarok idom eltörik, pontosabban a rétegek mentén szétnyílik. (Lehet tippelni, honnan tudom.)</p>
<h2>+1 Sarok profil</h2>
<p>Ezt a formát “megrendelésre” nyomtattam:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-1.png"><img title="Cura-fail-1" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="Cura-fail-1" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-1_thumb.png?w=255&#038;h=293" width="255" height="293" /></a></p>
<p>Látszólag igen egyszerű modell, de itt is előjön ám az előbb említett pontos lyuk nyomtatás probléma. Azonban ami miatt idevettem a tapasztalatok közé, az nem is ez, hanem hogy még ez a nagyon egyszerű, nagyon sík modell is képes elromlani. Ez lett belőle ugyanis Cura-ban:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-2.png"><img title="Cura-fail-2" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="Cura-fail-2" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-2_thumb.png?w=400&#038;h=380" width="400" height="380" /></a></p>
<p>Észreveszed-e a hibát?</p>
<p>Igen, ott a bal oldali függőleges részen van egy kis kitüremkedés. Nem sok, de az a fél milliméter pont elég ahhoz, hogy az a felület ne legyen sík, és esetleg ahhoz is pont elég, hogy túl nagy legyen a kinyomtatott tárgy. Fogalmam sincs, hogy az a dudor minek köszönhető, a Cura egyszerűen odateszi, szerinte az oda kell. A Slic3r jelen esetben jobb munkát végez:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-3.png"><img title="Cura-fail-3" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="Cura-fail-3" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-3_thumb.png?w=400&#038;h=391" width="400" height="391" /></a></p>
<p>Alaposan meg kell tehát vizsgálni a szeletelés eredményét, még nyomtatás előtt, mert a legváratlanabb helyeken bukkanhatnak fel hibát.</p>
<p>&#160;</p>
<p>A 3D nyomtatás érdekes dolog, nincs két egyforma feladat, és mindegyikből tanul az ember. Néha nagyon bosszantó, hogy valami nem sikerül se elsőre, se másodikra, az viszont remek érzés, amikor kezedbe veheted azt, ami az előbb még csak a képernyőn létezett. </p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9a33a87e-77fc-40db-b4a4-24c41681b29b" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/3D+printing" rel="tag">3D printing</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2016/03/17/3d-nyomtatas-15-modell-15-tapasztalat/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2910</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/okay-hand_thumb.jpg" medium="image">
			<media:title type="html">okay-hand</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/okay-hand-printed_thumb.jpg" medium="image">
			<media:title type="html">okay-hand-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/calibration-cube_thumb.jpg" medium="image">
			<media:title type="html">calibration-cube</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/calibration-cube-printed_thumb.jpg" medium="image">
			<media:title type="html">calibration-cube-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cable-protector_thumb.png" medium="image">
			<media:title type="html">cable-protector</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cable-protector-printed_thumb.jpg" medium="image">
			<media:title type="html">cable-protector-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/thumbwheel_thumb.jpg" medium="image">
			<media:title type="html">thumbwheel</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/thumbwheel-printed_thumb.jpg" medium="image">
			<media:title type="html">thumbwheel-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible-dovetail_thumb.jpg" medium="image">
			<media:title type="html">impossible-dovetail</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible_dovetail_parts_thumb.jpg" medium="image">
			<media:title type="html">impossible_dovetail_parts</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/impossible_dovetail_assembled_thumb.jpg" medium="image">
			<media:title type="html">impossible_dovetail_assembled</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/band-stand_thumb.png" medium="image">
			<media:title type="html">band-stand</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/band-stand-printed_thumb.jpg" medium="image">
			<media:title type="html">band-stand-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/button-soccer_thumb.jpg" medium="image">
			<media:title type="html">button-soccer</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/filament-clip_thumb.jpg" medium="image">
			<media:title type="html">filament-clip</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/filement-clip-printed_thumb.jpg" medium="image">
			<media:title type="html">filement-clip-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/toast_thumb.jpg" medium="image">
			<media:title type="html">toast</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/raspberry-pi-case_thumb.jpg" medium="image">
			<media:title type="html">raspberry-pi-case</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/piggy_thumb.jpg" medium="image">
			<media:title type="html">piggy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/piggy-printed_thumb.jpg" medium="image">
			<media:title type="html">piggy-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/hex-key-holder_thumb.jpg" medium="image">
			<media:title type="html">hex-key-holder</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/la-linea_thumb.jpg" medium="image">
			<media:title type="html">la-linea</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/la-linea-printed_thumb.jpg" medium="image">
			<media:title type="html">la-linea-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/wrench-organizer-printed_thumb.jpg" medium="image">
			<media:title type="html">wrench-organizer-printed</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/wrench-organizer_thumb.jpg" medium="image">
			<media:title type="html">wrench-organizer</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/elbow_thumb.jpg" medium="image">
			<media:title type="html">elbow</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-1_thumb.png" medium="image">
			<media:title type="html">Cura-fail-1</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-2_thumb.png" medium="image">
			<media:title type="html">Cura-fail-2</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/03/cura-fail-3_thumb.png" medium="image">
			<media:title type="html">Cura-fail-3</media:title>
		</media:content>
	</item>
		<item>
		<title>BKK Fut&#225;r Microsoft Bandre &#8211; service &#233;s webtile (3. r&#233;sz)</title>
		<link>https://balassygyorgy.wordpress.com/2016/02/15/bkk-futar-microsoft-bandre-3-service-es-webtile/</link>
					<comments>https://balassygyorgy.wordpress.com/2016/02/15/bkk-futar-microsoft-bandre-3-service-es-webtile/#respond</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Mon, 15 Feb 2016 06:25:20 +0000</pubDate>
				<category><![CDATA[IoT]]></category>
		<category><![CDATA[Microsoft Band]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2884</guid>

					<description><![CDATA[A Microsoft Band programozási lehetőségeinek és a BKK Futár API-jának a megismerése után el kellett döntenem, hogyan is szeretnék menetrendi adatokat megjeleníteni a Banden. Végül a webtile mellett döntöttem, leginkább azért, mert az SDK-s megoldás egy folyamatosan futó mobil alkalmazást igényelt volna. A webtile korlátja, hogy sajnos nem tudjuk befolyásolni, mikor frissüljön, ezért nem álmodozhatunk [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A <a href="https://balassygyorgy.wordpress.com/2016/01/30/bkk-futar-microsoft-bandre-1/" target="_blank">Microsoft Band programozási lehetőségeinek</a> és a <a href="https://balassygyorgy.wordpress.com/2016/02/02/bkk-futar-microsoft-bandre-2-bkk-futar-api/" target="_blank">BKK Futár API</a>-jának a megismerése után el kellett döntenem, hogyan is szeretnék menetrendi adatokat megjeleníteni a Banden. Végül a webtile mellett döntöttem, leginkább azért, mert az SDK-s megoldás egy folyamatosan futó mobil alkalmazást igényelt volna.</p>
<p>A webtile korlátja, hogy sajnos nem tudjuk befolyásolni, mikor frissüljön, ezért nem álmodozhatunk olyan megoldásról, ami relatív időpontokat használ. Le kell tehát mondanunk a <em>“3 perc múlva indul”</em> stílusú, azonnal érthető megjelenítésről, helyette abszolút időpontokat használhatunk, azaz például <em>“indulás 11:23-kor”</em>. Ez nem annyira szép, de nem óriási probléma, hiszen a Band elsődleges képernyője (Me Tile) mindig a pontos időt mutatja, egy ilyen bonyolult kivonást pedig rá merek bízni a felhasználóra. </p>
<p>A nagyobb probléma, hogy ezzel megszűnik a <em>“következő indulás” </em>fogalma, hiszen a frissítési időközön belül akár több indulás is lehet, és előfordulhat, hogy egy vagy több már múltbeli lesz, mikor a felhasználó rápillant a csempére. Erre nem tudtam jobb megoldást kitalálni, mint hogy több indulási időpontot jelenítek meg, amiből majd a felhasználó némi humán komparálással kiválasztja, hogy melyik a legközelebbi. Egyébként is terveztem, hogy célszerű lenne több időpontot megmutatni, hiszen előfordulhat, hogy a nem a következő buszt, hanem csak a következő utánit szeretném elérni, mert túl messze van a megálló. A sajnálatos szépséghiba, hogy a listában jó eséllyel lesz múltbeli időpont is.</p>
<h2>Az adatforrás</h2>
<p>A leendő webtile-t természetesen el kell látni adatokkal, azaz szükséges hozzá egy GET-en elérhető szerviz. Bár ahogy az <a href="https://balassygyorgy.wordpress.com/2016/02/02/bkk-futar-microsoft-bandre-2-bkk-futar-api/" target="_blank">előző részben</a> láttuk, létezik BKK Futár API, az sajnos nem tudja az adatokat pont olyan formában szolgáltatni, amire nekünk szükségünk van. Az eltérések:</p>
<ul>
<li>A Futár API az indulási időpontokat epochtól eltelt másodpercben adja meg, azaz egy bazi nagy, igen barátságtalan számként. Ezt sajnos a webtile nem tudja emberileg fogyasztható formátumra konvertálni. </li>
<li>Az API-ban van <strong>predictedArrivalTime</strong>, <strong>arrivalTime</strong> és <strong>departureTime</strong> mező is, és változó, hogy mikor melyik van kitöltve, vagy melyiket érdemes használni. Dokumentáció híján csak tippelni tudok, melyik mit jelent, de a tapasztalat az, hogy a predicted csak a már közeledő járműveknél van kitöltve (tipikusan a következő vagy esetleg a következő kettő), és ez a legpontosabb. A sima arrivalTime szinte mindig ki van töltve, kivéve végállomásoknál, ahol csak a departureTime jelenik meg. </li>
<li>Az API hívás sikerességét nem (vagy nem csak?) a HTTP status code, hanem a HTTP válaszban lévő több mező értéke <em>együttesen</em> írja le, amit webtile esetén nem tudunk vizsgálni. </li>
<li>A Futár API-tól a következő indulások objektum tömbként kérhetők le, azonban egyik lehetséges webtile layout sem tudja azokat praktikusan megjeleníteni. Sokkal jobb lenne egy vesszővel elválasztott string, például “10:45, 10:56, 11:07”, de ilyen adat átalakításra a webtile nem képes. </li>
</ul>
<p>Ezen problémák miatt végül úgy döntöttem, hogy készítek egy saját webszervizt, ami adatokkal fogja táplálni Bandit. Tekintve, hogy viszonylag primitív logikáról van szó, ellenben van benne JSON matatás rendesen, és mostanában elsősorban JavaScriptben dolgozom, egy Node.js-es szolgáltatást készítettem. Webszerver frameworkként <a href="http://hapijs.com/" target="_blank">Hapi</a>-t, a Futár API hívásához pedig a <a href="https://www.npmjs.com/package/request-promise" target="_blank">request-promise</a> NPM package-et választottam, mert ezeket már ismertem korábban.</p>
<p>Mivel a webtile nem paraméterezhető, nem láttam értelmét olyan szolgáltatást készítésének, amit bárki, bármilyen járat indulásainak lekérésére használhat. Ez nagyban egyszerűsítette a dolgomat, mert így a <a href="https://github.com/mefiblogger/KoviBusz" target="_blank">KoviBusz</a>ból kikeresett megálló azonosítókat én bizony simán beledrótoztam a forráskódba. Az én szervizem, az én megállóim. Persze a forráskódot kitettem Githubra, hogy bárki barkácsolhasson magának hasonlót, vagy még jobbat:</p>
<p align="left"><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/github-logo.png"><img title="github-logo" style="background-image:none;float:left;padding-top:0;padding-left:0;margin:0;display:inline;padding-right:0;border-width:0;" border="0" alt="github-logo" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/github-logo_thumb.png?w=32&#038;h=32" width="32" align="left" height="32" /></a></p>
<p>&#160;<a title="https://github.com/balassy/band-futar-tile" href="https://github.com/balassy/band-futar-tile">https://github.com/balassy/band-futar-tile</a></p>
<p>Íme néhány érdekesebb pont a kódból:</p>
<ul>
<li>A webszerviz kódja az <strong><a href="https://github.com/balassy/band-futar-tile/tree/master/src" target="_blank">src</a></strong> mappában található, a webtile által hívott végpont pedig azon belül a <strong><a href="https://github.com/balassy/band-futar-tile/tree/master/src/next-ride" target="_blank">next-ride</a></strong> mappában. </li>
<li>Azon belül a <strong><a href="https://github.com/balassy/band-futar-tile/blob/master/src/next-ride/service.js" target="_blank">service.js</a></strong> hívja a Futár API-t a paraméterként kapott megálló azonosítóval. </li>
<li>A service.js-t a <strong><a href="https://github.com/balassy/band-futar-tile/blob/master/src/next-ride/controller.js" target="_blank">controller.js</a></strong> hívja, átadva neki a keresett megállók azonosítóit. </li>
<li>A <strong><a href="https://github.com/balassy/band-futar-tile/blob/master/gulpfile.js" target="_blank">gulpfile.js</a></strong> az <a href="https://www.npmjs.com/package/urbanjs-tools" target="_blank">urbanjs-tools</a> nevű NPM package-t használja statikus kódelemzésre, ami nagyon kényelmessé teszi az ESLint és az ES6 használatát. </li>
<li>A forráskódot <a href="https://code.visualstudio.com/" target="_blank">Visual Studio Code</a>-dal írtam, erre utalnak a <strong>.vscode</strong>, <strong>typings</strong> mappák és a <strong>tsd.json</strong> fájl. (Igen, a <strong>typings</strong> mappát nem kellene betenni a repoba, de így sokkal kényelmesebb volt.) </li>
<li>A projektet pillanatok alatt sikerült bekötnöm <a href="https://travis-ci.org/" target="_blank">Travis</a>be és <a href="https://www.appveyor.com/" target="_blank">AppVeyor</a>ba, ezek beállításai találhatók a <strong>.travis.yml</strong> és az <strong>appveyor.yml</strong> fájlokban. Ezek az ingyenes online build környezetek segítettek a forráskód folyamatos karbantartásában, mindkettőt csak ajánlani tudom. </li>
</ul>
<p>Hosting környezetnek természetesen Azure-t választottam, mert <a href="https://azure.microsoft.com/en-us/documentation/articles/web-sites-publish-source-control/" target="_blank">piszkosul egyszerű</a> egy Githubon tárolt web alkalmazás continuous deploymentjét összelőni. Most amint felküldök egy kód módosítást a Githubra, lefut a build Travisben és települ is ki automatikusan az Azure-os webszerverre. Ez az automatizmus még egy ilyen egyszerű alkalmazás esetén is óriási segítség fejlesztés közben.</p>
<h2>A webtile</h2>
<p>A webtile elkészítéséhez az első részben is említett <a href="https://developer.microsoftband.com/WebTile/ChooseLayout" target="_blank">varázslót</a> használtam. Úgy döntöttem, hogy ez egyes járatok adatait külön page-en fogom megjeleníteni (<em>Multiple page tile</em>), azon belül egy a <em>Scrolling text wrap<strong> </strong></em>(MSBand_ScrollingText) elrendezés bizonyult legpraktikusabbnak az ismeretlen hosszúságú szöveg megjelenítésére. Ezt így mutatja a varázsló (az 59-es villamos következő indulásai a Vas Gereben utcai megállóból):</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-webtile-wizard-preview-1.png"><img title="band-webtile-wizard-preview-1" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-webtile-wizard-preview-1" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-webtile-wizard-preview-1_thumb.png?w=410&#038;h=135" width="410" height="135" /></a></p>
<p>Jelenleg a szerviz az engem leginkább érdeklő három járat adatait adja vissza, ezek mind külön page-et kaptak, utánuk pedig egy negyedik oldalra az utolsó frissítés időpontját tettem. Ez hibakereséshez lehet jó, a szerviz a válasz JSON egyik property-jében visszaadja, hogy mikor kérte le utoljára az adatokat a Futár API-tól, így könnyű volt megjeleníteni:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-webtile-wizard-preview-2.png"><img title="band-webtile-wizard-preview-2" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-webtile-wizard-preview-2" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-webtile-wizard-preview-2_thumb.png?w=410&#038;h=136" width="410" height="136" /></a></p>
<p>A varázsló által generált webtile-t nem közvetlenül telepítettem Bandira, hanem letöltöttem, kicsomagoltam (mert valójában egy ZIP fájl), és módosítottam rajta (a végeredmény megtalálható a a <strong><a href="https://github.com/balassy/band-futar-tile/blob/master/webtile/manifest.json" target="_blank">webtile/manifest.json</a></strong> fájlban):</p>
<ul>
<li>Kijavítottam azokat az apró hibákat, amiket a webes varázslóban egyszerűen nem sikerült. </li>
<li>Beállítottam a <strong>refreshIntervalMinutes</strong> tulajdonság értékét <strong>15</strong>-re, ami negyedórás frissítési időközt jelent, ennél sűrűbben nem is lehet. </li>
<li>Beállítottam a <strong>version </strong>és a <strong>versionString</strong> tulajdonságokat, és minden újabb kísérletnél inkrementáltam őket, hogy biztosan észrevegye a Microsoft Health alkalmazás, hogy újabb verziót akarok telepíteni. </li>
<li>Beállítottam a <strong>name</strong>, <strong>description</strong>, <strong>author</strong>, <strong>organization</strong> és <strong>contactEmail</strong> tulajdonságok értékeit, hogy azok kulturáltan jelenjenek meg telepítéskor. </li>
</ul>
<p>Jelenleg a webszerviz HTTP 500 status code-dal tér vissza, ha valami nem sikerül szerver oldalon, de erősen gondolkodom rajta, hogy hibakeresési célzattal minden ilyen esetben HTTP 200 OK-val térjek vissza, és a hiba leírását adjam vissza a válaszban, hogy azt könnyen meg lehessen jeleníteni a Banden.</p>
<h2>A végeredmény</h2>
<p>Örömmel tölt el, hogy az elkészült megoldás működik, a Futár API-tól kapott adatok megjelennek, és a megoldás nem bonyolult.</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-tile.jpg"><img title="band-futar-tile" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-futar-tile" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-tile_thumb.jpg?w=550&#038;h=307" width="550" height="307" /></a></p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-page.jpg"><img title="band-futar-page" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-futar-page" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-page_thumb.jpg?w=550&#038;h=314" width="550" height="314" /></a></p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-update-page.jpg"><img title="band-futar-update-page" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="band-futar-update-page" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-update-page_thumb.jpg?w=550&#038;h=330" width="550" height="330" /></a></p>
<p>A Futár igazi értéke abban van, hogy nem csak egy sima menetrend, hanem (elméletileg legalábbis) valós idejű adatokat tartalmaz, azaz az aktuális forgalmi helyzetet tükrözi. Sajnos a webtile legjobb esetben is negyedórás frissítési időköze ezt a remek lehetőséget tökéletesen megöli, ami már kevésbé örvendetes, hiszen így az esetek nagy részében “csak” a menetrendi adatokat látom, ami Tokióban minden bizonnyal tökéletesen működne, Budapesten még nem 100%-os. Mivel engem leggyakrabban egy villamosmegálló és egy buszvégállomás indulási időpontjai érdekelnek, számomra egészen jól használható a végeredmény.</p>
<p><strong>Te milyen adatokat látnál szívesen az órádon?</strong></p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:57c18d17-0d6b-4f98-998f-fe73e88ac9fb" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/IoT" rel="tag">IoT</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2016/02/15/bkk-futar-microsoft-bandre-3-service-es-webtile/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2884</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/github-logo_thumb.png" medium="image">
			<media:title type="html">github-logo</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-webtile-wizard-preview-1_thumb.png" medium="image">
			<media:title type="html">band-webtile-wizard-preview-1</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-webtile-wizard-preview-2_thumb.png" medium="image">
			<media:title type="html">band-webtile-wizard-preview-2</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-tile_thumb.jpg" medium="image">
			<media:title type="html">band-futar-tile</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-page_thumb.jpg" medium="image">
			<media:title type="html">band-futar-page</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/band-futar-update-page_thumb.jpg" medium="image">
			<media:title type="html">band-futar-update-page</media:title>
		</media:content>
	</item>
		<item>
		<title>BKK Fut&#225;r Microsoft Bandre &#8211; a BKK Fut&#225;r API (2. r&#233;sz)</title>
		<link>https://balassygyorgy.wordpress.com/2016/02/02/bkk-futar-microsoft-bandre-2-bkk-futar-api/</link>
					<comments>https://balassygyorgy.wordpress.com/2016/02/02/bkk-futar-microsoft-bandre-2-bkk-futar-api/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Tue, 02 Feb 2016 05:17:28 +0000</pubDate>
				<category><![CDATA[IoT]]></category>
		<category><![CDATA[Band]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2877</guid>

					<description><![CDATA[Ahogy az előző részben említettem, azt tűztem ki célul, hogy a BKK Futártól kapott aktuális tömegközlekedési információkat okosórán, konkrétan Microsoft Banden jelenítem meg. A Band programozási lehetőségeinek áttekintése után ebben a részben először nézzük meg azt, hogy a BKK Futár adatait hogyan érhetjük el. A BKK Futár API A Budapesti Közlekedése Központ honlapján igen haladó [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Ahogy az <a href="https://balassygyorgy.wordpress.com/2016/01/30/bkk-futar-microsoft-bandre-1/" target="_blank">előző részben</a> említettem, azt tűztem ki célul, hogy a BKK Futártól kapott aktuális tömegközlekedési információkat okosórán, konkrétan Microsoft Banden jelenítem meg. A Band programozási lehetőségeinek áttekintése után ebben a részben először nézzük meg azt, hogy a BKK Futár adatait hogyan érhetjük el.</p>
<h2>A BKK Futár API</h2>
<h2></h2>
<p>A Budapesti Közlekedése Központ honlapján igen haladó módon létezik egy <a href="http://www.bkk.hu/tomegkozlekedes/fejlesztoknek/" target="_blank">Fejlesztőknek</a> szóló oldal, ahol gyorsan kiderült, hogy nem rám gondoltak. A BKK megközelítése az, hogy a menetrendi információkat bizonyos időközönként publikálják az oldalukon egy kb. 28 MB-os ZIP fájlban. Értem én, hogy a ZIP-ben <a href="https://developers.google.com/transit/gtfs/?hl=en" target="_blank">GTFS</a>, azaz General Transit Feed Specification formátumban vannak az adatok, ami igen elterjedt, hiszen a G csak udvariasságból General és nem Google, meg hogy így könnyű feltölteni a Mapsre és hogy <a href="http://www.bkk.hu/apps/gtfs/" target="_blank">sűrűn frissítik</a>, ez tényleg szép, csak nekem éppen most pont nem jó.</p>
<p>A következő utam a <a href="http://futar.bkk.hu" target="_blank">BKK Futár oldalára</a> vezetett, ahol minden bevezető nélkül egy interaktív térképet találhatunk, ami már sokkal érdekesebb, hiszen ez teljesen friss adatokkal dolgozik. Irány a fejlesztőknek szóló leírás: F12. Nem is kellett sokáig keresgélni a Firebugban, hogy ráleljek erre a kérésre (kattints a teljes méretű képért):</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/ms-band-4-futar-api.png"><img title="ms-band-4-futar-api" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="ms-band-4-futar-api" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/ms-band-4-futar-api_thumb.png?w=550&#038;h=140" width="550" height="140" /></a></p>
<p>Ebből az egyetlen kérésből több dolog is kiderült:</p>
<ul>
<li>Létezik API, sőt már az URL-jét is tudom. Kellene dokumentáció, amiből kiderül, hogy milyen végpontok vannak. </li>
<li>Az API verziózottnak tűnik, ami általában jó hír. Kellene dokumentáció, amiből kiderül, hogy milyen verziók léteznek. </li>
<li>Az API hívásához lehet, hogy kell API kulcs. Kellene dokumentáció, amiből kiderül, honnan lesz API kulcsom. </li>
<li>Lehet, hogy van throttling, legalábbis a <strong>data.limitExceeded</strong> mező erre utal. Kellene dokumentáció, amiből kiderül, hogy mennyi az annyi. </li>
<li>Státusz információ van bőven: a HTTP státusz kódon kívül a válaszban is van egy <strong>status</strong>, egy <strong>code</strong>, és egy <strong>text</strong> mező, sőt (és ez a fenti képen nem látszik) a szerver még egy <strong>X-BKK-Status</strong> fejlécet is visszaküld <strong>“OK”</strong> értékkel. Kellene egy dokumentáció, amiből kiderül, hogy melyik kell nekem. </li>
</ul>
<p>Ez elég volt ahhoz, hogy elinduljak, de minden jel arra utalt, hogy nagy hasznát venném bármiféle további dokumentációnak.</p>
<p>Neki is álltam óriási lelkesedéssel, keresgéltem a BKK oldalán, a Bingben, de sajnos az összes Google-fu tudásom is kevésnek bizonyult, nem találtam hivatalos leírást. (Aki ismer ilyet, kérem küldje el nekem, köszönöm.)</p>
<p>Találtam viszont több nem hivatalos forrást is:</p>
<ul>
<li>Létezik egy Index Fórum “<a href="http://forum.index.hu/Article/showArticle?t=9211676" target="_blank">A BKV GTFS adatbázisa</a>” címmel, ahonnan számomra az derült ki, hogy a nép szenved a GTFS-től és egy barátságosabb API-t szeretne. </li>
<li>Az Apiary oldalán találtam egy dokumentációt <a href="http://docs.bkkfutar.apiary.io/#" target="_blank">BKK FUTÁR Utazástervező API</a> címmel. Sajnos nem tűnik hivatalosnak, használhatónak viszont annál inkább. </li>
<li>Nádai Gábor (alias Mefi) nevén találtam egy Github repót <a href="https://github.com/mefiblogger/KoviBusz" target="_blank">KoviBusz</a> néven, ami egy adott busz következő indulási idejét mutatja az API-t felhasználva. A kód Node.js-ben készült, és egy <a href="https://github.com/mefiblogger/KoviBusz/blob/master/BKKStopIds.js" target="_blank">barátságos fájlban</a> JSON formátumban tartalmazza a megállókat. </li>
</ul>
<h2>Járatinformációk</h2>
<p>Az Apiary dokumentáció és a Firebug böngészése közben világossá vált, hogy nekem az <a href="http://docs.bkkfutar.apiary.io/#reference/0/arrivalsanddeparturesforstop/arrivalsanddeparturesforstop" target="_blank">Arrivals and Departures for Stop</a> (nem is olyan nehéz egy API-t jól elnevezni, igaz?) API-ra van szükségem, amit így kell meghívni:</p>
<pre class="code">GET http://futar.bkk.hu/bkk-utvonaltervezo-api/ws/otp/api/where/arrivals-and-departures-for-stop.json?stopId&amp;onlyDepartures&amp;minutesBefore&amp;minutesAfter</pre>
<p>Ahol:</p>
<ul>
<li>A <strong>stopId </strong>a megálló azonosítója, például <strong>BKK_F00945</strong>. </li>
<li>Az <strong>onlyDepartures</strong> paramétert <strong>true</strong>-ra állítva megadhatjuk, hogy csak az indulások érdekelnek. </li>
<li>A doksi szerint a <strong>minutesBefore</strong>-ral lekérdezhetjük a korábban elment járatokat, ami Marty McFly számára kétségkívül egy hasznos funkció, nálam <strong>0</strong> lesz, az biztos. </li>
<li>A <strong>minutesAfter</strong>-rel pedig azt állíthatjuk be, hogy hány percre előre szeretnénk lekérni az érkező és induló járatokat. </li>
</ul>
<p>Következő lépésként megálló azonosítóra volt szükségem. Ehhez legjobb forrásnak a Mefi <a href="http://kovibusz.mefi.be/" target="_blank">KoviBusz oldala</a> bizonyult, ami térképen kirajzolja az összes megállót, csak rá kell bökni valamelyikre, és Firebugban máris látszódik az azonosítója. A József Nádor tér például F00979.</p>
<p>GET-es API-ról lévén szó, ezt könnyen ki is próbálhatjuk, csak tegyük a megálló azonosítója elé a <strong>BKK_</strong> előtagot, és írjuk be a címet a böngésző címsorába:</p>
<p><a title="http://futar.bkk.hu/bkk-utvonaltervezo-api/ws/otp/api/where/arrivals-and-departures-for-stop.json?stopId=BKK_F00979" href="http://futar.bkk.hu/bkk-utvonaltervezo-api/ws/otp/api/where/arrivals-and-departures-for-stop.json?stopId=BKK_F00979" target="_blank">http://futar.bkk.hu/bkk-utvonaltervezo-api/ws/otp/api/where/arrivals-and-departures-for-stop.json?stopId=BKK_F00979</a></p>
<p>Íme a szervertől kapott válasz, ahogy azt a Chrome mutatja:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/ms-band-5-futar-api-response1.png"><img title="ms-band-5-futar-api-response" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="ms-band-5-futar-api-response" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/ms-band-5-futar-api-response_thumb1.png?w=550&#038;h=452" width="550" height="452" /></a></p>
<p>Kiemeltem néhány érdekességet:</p>
<ul>
<li>A dátumok és időpontok igen barátságtalanok: nem csak hogy epochtól számított számként jönnek, de hol másodpercben, hol milliszekundumban vannak kifejezve. És akkor az időzónákról még nem is beszéltünk. </li>
<li>A következő indulásoknál megjelenik a <strong>predictedArrivalTime</strong> tulajdonság, sőt létezik <strong>predictedDepartureTime</strong> is. Végállomásoknál indulási oldalon egyik sincs, csak <strong>departureTime</strong>. </li>
<li>Ebben a megállóban két járat is megáll, a 16-os és a 105-ös. Mi a <strong>stop</strong> azonosítóját tudjuk, ahhoz tartoznak <strong>stopTime</strong>-ok, ahhoz <strong>trip</strong>-ek<strong> </strong>és végül ahhoz <strong>route</strong>-ok. </li>
</ul>
<p>Erős nézés módszerével meglett tehát az API, amiből kinyerhetőek az adatok, már csak össze kell kötnünk a Banddel.</p>
<p>&#160;</p>
<p><em>(Folytatás következik…)</em></p>
<p><em></em></p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fbb7e779-cbf7-40da-bb64-8de1aecf35c7" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/IoT" rel="tag">IoT</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2016/02/02/bkk-futar-microsoft-bandre-2-bkk-futar-api/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2877</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/ms-band-4-futar-api_thumb.png" medium="image">
			<media:title type="html">ms-band-4-futar-api</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/02/ms-band-5-futar-api-response_thumb1.png" medium="image">
			<media:title type="html">ms-band-5-futar-api-response</media:title>
		</media:content>
	</item>
		<item>
		<title>BKK Fut&#225;r Microsoft Bandre (1. r&#233;sz)</title>
		<link>https://balassygyorgy.wordpress.com/2016/01/30/bkk-futar-microsoft-bandre-1/</link>
					<comments>https://balassygyorgy.wordpress.com/2016/01/30/bkk-futar-microsoft-bandre-1/#comments</comments>
		
		<dc:creator><![CDATA[György Balássy]]></dc:creator>
		<pubDate>Sat, 30 Jan 2016 05:50:30 +0000</pubDate>
				<category><![CDATA[IoT]]></category>
		<category><![CDATA[Band]]></category>
		<guid isPermaLink="false">http://balassygyorgy.wordpress.com/?p=2870</guid>

					<description><![CDATA[Nem rég szerencsés tulajdonosa lettem egy Microsoft Bandnek, és természetesen legjobban arra voltam kíváncsi, hogyan készíthetek rá saját alkalmazást. Első célul azt tűztem ki, hogy a BKK Futártól származó információkat fogom rajta megjeleníteni, hiszen milyen jó lenne, hogy amikor kilépek a lakásból csak ránézek az órámra, és rögtön látom, hogy mikor jön a következő buszom. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-1.jpg"><img title="ms-band-1" style="background-image:none;float:right;padding-top:0;padding-left:0;display:inline;padding-right:0;border-width:0;" border="0" alt="ms-band-1" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-1_thumb.jpg?w=200&#038;h=113" width="200" align="right" height="113" /></a>Nem rég szerencsés tulajdonosa lettem egy <a href="https://www.microsoft.com/microsoft-band/en-us" target="_blank">Microsoft Bandnek</a>, és természetesen legjobban arra voltam kíváncsi, hogyan készíthetek rá saját alkalmazást. Első célul azt tűztem ki, hogy a BKK Futártól származó információkat fogom rajta megjeleníteni, hiszen milyen jó lenne, hogy amikor kilépek a lakásból csak ránézek az órámra, és rögtön látom, hogy mikor jön a következő buszom. Bandiban van GPS, a telefonon keresztül kilát az internetre, így első körben ez a feladat megvalósíthatónak látszott.</p>
<h2>Korlátlan lehetőségek fejlesztőknek</h2>
<p>A Microsoft Band “<a href="https://developer.microsoftband.com/" target="_blank">For Developers</a>” oldalára ellátogatva gyorsan fel tudjuk mérni, hogy fejlesztőként háromféle irányból támadhatjuk meg ezt az eszközt.</p>
<p>A <strong><a href="https://developer.microsoftband.com/bandSDK" target="_blank">Band SDK</a></strong>-t felhasználva készíthetünk egy Windows, Android vagy iOS alkalmazást, ami képes kommunikálni a Band-del. Van szép <a href="https://developer.microsoftband.com/Content/docs/Microsoft%20Band%20SDK.pdf" target="_blank">PDF dokumentáció</a> sok példakóddal, sőt még <a href="https://developer.microsoftband.com/Content/docs/MicrosoftBandExperienceDesignGuidelines2.pdf" target="_blank">design guidelines</a>-t is kapunk. A telefonon futó alkalmazás eléri a szenzorokat, új csempéket, azon belül pedig oldalakat és UI vezérlőket tud megjeleníteni.</p>
<p>Készítethetünk <a href="https://developer.microsoftband.com/WebTile" target="_blank"><strong>Web Tile</strong></a>-t, amihez még különösebb fejlesztői tudás sem kell. Egy böngészőben futó <a href="https://developer.microsoftband.com/WebTile/ChooseLayout" target="_blank">varázsló</a> segítségével kiválaszthatjuk, hogy milyen URL-ről érkező adatokat milyen formában szeretnénk megjeleníteni. A web tile JSON vagy RSS adatokat tud letölteni és megmutatni, sőt még arra is képes, hogy ha a letöltött adatok megfelelnek az általunk megadott feltételnek, akkor a Band megjelenít egy értesítést. Ezek a lehetséges elrendezések:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-2-tile-layouts.png"><img title="ms-band-2-tile-layouts" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="ms-band-2-tile-layouts" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-2-tile-layouts_thumb.png?w=550&#038;h=187" width="550" height="187" /></a></p>
<p>Az elkészült Web Tile-t a készítő feltöltheti egy <a href="https://developer.microsofthealth.com/gallery" target="_blank">galériába</a>, ahonnan bárki két kattintással letöltheti azt a telefonjára, majd onnan a Bandjére.</p>
<p>A harmadik lehetőség a <strong><a href="https://developer.microsoftband.com/cloudAPI" target="_blank">Microsoft Health Cloud API</a></strong> használata, ahol egy szép <a href="https://developer.microsoftband.com/cloudAPI/Explorer" target="_blank">REST API</a>-n keresztül kérhetünk le adatokat a felhasználóról és edzéseiről. Az API kevés végpontot tartalmaz, de ezek sok adatot tudnak visszaadni:</p>
<p><a href="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-3-swagger.png"><img title="ms-band-3-swagger" style="background-image:none;float:none;padding-top:0;padding-left:0;margin:0 auto;display:block;padding-right:0;border-width:0;" border="0" alt="ms-band-3-swagger" src="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-3-swagger_thumb.png?w=550&#038;h=236" width="550" height="236" /></a></p>
<h2>A korlátlan lehetőségei korlátai</h2>
<p>Első körben tehát el kell döntenünk, hogy hogyan akarjuk megközelíteni a problémát: SDK-val, Web Tile-lal vagy felhős API-val.</p>
<h3></h3>
<h3>SDK</h3>
<p>Az első lehetőség az SDK, ami a dokumentáció alapján nagyon izgalmasnak tűnik, de fontos megérteni, hogy</p>
<blockquote><p>nem a Bandre írjuk az alkalmazást. </p></blockquote>
<p>Készítünk egy telefonos vagy Windowsos alkalmazást, ami <em>használja</em> a Bandet, de <em>nem a Banden fut</em>. Nincs új projekt típus a Visual Studioban, sőt még azt sem mondhatjuk el, hogy a Banden is Windows 10 futna, mert nem (még). Az alkalmazásunk szempontjából a Band leginkább egy érintőkijelzőre hasonlít, amiben vannak egyéb szenzorok is.</p>
<p>Ez sajnos rögtön magával hozza azt a korlátozást is, hogy a telefonos alkalmazás tudja elérni a Bandet, nem pedig a karperec a telefonos alkalmazást. Tehát készíthetünk egy olyan mobil appot, ami elkéri a Bandtől a pulzusszámunkat vagy a napi kalória fogyasztásunkat, de azt nem lehet megoldani (még), hogy az óránkon <em>kezdeményezzünk</em> bármit, mert a telefonos alkalmazás nélkül a Banden sem történik semmi. Azaz a telefonos alkalmazásnak mindig futnia kell, ami például Windows Phone-on egyelőre csak elég <a href="http://jamescroft.co.uk/blog/iot/developing-for-microsoft-band-with-winrt-background-execution/" target="_blank">korlátozottan oldható meg</a> (ebben a Windows 10 és a <a href="http://www.codeproject.com/Tips/1036512/Achieveing-Indefinite-Background-Execution-with-th" target="_blank">DeviceUseTrigger</a> tud segíteni). Kivétel ez alól a Cortana, mert a Bandről indított hangvezérléssel lehet alkalmazást aktiválni a telefonon, de nálunk ugye nincs Cortana.</p>
<p>A második erős korlátozás a UI. Nem elég, hogy kicsi a képernyő, a felhasználható vezérlők&#160; listája is elég rövid:</p>
<ul>
<li>Egyszerű vezérlők:
<ul>
<li>TextBlock </li>
<li>WrappedTextBlock </li>
<li>Icon </li>
<li>Barcode </li>
<li>TextButton </li>
<li>FilledButton </li>
</ul>
</li>
<li>Konténer vezérlők:
<ul>
<li>FlowPanel </li>
<li>ScrollFlowPanel </li>
<li>FilledPanel </li>
</ul>
</li>
</ul>
<p>A jó hír, hogy van gomb, de ne feledjük, hogy csak akkor ér valamit, ha a hozzá tartozó eseménykezelőt tartalmazó telefonos alkalmazás fut éppen.</p>
<p>A rossz hír, hogy gyakorlatilag nincsenek input vezérlők, se szövegdoboz, se lista, semmi. Pedig a Banden még mini billentyűzet is van, hiszen SMS-ekre tudunk onnan válaszolni, ez azonban jelenleg nem érhető el más alkalmazások számára. Arról se álmodjunk, hogy akkor majd mi megoldjuk egyszerű vezérlőkből, ugyanis azokból maximum 10 lehet egy oldalon (page-en).</p>
<p>Ezek után az, hogy a vezérlőkre a számukkal kell hivatkozni, és a gomb eseménykezelőt nem is a gombhoz, hanem az egész csempéhez (lényegében az alkalmazáshoz) kapcsoljuk, és a kódban kell megvizsgálni, hogy melyik gombra nyomott a felhasználó, már nem is tűnik komoly korlátozásnak.</p>
<p>A szenzorok között vannak olyanok (nem mind, de például a szívritmus), amit a felhasználó tudta nélkül nem lehet kiolvasni. Ez a gyakorlatban azt jelenti, hogy az alkalmazásnak először egy <strong>GetCurrentUserConsent()</strong> függvényt kell hívnia, ami feldob egy engedélykérő ablakot, ahol a felhasználó eldöntheti, hogy az app olvashatja-e azt a szenzort vagy nem. Ez rögtön meghatározza, hogy olyan alkalmazást kell írnunk, amihez tartozik felhasználói felület, azaz háttérben futó windows service-ek és headless IoT alkalmazások kizárva. Nem barkácsolhatunk olyan ventillátort, ami Bluetooth-on keresztül közvetlenül a Bandről olvassa a szívverésemet, és ha magas szívritmust érzékel, bekapcsol, mert a kijelző nélküli ventillátor nem tud engedélyt kérni a HeartRate szenzor olvasásához. Mindenképpen szükségünk van a telefonra az engedélyezés miatt.</p>
<h3>Web Tile</h3>
<p>A Web Tile egyszerűen elkészíthető és praktikus megoldás például hírportálok információinak megjelenítésére: csak rákötöm a meglévő RSS feedre és már készen is van. Érdemes azonban átgondolni, hogy valóban a meglévő JSON-os végpont vagy RSS feed a legoptimálisabb-e a Band számára, mert a kijelző mérete korlátos, és a web tile nem képes a letöltött adatokon semmilyen formázást elvégezni. A varázslóban csak azt tudjuk megmondani, hogy a szervertől kapott JSON válasz egyes property-jei melyik TextBlockokban jelenjenek meg. Ha a szöveg túl hosszú, nem fog kiférni (kivéve a görgethető elrendezés esetén), hanem egyszerűen levágódik. A legbonyolultabb művelet a sztring összefűzés (több property megjelenítése egy TextBlockban), de arról ne is álmodjunk, hogy számot fogunk dátummá konvertálni, vagy kiszámoljuk az eltelt időt két időpont között.</p>
<p>Ahogy a fenti képen is látszik, a varázsló felkínálja, hogy válasszunk a 6 előre definiált oldalrendezés közül. Más lehetőségünk nincs, ezek valamelyikén (vagy több oldalon) kell elrendeznünk a megjeleníteni kívánt információkat. A hatból 3 elrendezés képes képet megjeleníteni, ezek azonban csak kis méretű, átlátszó hátterű, fehér ikonok lehetnek, amik már a tile telepítésekor rendelkezésre állnak. Arra például nincs lehetőségünk, hogy fotót vagy szerverről letöltött képet jelenítsünk meg (például árfolyamok alakulása on-demand rajzolva). Jó hír viszont, hogy a csomagba tehetünk több ikont, és meghatározhatjuk, hogy feltételtől függően melyik jelenjen meg (például különböző időjárás ikonok).</p>
<p>Érdemes egyébként elolvasni a <a href="https://developer.microsoftband.com/Content/docs/Microsoft%20Band%20Web%20Tile%20Documentation.pdf" target="_blank">web tile specifikációt</a>, mert a varázsló csak a fontosabb paramétereket állítja be, nem kérdez rá mindenre. Az egyik ilyen kimaradó paraméter a <strong>refreshIntervalMinutes</strong>, amivel azt állíthatjuk be, hogy milyen gyakran frissüljön a csempe. Ennek az értéke alapértelmezés szerint 30 perc, de akár 15 percre is állíthatjuk (sűrűbbre nem). Ehhez nevezzük át a varázsló által generált <strong>.webtile</strong> fájlt .<strong>zip</strong>-re, csomagoljuk ki, majd módosítsuk a benne található <strong>manifest.json</strong> fájlt. </p>
<p>Sajnos a gyakorlatban azt tapasztaltam (és a StackOverflow szerint nem vagyok ezzel egyedül), hogy az adatok néha a megadottnál jóval ritkábban frissülnek, nálam volt olyan, hogy 3 óra is eltelt két frissítés között. A sikeres frissítéshez a HTTP válasznak 200 OK-val kell visszatérnie, és a szokásos kliens oldali gyorsítótárazási módszerek itt is bezavarhatnak.</p>
<p>A web tile által hívott URL fix és csak GET lehet, tehát ne is álmodozzunk például arról, hogy majd így küldjük fel az UV szenzor által mért értékeket.</p>
<p>&#160;</p>
<p><strong>Ezek alapján szerintetek hogy lenne a legpraktikusabb megvalósítani a BKK Futárt Microsoft Bandre?</strong></p>
<p>&#160;</p>
<p><em>(Folytatás következik…)</em></p>
<p>&#160;</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ff206476-5f58-45ff-a3d6-7210cfb4c5ac" class="wlWriterEditableSmartContent" style="float:none;margin:0;display:inline;padding:0;">Technorati-címkék: <a href="http://technorati.com/tags/Microsoft+Band" rel="tag">Microsoft Band</a>,<a href="http://technorati.com/tags/IoT" rel="tag">IoT</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://balassygyorgy.wordpress.com/2016/01/30/bkk-futar-microsoft-bandre-1/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2870</post-id>
		<media:content url="https://1.gravatar.com/avatar/77ab74446a5d179d9eb71cb670651f3da89528f5e72108ada650d9085131f0a5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">balassygyorgy</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-1_thumb.jpg" medium="image">
			<media:title type="html">ms-band-1</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-2-tile-layouts_thumb.png" medium="image">
			<media:title type="html">ms-band-2-tile-layouts</media:title>
		</media:content>

		<media:content url="https://balassygyorgy.wordpress.com/wp-content/uploads/2016/01/ms-band-3-swagger_thumb.png" medium="image">
			<media:title type="html">ms-band-3-swagger</media:title>
		</media:content>
	</item>
	</channel>
</rss>
