Monthly Archives: February 2013

3D nyomtatás – scriptelünk

Előzmények A Really Right Stuff fotós termékeibe pár évvel ezelőtt szerettem bele. Tőlük vásároltam állványfejet, valamint a géphez való, úgynevezett “L-plate”-et is. Az L-plate a fényképezőgépre csavarozható alumínium keret, ami lényegében egy Arca Swiss típusú befogósínt létesít a fényképezőgép alján és bal oldalán. Ennek az az értelme, hogy egyrészt mindig ott a gépen az állványra csatlakozó sín, másrészt a fényképezőgép portrait állásban is stabilabban áll az állványon. Megmutatom: L-plate A gépemen van tehát egy Arca Swiss sín. Van egy ezzel a sínnel kompatibilis RRS Arca Swiss befogópofám (=quick release knob), amit rögzítenem kellene egy rúd végén. A pofa talpában egy darab 3/8″-os süllyesztett UNC csavar számára van kiképezve menet és süllyeszték: RRS-Arca-Swiss-quick-release-knob 3/8″-os UNC csavart és hozzá való anyát Európában alig kapni – ha mégis kapható, akkor az aranyárban van és leginkább nincs itt egy óra múlva. Sebaj, akkor majd gyártunk ilyet!

Gyártunk

Némi guglizás után rájöttem, hogy a mezei CAD alkalmazásban UNC menetet rajzolgatni nem lesz egyszerű feladat – legalábbis az én CAD skilljeimnek kicsit meredek a dolog. Ekkor jutott eszembe, hogy biztos kimatekozta ezt már valaki és létezik rá OpenSCAD script. Hellyel-közzel igazam is lett. Kezdetnek megtaláltam a Thingiverse-en aubenc által létrehozott Poor man’s OpenSCAD library-t, amelyben ő az 1/4″-es fotós csavart gyártotta le mintának. Szerencsére mindezt okos függvényekkel tette, úgyhogy némi küzdelem után én is megszültem a projecthez szükséges 40 mm hosszú, végig menetes, 3/8″-os süllyesztett fejű csavart: 3-8_16-UNC-bolt A csavar elkészítéséhez a polyScrewThread library birtokában mindössze egy ilyen fikarcnyi kis scriptre van szükség:
include 
/*
 * hex_screw(15,  // Outer diameter of the thread
 *            4,  // Thread step
 *           55,  // Step shape degrees
 *           30,  // Length of the threaded section of the screw
 *          1.5,  // Resolution (face at each 2mm of the perimeter)
 *            2,  // Countersink in both ends
 *           24,  // Distance between flats for the hex head
 *            8,  // Height of the hex head (can be zero)
 *            0,  // Length of the non threaded section of the screw
 *            0)  // Diameter for the non threaded section of the screw
 *                     -1 - Same as inner diameter of the thread
 *                      0 - Same as outer diameter of the thread
 *                  value - The given value
 */
hex_screw(	25.4*3/8,
			25.4/16,
			30,
			40,
			1.5,
			2,
			0,
			0,
			0,
			-1);
lyuk = 2.5;
difference() {
  rotate([0, 180, 0]) {
    cylinder(h = 2.6, r1 = 4, r2 = 6.25, center = false);
  }
  translate([0,0,lyuk/2-2.6-0.1]) {
	cube(size = [1.5,6,lyuk], center= true);
  }
}
Ezután következett az anya: 3-8_16-UNC-nut Az ő scriptje is vérbuta, mindössze egy kis plusz tágulást kellett belekalkulálni, hogy a printelt csavar és a printelt anya összetekeredjenek:
include 
/*
 * hexa_nut(24,  // Distance between flats
 *           8,  // Height
 *           4,  // Step height (the half will be used to countersink the ends)
 *          55,  // Degrees (same as used for the screw_thread example)
 *          15,  // Outer diameter of the thread to match
 *         0.5)  // Resolution, you may want to set this to small values
 *                  (quite high res) to minimize overhang issues
 */
pla_extra_width = 0.8;
hex_nut(14, 8, .25*(16/2.54), 30, pla_extra_width+25.4*3/8, 0.5);
A két OpenSCAD script által generált STL file-t aztán CAD-ben leellenőrizve már jól látszott, hogy a plusz tűréssel együtt kompatibilisek lesznek a menetek: nut-and-bolt-w-tolerance-check-in-CAD 0.5 mm hézag az esetek többségében elég szokott lenni – ezúttal picit szorosnak bizonyult, így 0.8 mm-es rést hagyva és a csavart párszor áthajtva a meneten már megfelelően egymásba szeretett apu és anyu: 3-16-nut-and-bolt-from-PLA Summa summarum, az OpenSCAD nem egy designerek álma eszköz, ám ha egyszer összerakunk benne valamit, azon gyerekjáték módosítani.]]>

Excel – this is how we roll

tiddle.co.uk:

I literally just fixed a bug that has plagued me for the last few days. I originally wrote the code using the terrible reference literature for Excel 03. The issue is actually that the index it tells you to use doesn’t exist! The text below is taken from the Borders object page, specifically relating to FormatConditions (the conditional formatting object) and is wrong: Use Borders(index), where index identifies the border, to return a single Border object. The following example sets the color of the bottom border of cells A1:G1 to red. Worksheets("Sheet1").Range("A1:G1"). _ Borders(xlEdgeBottom).Color = RGB(255, 0, 0) Index can be one of the following XlBordersIndex constants: xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, or xlEdgeTop, xlInsideHorizontal, or xlInsideVertical. I was trying to apply formatting to the bottom border, so obviously I used xlEdgeBottom, and hence continually received the aforementioned runtime error. After what seems like hours of [non-sequential] Googling, I found a post where someone was doing something similar enough to me, successfully, to learn from it. Almost immediately I saw the difference; their chosen indexes did not contain “Edge”. I removed them from my code, and voila it works perfectly, all errors were gone and the sheet formats beautifully. Ok, so I probably should have found a better reference to the object library, but the Microsoft online one is no better or easier to use than the offline one, which coincidently loads faster! On a similar note, if you’ve ever looked up an error code to find a bug solution page by Microsoft, you’ll know the wide range of issues and limitations of their software that intersect in very weird ways. Surprising the main application runs really! I hope someone finds this and it helps them, as otherwise I just wasted time documenting this !
Mutatom, hogy néznek ki az emlegetett konstansok:
?xlEdgeLeft, xlLeft
 7            -4131
?xlEdgeTop, xlTop
 8            -4160
?xlEdgeRight, xlRight
 10           -4152
?xlEdgeBottom, xlBottom
 9            -4107
Szerencsétlen flótás kétségbeesett próbálkozása valóban működőképes és segít az Edge attribútumoknál – persze az Inside és Diagonal konstansok továbbra sem működnek ilyen esetekben. Nagy eséllyel ugyanígy jó lesz az elkövetkező tizenX év Exceleiben is, ugyanis a VBA engine bugjai 1995 óta alig-alig tünedeznek el (2003 óta van az egyik lezárt és aláírt gyári Microsoft add-inben egy sor, amely minden egyes kalkulációnál debug üzenetet pakol az Immediate ablakba, hogy hadd örüljön a fejlesztő, illetve hadd lassuljon bármi, ami a bekapcsolt add-innel egyidőben jelen van az Excelben). A “1004 Unable to set the LineStyle property of the Border class” hibaüzenet okára keresve egyébként számtalan olyan megoldási javaslat jön szembe, hogy valószínűleg korrupt az Excel file és csináld újra. Kérdem én: a táblával _dolgozó és nem játszó_ júzernek vajon az-e hobbija, hogy hetente korrumpál egy-egy ilyen állományt? Remélem Redmondban csuklanak. A kis rohadék hiba azért alattomos, mert csak bizonyos range-ek esetén jön elő. Ennek az az oka, hogy csak azokra a cellákra “allergiás” a border propertyt beállító kód, amelyek már rendelkeznek valamilyen border propertyvel (ez az idióta hiba egyébként számos helyen fellelhető a VBA motorban). Érdemes ilyenkor reflexből propertyt resetelni, még ha erőforrás pazarlásnak tűnik is:
Sub setBorder(ByVal myRange As Range, ByVal borderArray As Variant)
    ' call setBorder(Selection, array(array(xlEdgeTop, xlthick, xlContinuous)))
    Dim i As Long, j As Long
    For i = LBound(borderArray) To UBound(borderArray)
        With myRange.Borders(borderArray(i)(0))
            .LineStyle = xlLineStyleNone
            .LineStyle = borderArray(i)(2)
            .Weight = borderArray(i)(1)
        End With
    Next i
End Sub
]]>

3D nyomtatás – a sebesség oltára

150mm-per-sec-speed-effect1 150mm-per-sec-speed-effect2 A tőlem jóval tapasztaltabbak (és maga a Cura is) azt mondják erre, hogy nagyobb sebességre a precízen beállított printerek képesek. Én pedig azt mondom, hogy amíg a léptetőmotorok megnyúlni képes bordás gumiszíjakkal hajtják meg a fejet pozícionáló két acéltengelyt és nem direkt módon csatlakoznak hozzájuk, addig hiába a nagyobb sebesség, az ilyen hibák kiszámíthatatlanul jönnek majd elő. Jó példa erre a minták hátulján található felső hiba: 150mm-per-sec-speed-effect3 Direkt nem croppoltam le a képből a minták feljebb levő részét, hogy látható maradjon: az egyébként 150 mm/sec sebességgel dolgozó fej az utolsó hibát követően szépen egyenletesen dolgozott tovább, mintha valami varázsütésre “meggyógyult” volna a pozícionálás. Nos, szerintem ez azt igazolja, hogy a szíjhajtás miatt téveszt néha az eszköz. ]]>

3D nyomtatás – a sötét oldal

3dprint-the-dark-side Érdemes megfigyelni, hogy az extruder fej milyen mértékben képes összemocskolni magát. Ez a probléma alattomos és kiszámíthatatlan. Ugyanezek a testek ugyanebből az anyagból ugyanolyan alkoholos tárgyasztal tisztítás után csont nélkül kinyomtatódtak, míg most szarrá ment mind. Ha az Ultimakerhez lenne gyárilag hot bed, akkor ez a probléma nem létezne. Hot bedet akarok!]]>

3D nyomtatás – Tea Cup SlingsHOT

teafiltert kicsavaró bögrét: Nagyon megtetszett, webshop link híján gondoltam gyártok én egy ilyet: teamug-to-print A modell rendben elkészült, ám ez jelen formájában egy FFF printerrel viszonylag nehezen nyomtatható. Nézzük meg, mi a baja! Legegyszerűbb, ha fogjuk az STL file-t és berántjuk meshmixerbe, aki rögtön rak is rá egy olyan shadert, ami bepirosítja azokat a részeket, amelyek túllógnak és ezért csak úgy a levegőbe nem nyomtathatóak: teacup-overhang1 Ezzel még tudunk ügyeskedni egy kicsit: a talpat egyszerűen szintbe állíthatjuk, illetve a fül alja is leérhet a pohár aljáig, ez nem gond. A fül görbületét is lehet kevésbé meredekre venni: mondjuk egyszerűen kifúrjuk egy hengerrel és nagy eséllyel az már nyomtathatóvá teszi azt a részt. A nagyobb probléma ezzel a résszel van: teacup-overhang2 Jól látszik, hogy a filter járatának teteje sajna egy hosszabb vízszintes felület. Ezt csak úgy tudjuk nyomtatni, ha supportot kérünk az egész bögrére. Sajnos tapasztalatból azt mondom, hogy az ilyen szűk területekbe elég rendesen be tud állni a support, így nem biztos, hogy sok értelme van szutykolni vele. Azért persze a foxi sem ereszti olyan könnyen a lábtörlőt… Leszeletelés után ez a bögre supporttal nyomtatva 7 és fél óráig készülne, 1360 HUF anyagot felzabálva. Mivel ez próbának már ijesztő mennyiségű idő/alapanyag kombináció, ezért ilyenkor érdemes kicsit trükközni még. Fogjuk a legproblémásabbnak ítélt részt, húzzunk rá egy bounding boxot (=egy téglatestet, ami magába foglalja a vizsgálandó objektumdarabot), aztán a boxból és a modellünkből készítsünk egy közös metszetet: teacup-bounding-box-on-overhang teamug-overhang-testobject Az így kapott darab már csak 30 percet és 110 HUF pénzt zabál el – mindenképp megéri egy ekkora falattal kísérletezni ahelyett, hogy a teljes modell nyomtatása után görbüljön le a szánk. Nyomtassunk is egy support nélküli és egy supportos változatot és nézzük meg, mi lett belőlük. Íme a support nélkül készült tesztdarab: teamug-overhang-print-wo-support Jól látszik, hogy az átfeszített felületek ugyan elkészültek, de ronda kis göndör műanyagszálak lógnak be róluk – ez így useless. Nézzük, mire megyünk a supporttal! Ilyen lesz a támasztékkal nyomtatott próbatest: teamug-overhang-print-w-support Elég masszív support képződött – lássuk, mennyire lehet kiszedni: teamug-overhang-support-removed Szó mi szó, ez bűn ronda. Nem szívesen facsarnám ebben ki a teafiltert, még akkor sem, ha a mostanában gyártott piramis alakú teafilterek zacsija is ugyanabból a PLA-ból készül, mint amiből mi a bögrénket szándékoztuk nyomtatni. Persze még ilyenkor sem kell elkeseredni, ha nagyon akarod a modellt IRL taperolni. Fel kell tölteni az objektumot valamelyik nagy 3D printre szakosodott oldalra, akik bérnyomtatást is vállalnak, aztán ők elkészítik neked professzionális 3D printerekkel, jó pénzért. Az egyik legnagyobb ilyen gyűjtősite a Shapeways – zárjuk is az ő teaserükkel a postot: ]]>

3D nyomtatás – KitchenAid kolbásztöltő

  • Vacsoravendégeknek kolbásszal töltött szűzpecsenyét akarok sütni.
  • Van itthon szűzpecsenye.
  • Van itthon szép KitchenAid húsdaráló is, amivel még sosem izmoztam, mivel csak öcsi mennyiségre van tervezve, nem pedig ennyire.
  • A KitchenAid húsdaráló feltéthez sajnos nem jár a kb. 2 üveggolyóba kerülő kolbásztöltő feltét cső.
  • Becsületes hülye lévén elmegyek két KitchenAid boltba is a kolbásztöltő feltétért.
  • Kolbásztöltő feltét OOS.
  • Vacsorát csinálni most kell, nem pedig akkor, amikor ideér a közel 7kHUF-ba kerülő két darab műanyag cső.
  • Oh wait, I have a 3D printer! 20130207-1695 Az ojjektumok szedhetőek innen.]]>

    3D nyomtatás – farsang

    meshmixerre, első lépésként végignéz csitrillió tutorialt, elolvassa az összes elérhető pdf-et, majd előszedi a szoftvert és nekiáll kicsit játszani vele, hogy szokja az CAD után kissé fura controllokat. A meshmixer magához szoktatásának eredménye a feltehetően legalább részben muréna ősöktől származó Rozálka, melyet az erre fogékony közönség az alábbi ábrán szemlélhet meg: 01-rozalka-meshmixer-tryout-result Miután az inkább coder vénájú főhősünk és a meshmixer moderált mértékben lettek barátok (ha ez eddig nem lett volna meg, akkor javasolt Rozálka további tanulmányozása a fenti szemléltető ábrán), a fickó azt gondolja, hogy majd letölt egy lepkés maszk modellt a Thingiverse-ről, biztos van ezer – ha meg ne adja az ég mégsem lenne rengeteg pillangós 3D maszk fent, akkor majd keres valami 2D lepkét azt extrudálja és Sanyi. Főhősünk az alábbiakat leli: Lepkés kontúr, Google Image Search: 02-3rdparty-butterfly1-countour-only Még egy lepkés kontúr, ezúttal Thingiverse: 02-3rdparty-butterfly3-another-countour Ha hősünk jól emlékszik még biosz faktról és a kamaszkori Brehm olvasmányokból, akkor a sas nem annyira lepke, de ennek ellenére ezt az állítólag sasos maszkot is lenyúlja a főnök, hátha jó lesz (szintén Thingiverse): 02-3rdparty-butterfly4-eagle-mask Talál egy klasszikus velencei maszkot is – grab, hátha ez tetszik meg a megrendelinának (Thingiverse): 02-3rdparty-butterfly5-venetian A halálfejes lepke is lepke, de nem biztos, hogy a csajok nagy kedvence lenne maszk formájában – sebaj, elteszi ezt is (Thingiverse): 02-3rdparty-butterfly6-skullhead Végül talál egy valóban lepkének látszó tárgyat, egy dudorral a torán (Thingiverse): 02-3rdparty-butterfly7-proper Ennyi netes vadászat után fogja az utoljára talált lapos rovart és leműti róla azt a felesleges búbot, plusz vág rá két lyukat a szemeknek, ha már egyszer látó embernek készül az a maszk: 03-3rdparty-mask-with-eyeholes És itt hasít belé a felismerés: bakkercucu, lehet, hogy ez a maszkosdi nem is ennyire egyszerű! Csak az orosz viccben szereplő hajvágórobotnak mindegy, hogy mekkora az ember feje, a merev PLA-ból nyomtatott maszkkal egyáltalán nem biztos, hogy toleráns lesz a megrendelő csajszi. Itt csavarodik be a villanykörte az agyba és jön az ötlet: semmi baj, akkor scanneljük be a csaj fejét, rajzoljunk rá maszkot, extrudáljuk ki, válasszuk le és huss, már mehet is a print!

    3D scan

    A 3D scan témája megint az a nem kis falat kategória. Tekintettel arra, hogy most nem térdprotézis gyártására készülünk, hagyjuk a francba a sok pénzbe kerülő lézeres szuperscannereket és keressünk olcsó, vagy még inkább ingyenes megoldást. Főhősünk korábban látta már az Autodesk által készített 123D Catch alkalmazást, a fiáról hirtelen felindulásból készített is a szerencsétlen kölköt körbefotózva egy modellt, amin valóban a gyerek nézett vissza, de nagy eséllyel csak azért, mert a fotók voltak a 3D gombócra textúraként felfeszítve. Aztán beleakad egy összehasonlító videóba, amin 3 3D scanner alkalmazást tesztelnek, amelyek a Microsoft által gyártott Kinect sensort használják:
    KinectFusion
    Ebből a KinectFusion a Microsoft sajátja. Sajnos a cég oldalán csilliószor fut bele, hogy bármilyen ismertető lejátszása csak a Microsoft Silverlight pluginja telepítése után lehetséges, de ezt nagyon nem akarja, úgyhogy a KinectFusion kuka.
    Skanect
    A Skanect következik – van szép, ígéretes teasere: Sajnos a Skanectet csak prototípus fázisban fejlesztették Mac OS X alatt is, az 1.0-nál elhagyták a platformot, a 0.2-es OS X Skanect prototípus pedig talán 2 frame-ig bírja a 16 giga RAM-mal ellátott 4 magos iMac-en, úgyhogy ez is kuka.
    ReconstructMe
    Marad a harmadik versenyző, a ReconstructMe. Ez is Windows only alkalmazás, de hősünk olvassa egy thread-ben, hogy OS X alatt valaki már Paralells virtuális gépben működésre bírta. Szűk 4 órát elvon az életéből, hogy ugyanezt VMware Fusion alatt is megtegye, nem sok sikerrel. Azért azt is el kell ismerni, hogy nem volt türelme kivárni a teliholdat fekete kakas áldozásához. Már-már feladja a 3D scan dolgot, amikor eszébe jut, hogy van egy 30 gigás még nem használt SSD-je. Nosza újabb fél óra Google és már meg is van, hogy
    • a MacBook Proban levő videokártyát szereti a ReconstructMe
    • ehhez a MacBook Prohoz is létezik minden Bootcamp driver
    • valaki már sikerrel installált külső Thunderbolt diszkre Windowst ezen a bolygón
    Ezután szűk két és fél óra jön: bootolható SD gyártás, 5 giga elpazarlása a belső SSD-ből egy FAT partícióra, Thunderbolton lógó SSD-re Windows install, a Windows install néhány rebootja, Chrome install, ReconstructMe install, Kinect XBOX driver install és már mehet is a scan! Az első szűk egy óra próbálkozás nagyon bölcsen a célszemély nélkül telik. Hősünk ugyanis kellően fáradt ahhoz, hogy elfelejtse bevenni az RTFM kapszulát és nem olvas ReconstructMe manualt, aki pedig világosan leírja, hogy a ReconstructMe akkor érzi magát jól, ha a scannertől min. 40 centire nincs semmi és lehetőleg egyszerre egy 1 köbméteres kockát scannelne nekünk szívesen. Ennyi tanulópénz kicsengetése után beül egy forgószékbe a modellina és lemegy a scan, úgy ahogy. Főhősünk azonnal mesmixert ragad és dekapitálja az alanyt: 04-head-scanned-with-reconstructme Ezután jön az, hogy a coder “lepkét” fest egy arcra (check Rozálka on top): 05-mask-painted-on-head Nem ismervén az extract meshmixer parancs áldásos hatását, face-enként leválasztja a maszkot a fejről: 06-mask-separated-from-head1 Befordítja irányba, ahogy szerinte talán printelhető lesz (persze nem lesz): 06-mask-separated-from-head2 Eljut egész odáig, hogy GCODE-ot generál belőle supportal meg rafttal, sőt mi több, megnyomja a print gombot is, majd az 1. ijesztő méretű support layer után törli az egészet: 07-mask-before-cancelled-print Közben a csajszi mindezt látva letesz “mintának” egy csomag pillangós hajcsatot az asztalra. Főhősünk lefotózza, iPhotot nyit, cropolja a Photo Streambe érkező képet, elmenti, majd rájön, hogy a ViaCAD csak PNG-t importál, ezért kinyitja Preview-ben, lescreenshotolja az ablakot, majd ezt behúzza ViaCADba és rápakol a szakácskéssel gondosan letompított ujjaival egy Bezier-görbét: 08-bezier-on-barrette Aztán görbe extrudál, fej CAD-be be (mivel ebben jobban otthon van, mint a meshmixerben), extrudált lepke nagyjából fejmérethez igazít: 09-barrette-mask-on-head Rajzol két oválist a szemgödrökhöz, hogy vajon tényleg kilát-e majd ezen a csajszi: 10-barrette-mask-eye-test-on-head Aztán jön az, hogy megméri a maszkot és nem hisz a CAD méreteinek, ezért egy másik humanoidon is ellenőrizni akarja. Másik hadrafogható humanoid épp nincs a közelben, így vonalzó, main hero és Photo Booth segítségével készül a nácik fejméréseit idéző tesztkép, amely valóban azt mondja, hogy 10 centi alatt van a két szemzug távolsága: 11-dumb-lonely-coder-eye-distance-measure Ennek úgy megörül, hogy az egyenes maszkot kezdi GCODE-dá konvertálni: 12-flat-mask-before-cancelled-print Szerencsére észbe kap és görbít egyet a maszkon. Előbb gyárt egy ívet a fej formáját követve, majd miután rájön, hogy a maszk nagyjából 90 fokot görbül, egyszerűen csinál a maszk szélétől egy 85 mm sugarú, 90 fokos görbületet azt Sanyi: 13-curved-mask-before-print Beállítja irányba nyomtatáshoz: 14-curved-mask-aligned-to-print Bekapcsolja hozzá a supportot és a raftot is, hogy elkészülhessen az egész. A generált GCODE ijesztően néz ki – a lila rész az mind support, amit nyomtatás után ki kell törni az 1 mm-nél keskenyebb maszkból: 15-curved-mask-gcode Utolsó erejével még nekiáll maszktartó pálcához való mountot készíteni… 16-maskholder-test-1 16-maskholder-test-2 …de aztán megjön a csaj, elküldi inkább szalagért, megköti a maszkot és elviharzik anélkül, hogy a késztermékről fotó készülhetett volna. Nem maradt más hátra, mint a bal alsó sarokba húzni az egeret, hogy az iMac-en a nap végén a család fotói pörögjenek a gondolkodnivaló helyett, 4 bögre lisztet 2 bögre tejjel, 2 bögre cukorral, 2 tojással, 1 bögre olajjal és egy nagy üveg kockázott zselés almakompóttal összekutyulni, beleönteni a kivajazott-kimorzsázott tepsibe, betolni 50 percre 175 fokra, majd lesétálni a szemben levő Kefirekbe egy flakon tejszínhabért. 17-borges-almas
    Update: ern0 barátom követelte a késztermékről készült fotókat, ezért íme. Pillangómaszk rafttal és supporttal, ahogy az Ultimakerből kijött: freshly-printed-butterfly-mask Raft és support közelről (az ügyesebbek észreveszik, hogy hála az égnek elmaradt a szárnyakban levő lyukakból a support): raft-and-support-closer-look Végül az IRL vizsgázott maszk: butteryfly-mask-IRL-tested]]>