Fork Clansuite on GitHub

Internet Relay Chat - Logs for #koch
Collected by k-logbot on chat.freenode.net

IRC Log for Sonntag, 05. August 2012

  1. 1: [0:00] <jakoch> teste das mal
  2. 2: [0:00] <Rikku`on> ich weiß zb nicht ob ich anstannt des zend hydrator, den hydrator nehmen soll, den es im doctrinemodule gibt
  3. 3: [0:00] <Rikku`on> https://github.com/doctrine/DoctrineModule/blob/master/src/DoctrineModule/Stdlib/Hydrator/DoctrineObject.php
  4. 4: [0:01] -jubii2.dk.quakenet.org- Highest connection count: 957 (956 clients)
  5. 5: [0:01] -jubii2.dk.quakenet.org- on 3 ca 1(4) ft 20(20) tr
  6. 6: [0:01] * cslogbot (~PircBot@server.jakoch.de) has joined #clansuite
  7. 7: [0:01] * Topic is '"Welcome! http://clansuite.com - http://www.youtube.com/watch?v=JPqFNQCXF9Y "'
  8. 8: [0:01] * Set by Q on Thu Jul 26 20:33:33 CEST 2012
  9. 9: [0:02] <jakoch> https://github.com/akrabat/zf2-tutorial/blob/master/module/Album/src/Album/Model/Album.php#L21
  10. 10: [0:03] <jakoch> er macht das auch nich anders
  11. 11: [0:04] <jakoch> is ne gute idee, die methode, wie das model bef�llt wird gleich dort abzulegen
  12. 12: [0:05] <Rikku`on> $user->exchangeArray($validatedData); funktioniert nicht
  13. 13: [0:05] <Rikku`on> $user ist doch ein POPO (glaub das heißt so :-))
  14. 14: [0:05] <jakoch> ?
  15. 15: [0:05] <Rikku`on> plain old php object
  16. 16: [0:05] <Rikku`on> $user entity ist ja relativ "dumm"
  17. 17: [0:06] <jakoch> egal
  18. 18: [0:06] <Rikku`on> also die methode exchangeArray existiert nicht
  19. 19: [0:07] <jakoch> ja, anlegen und dort drin: $user->name = $validatedData['name'] usw.
  20. 20: [0:07] <jakoch> also alle daten an das model zuweisen
  21. 21: [0:07] <Rikku`on> die machen das dort weil, das tutorial über Zend\Db geht
  22. 22: [0:07] <Rikku`on> nicht Doctrine :-(
  23. 23: [0:07] <jakoch> das is bei doctrine auch nich anders
  24. 24: [0:08] <Rikku`on> aber das hätte nichts in der entität zu suchen
  25. 25: [0:08] <Rikku`on> müßte dann auch ein model anlegen
  26. 26: [0:09] <Rikku`on> btw. zend\db ist komisch, da muss man soviel selber machen
  27. 27: [0:09] <Rikku`on> :D
  28. 28: [0:09] <jakoch> https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Form.php#L217
  29. 29: [0:11] <Rikku`on> * Bind an object to the form * * Ensures the object is populated with validated values.
  30. 30: [0:11] <Rikku`on> das ist ja schon mal der richtige ansatz
  31. 31: [0:11] <jakoch> https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Form.php#L681
  32. 32: [0:13] <jakoch> also.. ich seh bei denen nich durch
  33. 33: [0:13] <jakoch> $form->bind($user);
  34. 34: [0:13] <jakoch> $form->bindValues($validatedData);
  35. 35: [0:13] <jakoch> mein letztes angebot
  36. 36: [0:14] <jakoch> wer hat sich denn das ausgedacht: "class Form extends Fieldset"
  37. 37: [0:17] <Rikku`on> das mit den fieldsets ist relativ cool
  38. 38: [0:17] <jakoch> relativ, ja
  39. 39: [0:17] <jakoch> :)
  40. 40: [0:17] <Rikku`on> aber bindvalues funktioniert auch nicht
  41. 41: [0:17] <jakoch> und wie renderst du form in ner tabelle?
  42. 42: [0:17] <jakoch> aber Fieldset bedeutet ja nich das es ein gerendertes fieldset is, sondern nur.. das formelement zusammengeh�ren
  43. 43: [0:17] <jakoch> ...
  44. 44: [0:18] <Rikku`on> jup
  45. 45: [0:18] <Rikku`on> hat wenig mit dem html fieldset zu tun
  46. 46: [0:18] <jakoch> class Form extends FormelementCollection ,)
  47. 47: [0:22] <jakoch> https://github.com/dawinterfeldt/playground/blob/master/module/User/src/User/Form/Register.php#L14
  48. 48: [0:22] <jakoch> �hm
  49. 49: [0:22] <jakoch> deine form kennt doch die entity gar nich
  50. 50: [0:23] <jakoch> use \User\Entity\User;
  51. 51: [0:23] <jakoch> und dann wie ichs vorhin schonmal gesagt hatte ->setObject(new User);
  52. 52: [0:24] <jakoch> hinter den hydrator, sonst wei� der doch gar nich was da hydrated werden soll
  53. 53: [0:24] <Rikku`on> http://i49.tinypic.com/if4ntc.png
  54. 54: [0:24] <Rikku`on> hatte ich gemacht, nach dem du mich drauf hingewiesen hattest
  55. 55: [0:25] <jakoch> uff, so, inputfilter aus und classmethods true
  56. 56: [0:25] <jakoch> d.h. bedeutet wir schlie�en fehler durch den inputfilter aus und wollen das das zielobject �ber setName() etc bef�llt wird
  57. 57: [0:26] <jakoch> was macht er da?
  58. 58: [0:27] <Rikku`on> classmehods muss false
  59. 59: [0:27] <Rikku`on> https://github.com/zendframework/zf2/blob/master/library/Zend/Stdlib/Hydrator/ClassMethods.php#L32
  60. 60: [0:27] <Rikku`on> weil die properties sind nicht underscore seperated
  61. 61: [0:28] <jakoch> ok
  62. 62: [0:29] <Rikku`on> wenn ich den input filter ausmache:
  63. 63: [0:29] <Rikku`on> http://i45.tinypic.com/35am64i.png
  64. 64: [0:29] <jakoch> ok
  65. 65: [0:29] <jakoch> inputfilter is pflicht :)
  66. 66: [0:32] <jakoch> ok, aber die formvalidierung etc. war auch nich das problem
  67. 67: [0:32] <jakoch> wir kommen ja bis hinter isValid() und k�nnen $validatedData dumpen
  68. 68: [0:33] <Rikku`on> und das email feld wird ja populated
  69. 69: [0:33] <Rikku`on> nur die anderen nicht
  70. 70: [0:33] <Rikku`on> die blöden die
  71. 71: [0:37] <jakoch> warum muss man eigentlich required zweimal definieren?
  72. 72: [0:38] <jakoch> https://github.com/dawinterfeldt/playground/blob/master/module/User/src/User/Form/Register.php#L25
  73. 73: [0:38] <Rikku`on> das erste ist nur das html5 attribute
  74. 74: [0:38] <Rikku`on> das zweite ist wirklich der filter, das es auch wirklich übertragen wurde
  75. 75: [0:39] <Rikku`on> html5 attribute "required="required"
  76. 76: [0:39] <jakoch> aha.. wenn ich required auf nem formelement setze, dann is das logisch das html/js auch clientseitig required pr�fen und server seitig auch
  77. 77: [0:39] <jakoch> d.h. die inputfilter specification wird innerhalb der formelement definition gemacht
  78. 78: [0:40] <jakoch> zumindest bei meinem framework
  79. 79: [0:40] <jakoch> aber zend macht das um flexibler zu sein
  80. 80: [0:40] <Rikku`on> klingt logisch, muss aber nicht für alle zutreffen
  81. 81: [0:40] <jakoch> :)
  82. 82: [0:41] <Rikku`on> wäre doch doof, wenn man das nicht möchte -> client und serverseitig <- aber es gibt keine option das zu unterbinden
  83. 83: [0:41] <Rikku`on> dann doch lieber so
  84. 84: [0:41] <Rikku`on> macht man beide parteien glücklich
  85. 85: [0:42] <jakoch> muss man doch gar nich, wenn ich den anwendungsfall f�r die trennung nich kenne, dann mach ich das als konvention, immer client und server, fertig
  86. 86: [0:42] <jakoch> es gibt viele solche sachen und man kann es nich jedem recht machen
  87. 87: [0:43] <jakoch> das sind dann so kleine nuancen die frameworks eben anders machen
  88. 88: [0:43] <jakoch> ich h�tte kein problem damit dann beim formelement define noch nen atttribute 'no-clientside-validation' anzugeben
  89. 89: [0:44] <jakoch> bzw.. 'clientside-validation' => true.. naja du verstehst was ich meine
  90. 90: [0:44] <Rikku`on> gestern hast dich noch beschwert das sich die namen ja kein schwein merken kann :D
  91. 91: [0:45] <Rikku`on> ja, aber man kanns nie allen recht machen
  92. 92: [0:45] <jakoch> du ich hab nen formbuilder.. der frag den user und zeigt alle verf�gbaren werte an
  93. 93: [0:45] <Rikku`on> den benutzt nur keiner ^^
  94. 94: [0:45] <jakoch> abwarten
  95. 95: [0:45] <Rikku`on> leute und apps sind halt zu unterschiedlich
  96. 96: [0:46] <jakoch> joar
  97. 97: [0:46] <jakoch> also ich seh den fehler nich in deiner app nich
  98. 98: [0:46] <jakoch> evtl. k�nnen die jungs bei zftalk.2 dir weiterhelfen
  99. 99: [0:48] <Rikku`on> jo, werde das morgen nochmal durchgehen
  100. 100: [0:48] <jakoch> http://samminds.com/2012/07/a-blog-application-part-1-working-with-doctrine-2-in-zend-framework-2/
  101. 101: [0:48] <Rikku`on> und sonst mal da anklingeln
  102. 102: [0:49] <jakoch> tausch mal den hydrator
  103. 103: [0:49] <jakoch> use DoctrineORMModule\StdLib\Hydrator\DoctrineEntity;
  104. 104: [0:50] <jakoch> $this->setHydraotr(new DoctrineEntity($em))->setObject(new User);
  105. 105: [0:50] <Rikku`on> jo, wollt ich eben schon
  106. 106: [0:50] <jakoch> es kann quasi nur das sein
  107. 107: [0:50] <Rikku`on> aber dann muss ich den $em injecten
  108. 108: [0:50] <Rikku`on> probiere das mal eben
  109. 109: [1:00] <Rikku`on> genau das gleiche wie vorher :D
  110. 110: [1:06] <jakoch> hmm
  111. 111: [1:07] <jakoch> https://github.com/dawinterfeldt/playground/blob/master/module/User/src/User/Form/Register.php#L22 adde da mal 'use_as_base_fieldset' => true darunter
  112. 112: [1:08] <jakoch> �ndert das was?
  113. 113: [1:09] <Rikku`on> nope leider nicht
  114. 114: [1:12] <Rikku`on> werde das mal morgen mit fieldset umsetzen
  115. 115: [1:12] <Rikku`on> so wie in dem artikel
  116. 116: [1:13] <jakoch> du meinst die eingabefelder als fieldset und dann das fieldset in die form, ja?
  117. 117: [1:13] <Rikku`on> und mal gucken, ob es dann besser wird
  118. 118: [1:13] <Rikku`on> jup
  119. 119: [1:14] <Rikku`on> das schlimmste ist ja, das ein value gesetzt wird
  120. 120: [1:14] <Rikku`on> wenn jetzt alle nicht da wären ... würde ich sagen ... mkay
  121. 121: [1:16] <jakoch> http://i46.tinypic.com/wmnwcy.png
  122. 122: [1:16] <jakoch> also die values hast du doch
  123. 123: [1:17] <jakoch> so jetzt k�nen wir noch die folgenden sachen machen
  124. 124: [1:17] <jakoch> bindOnValidate auf true setzen
  125. 125: [1:17] <Rikku`on> also ich meinte ein value was in das user objekt geschuppst wird
  126. 126: [1:18] <Rikku`on> das email value
  127. 127: [1:19] <Rikku`on> bindOnValidate auch nüschts
  128. 128: [1:27] <Rikku`on> danke fürs helfen
  129. 129: [1:27] <Rikku`on> denke morgen werd ich es knacken
  130. 130: [1:27] <Rikku`on> aber für heute soll erstmal schluss sein
  131. 131: [1:27] <Rikku`on> stehen schon die haare zu berge :D
  132. 132: [1:27] <jakoch> nee, also
  133. 133: [1:28] <jakoch> nich daf�r
  134. 134: [1:28] <jakoch> mach mal innerhalb von isValid() echo $form->email;
  135. 135: [1:28] <jakoch> eigentlich sollte er dir dann die email ausspucken
  136. 136: [1:30] <Rikku`on> nope... property existiert nicht
  137. 137: [1:32] <jakoch> var_dump($form->data);
  138. 138: [1:33] <Rikku`on> aber bei $form->get('email') bekomme ich das email objekt
  139. 139: [1:35] <jakoch> na drin sind die daten ja.. http://i46.tinypic.com/wmnwcy.png
  140. 140: [1:35] <jakoch> nur der hydrator holt sie nicht raus... denk ich mal
  141. 141: [1:36] <jakoch> btw is schade, dass doctrine2 kein first class citizen im zf2 is.. die bleiben bei ihrem db kram
  142. 142: [1:38] <Rikku`on> jo, finde ich auch
  143. 143: [1:38] <Rikku`on> hat zeev wohl was dagegen
  144. 144: [1:39] <jakoch> der k�nig im zendland?
  145. 145: [1:39] <Rikku`on> wobei es gibt sicherlich auch usecase wo d2 nicht geeignet ist, oder zu überladen ist
  146. 146: [1:39] <jakoch> joar, da nimmt man dann notorm
  147. 147: [1:41] <Rikku`on> wobei es gibt ja doctrinemodule und doctrineormmodule
  148. 148: [1:41] <Rikku`on> und durch die architektur von zf2 ist das kein problem die nahtlos zu integrieren
  149. 149: [1:42] <Rikku`on> weiß der geier warum es zwei repos sind :D
  150. 150: [1:42] <Rikku`on> wobei zf2 ja dependency zu doctrine/common hat, wegen annotations
  151. 151: [1:43] <Rikku`on> also immer hin schon mal
  152. 152: [1:45] <Rikku`on> und letztendlich macht sf2 nichts anderes, die bauen auch nur ne bridge zwischen d2 & sf2
  153. 153: [1:46] <jakoch> also hier isses fest verdrahtet.. ohne d2 geht es immo jedenfalls nicht
  154. 154: [1:46] <jakoch> schon die session ist von d2 abh�ngig
  155. 155: [1:47] <Rikku`on> für die die d2 ohnehin benutzen wollen gut, für die die es nicht wollen, werden lieber die finger davon lassen
  156. 156: [1:48] <jakoch> so isses
  157. 157: [1:48] <jakoch> aber wenn man den session-layer gegen memcached austauscht und d2 nicht initalisiert, dann kommt man drum rum
  158. 158: [1:50] <Rikku`on> sag das nicht mir, sad das dein potenziellen nutzern :D
  159. 159: [1:50] <Rikku`on> übrigens
  160. 160: [1:51] <jakoch> ich schreibs auf ein leuchtbanner an der A2 :)
  161. 161: [1:51] <jakoch> �brigens.. h�rt sich nich gut an
  162. 162: [1:51] <Rikku`on> git clone http://github.com/dawinterfeldt/playground.git /playground
  163. 163: [1:51] <Rikku`on> cd playground
  164. 164: [1:51] <Rikku`on> php composer.phar install
  165. 165: [1:52] <Rikku`on> und du bist auf dem gleichen stand wie ich
  166. 166: [1:52] <Rikku`on> :D
  167. 167: [1:52] <jakoch> das soll ich machen... das installiert doch dieses zf2 hier
  168. 168: [1:52] <jakoch> das geht nun wirklich nicht
  169. 169: [1:52] <jakoch> :)
  170. 170: [1:52] <Rikku`on> es schiebt es temporär auf deine platte, ja
  171. 171: [1:52] <Rikku`on> :D
  172. 172: [1:54] <Rikku`on> nah .. wie gesagt, werde mich da morgen nochmal hinterklemmen
  173. 173: [1:54] <Rikku`on> hab alles schon hundet mal abgesucht, also ein typo sollte es nicht sein
  174. 174: [1:54] <jakoch> das wird irgendeine kleinigkeit sein, path zur entity nich gefunden, hydrator bug etc
  175. 175: [1:54] <Rikku`on> ich hoffe kein bug
  176. 176: [1:55] <Rikku`on> path kann nicht sein, sonst hätte ich ich nicht instanzieren können
  177. 177: [1:55] <Rikku`on> hydrator bug, perhaps
  178. 178: [1:55] <Rikku`on> hope not :D
  179. 179: [1:56] <jakoch> https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Form.php#L681
  180. 180: [1:56] <jakoch> also der schl�ssel zu den daten is extract()
  181. 181: [1:56] <jakoch> laut screeny is baseFieldset null
  182. 182: [1:57] <jakoch> das stimmt auch, weil du keine fieldsets benutzt
  183. 183: [1:58] <jakoch> dann ruft er parent:extract() auf... fas Fieldset::extract() is
  184. 184: [1:59] <jakoch> https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Fieldset.php#L552
  185. 185: [2:00] <jakoch> so da seh ich dann doch ein problem
  186. 186: [2:02] <jakoch> setzt mal den step debugger auf zeile #554
  187. 187: [2:03] <jakoch> oder pack $values in #562 in die watchliste
  188. 188: [2:04] <Rikku`on> kk...mom
  189. 189: [2:05] <jakoch> https://github.com/zendframework/zf2/blob/master/tests/Zend/Form/FieldsetTest.php
  190. 190: [2:05] <jakoch> tja test driven entwickelt is das jedenfalls nich
  191. 191: [2:05] <jakoch> extract untested
  192. 192: [2:10] <jakoch> ich muss ins bett
  193. 193: [2:10] <Rikku`on> ok
  194. 194: [2:10] <Rikku`on> ich sag dir morgen wie es ausgegangen ist
  195. 195: [2:10] <Rikku`on> :D
  196. 196: [2:10] <jakoch> hydrator!! gn8
  197. 197: [2:11] <Rikku`on> n8
  198. 198: [2:25] * Rikku`on (~Daniel@31.16.145.254) Quit (Read error: EOF from client)
  199. 199: [9:17] * t4r (~t4r@2.174.221.151) has joined #clansuite
  200. 200: [9:17] * t4r (~t4r@2.174.221.151) has left #clansuite
  201. 201: [10:11] <jakoch> http://red-root.com/sandbox/holmes/
  202. 202: [11:59] * Rikku`on (~Daniel@31.16.145.254) has joined #clansuite
  203. 203: [11:59] <Rikku`on> o/
  204. 204: [12:04] <jakoch> hey
  205. 205: [12:04] <jakoch> und? war die nachtschicht erfolgreich?
  206. 206: [12:05] <Rikku`on> nah, hab auch gleich bubu gemacht :D
  207. 207: [12:05] <Rikku`on> geht gleich weiter
  208. 208: [12:07] <jakoch> hrhr
  209. 209: [12:07] <jakoch> :)
  210. 210: [14:42] <Rikku`on> http://i47.tinypic.com/hsovif.png
  211. 211: [14:42] <Rikku`on> https://github.com/dawinterfeldt/playground/commit/f0661136f14ab7627bd4f78c1c50987bf583e8c3
  212. 212: [14:42] <Rikku`on> \o/
  213. 213: [15:11] <jakoch> d.h. fieldset in form is pflicht
  214. 214: [15:13] <Rikku`on> dont know
  215. 215: [15:13] <Rikku`on> so ich ich das zuerst machen wollte, habe ich nirgends gesehen
  216. 216: [15:13] <Rikku`on> irgendwie machen das alle mit fieldset
  217. 217: [15:13] <Rikku`on> und es scheint zu funktionieren
  218. 218: [16:59] * wpnxm-bot (~wpnxm-bot@sh2.rs.github.com) has joined #clansuite
  219. 219: [16:59] <wpnxm-bot> [WPN-XM] jakoch pushed 1 new commit to develop: https://github.com/jakoch/WPN-XM/commit/f725d70869c448adcfb1f0f50497563ac964bcdd
  220. 220: [16:59] <wpnxm-bot> [WPN-XM/develop] fastcgi_read_timeout increased for step debugging - jakoch
  221. 221: [16:59] * wpnxm-bot (~wpnxm-bot@sh2.rs.github.com) has left #clansuite
  222. 222: [17:23] * ArsiRC (~ArsiRC@ArsiRC.users.quakenet.org) Quit (G-lined)
  223. 223: [17:27] <jakoch> hallo, wie werd ich die numeric keys in dem array los? gibts da irgendwelche regexp tricks oder flags? m�chte nur den string key im array haben. http://ideone.com/OWayy
  224. 224: [17:27] <jakoch> ups, wrong chan
  225. 225: [18:39] <CIA-1> Clansuite: New Commit: Revision #[48eecb5] by jakoch
  226. 226: [18:39] <CIA-1> Clansuite: File(s): Clansuite/ (13 files in 10 dirs)
  227. 227: [18:39] <CIA-1> Clansuite: Comment: bugfixing the REST routing - https://github.com/jakoch/Clansuite/commit/48eecb549254390ae05354845509af5be6c95619
  228. 228: [18:39] <CIA-1> Clansuite: View (delayed): http://trac.clansuite.com/changeset/48eecb5
  229. 229: [20:43] <Rikku`on> wann landet eigentlich Curiosity ?
  230. 230: [20:43] <Rikku`on> heute nacht unserer Zeit?
  231. 231: [20:46] <Rikku`on> ah .. 7.31 Uhr MEZ morgen früh
  232. 232: [20:46] <Rikku`on> wir sind ja MEZ+1
  233. 233: [20:46] <Rikku`on> da könnte ich schon wach sein
  234. 234: [20:46] <Rikku`on> :D
  235. 235: [20:48] <Rikku`on> 1,9 Mrd € kostet die komplette Mission
  236. 236: [20:49] <Rikku`on> und die wollen wasser auf dem mars finden, dabei gibt es auf der erde noch länder die kein fließend, sauberes wasser haben
  237. 237: [20:49] <Rikku`on> :-/
  238. 238: [20:51] <Rikku`on> trotzdem spannend ^^
  239. 239: [23:38] * Rikku`on (~Daniel@31.16.145.254) Quit (Read error: EOF from client)

Links of Sonntag, 05. August 2012

1) http://trac.clansuite.com/changeset/48eecb5
2) https://github.com/jakoch/Clansuite/commit/48eecb549254390ae05354845509af5be6c95619
3) http://ideone.com/OWayy
4) https://github.com/jakoch/WPN-XM/commit/f725d70869c448adcfb1f0f50497563ac964bcdd
5) https://github.com/dawinterfeldt/playground/commit/f0661136f14ab7627bd4f78c1c50987bf583e8c3
6) http://i47.tinypic.com/hsovif.png
7) http://red-root.com/sandbox/holmes/
8) https://github.com/zendframework/zf2/blob/master/tests/Zend/Form/FieldsetTest.php
9) https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Fieldset.php#L552
10) https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Form.php#L681
11) http://github.com/dawinterfeldt/playground.git
12) http://i46.tinypic.com/wmnwcy.png
13) https://github.com/dawinterfeldt/playground/blob/master/module/User/src/User/Form/Register.php#L22
14) http://samminds.com/2012/07/a-blog-application-part-1-working-with-doctrine-2-in-zend-framework-2/
15) https://github.com/dawinterfeldt/playground/blob/master/module/User/src/User/Form/Register.php#L25
16) http://i45.tinypic.com/35am64i.png
17) https://github.com/zendframework/zf2/blob/master/library/Zend/Stdlib/Hydrator/ClassMethods.php#L32
18) http://i49.tinypic.com/if4ntc.png
19) https://github.com/dawinterfeldt/playground/blob/master/module/User/src/User/Form/Register.php#L14
20) https://github.com/zendframework/zf2/blob/master/library/Zend/Form/Form.php#L217
21) https://github.com/akrabat/zf2-tutorial/blob/master/module/Album/src/Album/Model/Album.php#L21
22) http://clansuite.com
23) http://www.youtube.com/watch?v=JPqFNQCXF9Y
24) https://github.com/doctrine/DoctrineModule/blob/master/src/DoctrineModule/Stdlib/Hydrator/DoctrineObject.php

These logs were automatically created by k-logbot on chat.freenode.net using the Clansuite IRC LogBot. Find the project at Github.