tag:blogger.com,1999:blog-30230049348985644352024-03-14T07:35:13.084+02:00Let's CodeDemonstrating Test-Driven Development and Evolutionary Design in the long runEsko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comBlogger438125tag:blogger.com,1999:blog-3023004934898564435.post-30042696053701789582015-03-30T08:22:00.000+03:002015-03-30T08:22:07.668+03:00TDD Tetris Tutorial #7: TGM Rotation Rules<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>Replacing our previously written rotation algorithm with a simpler and more flexible implementation, so that we can change our game to use the rotation rules from Tetris: The Grand Master.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/c26VoVW46Ik?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23007%20-%20TGM%20Rotation%20Rules.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-85838852893300116052015-03-29T08:05:00.000+03:002015-03-29T08:05:35.005+03:00TDD Tetris Tutorial #6: Rotating a Falling Piece<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>More player controls. We implement rotating the falling pieces, including also support for wallkicks.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/eODxX5-IEEA?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23006%20-%20Rotating%20a%20Falling%20Piece.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-36052747252604851612015-03-28T08:37:00.000+02:002015-03-28T08:37:24.610+02:00TDD Tetris Tutorial #5: Moving a Falling Piece<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>Time to put the player in control. We implement moving the falling pieces, within the bounds of available space on the game board.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/F0TImszD4IM?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23005%20-%20Moving%20a%20Falling%20Piece.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-5735405714436638602015-03-25T21:34:00.000+02:002015-03-25T21:34:36.973+02:00TDD Tetris Tutorial #4: Falling Pieces<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>We have implemented falling blocks and rotatable pieces in isolation. Now let's put them together by implementing arbitrarily shaped falling pieces.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/nU3-sCxQMq0?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23004%20-%20Falling%20Pieces.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-84954039190085818842015-03-23T23:41:00.000+02:002015-03-23T23:41:57.227+02:00TDD Tetris Tutorial #3: Rotating Tetrominoes<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>With a generic piece rotation algorithm at hand, it'll be easier to implement rotating Tetris pieces.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/iD2oZ-K9seQ?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23003%20-%20Rotating%20Tetrominoes.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-39987047383387844732015-03-22T12:12:00.000+02:002015-03-22T12:12:50.163+02:00TDD Tetris Tutorial #2: Rotating Pieces of Blocks<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>Another core feature of Tetris is that it's possible to rotate the pieces. Let's write a generic algorithm for rotating arbitrary shapes. That should bring us closer toward a game of Tetris.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/7rVd1aK7DJY?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23002%20-%20Rotating%20Pieces%20of%20Blocks.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-73553746329876765782015-03-21T19:11:00.000+02:002015-03-21T19:11:45.279+02:00TDD Tetris Tutorial #1: Falling Blocks<p><i>This screencast series shows how to go through the <a href="https://github.com/orfjackal/tdd-tetris-tutorial">TDD Tetris Tutorial</a> where you can learn Test-Driven Development by at first writing code to pass pre-written tests, so that it will be easier to write your own tests when the time for it comes.</i></p>
<p>A core feature of Tetris is that there are pieces falling down. To start small, let's focus on pieces which consist of a single 1x1 block.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/fmddhJQIIcc?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/TDD%20Tetris%20Tutorial%20%23001%20-%20Falling%20Blocks.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-18504147818311343062015-03-20T23:16:00.000+02:002015-03-20T23:16:22.644+02:00Let's Code Jumi #354: NIO.2 Migration (Part 4)<p><iframe width="480" height="330" src="//www.youtube.com/embed/zF0kufhlChw?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23354%20-%20NIO.2%20Migration%20%28Part%204%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-52192772815585543852015-02-28T22:33:00.000+02:002015-02-28T22:33:53.547+02:00Let's Code Jumi #353: NIO.2 Migration (Part 3)<p><iframe width="480" height="330" src="//www.youtube.com/embed/bSU70KMJ6gk?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23353%20-%20NIO.2%20Migration%20%28Part%203%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-43828983441726452492015-02-25T22:40:00.000+02:002015-02-25T22:40:29.348+02:00Let's Code Jumi #352: NIO.2 Migration (Part 2)<p><iframe width="480" height="330" src="//www.youtube.com/embed/lnA4JposQlo?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23352%20-%20NIO.2%20Migration%20%28Part%202%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-18997990739785496662015-02-11T22:03:00.000+02:002015-02-11T22:04:52.615+02:00Let's Code Jumi #351: NIO.2 Migration (Part 1)<p>Java 7 comes with a new file I/O API (NIO.2), which has numerous improvements over <code>java.io.File</code>. Upgrading to the new API is best done in small steps, the same way as when <a href="http://blog.orfjackal.net/2013/03/refactoring-primitive-obsession.html">refactoring to remove primitive obsession</a>.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/RR3s-IMpAus?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23351%20-%20NIO.2%20Migration%20%28Part%201%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-82157404137672729872015-02-01T15:22:00.000+02:002015-02-01T15:22:25.848+02:00Let's Code Jumi #350: Java 7 Language Level<p>It turns out that changing a project's language level is not as simple as it seems. Changing Maven's settings on a per-module basis is easy, but IntelliJ IDEA 11 doesn't support compiling multiple modules with mixed language levels (IIRC, newer IDEA versions do support it).</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/__T6gP2qJkM?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23350%20-%20Java%207%20Language%20Level.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-67602344586211783982015-01-25T22:51:00.000+02:002015-01-25T22:51:23.506+02:00Let's Code Jumi #349: Bytecode Assertions (Part 3)<p><iframe width="480" height="330" src="//www.youtube.com/embed/YcAbGZH0sWU?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23349%20-%20Bytecode%20Assertions%20%28Part%203%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-4919068853576707212015-01-16T23:54:00.000+02:002015-01-16T23:54:36.238+02:00Let's Code Jumi #348: Bytecode Assertions (Part 2)<p><iframe width="480" height="330" src="//www.youtube.com/embed/yKXW0GtoKeI?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23348%20-%20Bytecode%20Assertions%20%28Part%202%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-39501779303706854222015-01-14T22:20:00.000+02:002015-01-14T22:20:51.266+02:00Let's Code Jumi #347: Bytecode Assertions (Part 1)<p>A too high Java class file version can break its consumers, so it's worth writing a test for. At the same time we can make it easier to write assertions for all class files in a JAR file.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/vVUcLJIlrwA?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23347%20-%20Bytecode%20Assertions%20%28Part%201%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-15441286266421362962015-01-05T23:34:00.000+02:002015-01-05T23:34:44.294+02:00Let's Code Jumi #346: Generic Properties (Part 3)<p><iframe width="480" height="330" src="//www.youtube.com/embed/ErojCIswlYE?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23346%20-%20Generic%20Properties%20%28Part%203%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-75704872959177207342015-01-02T00:27:00.000+02:002015-01-02T00:27:22.466+02:00Let's Code Jumi #345: Generic Properties (Part 2)<p><iframe width="480" height="330" src="//www.youtube.com/embed/Zu8WhZAZeUA?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23345%20-%20Generic%20Properties%20%28Part%202%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-32894434142806885072014-12-27T00:43:00.000+02:002014-12-27T00:43:43.732+02:00Let's Code Jumi #344: Generic Properties (Part 1)<p>Refactoring towards a generic way of representing <code>DaemonConfiguration</code>'s bean properties, to convert them to and from system properties.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/rOp5ZEYdwuI?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23344%20-%20Generic%20Properties%20%28Part%201%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-53296882363900010422014-12-14T22:42:00.000+02:002014-12-14T22:42:43.289+02:00Let's Code Jumi #343: Phase Change Pattern<p><a href="http://blog.orfjackal.net/2014/12/phase-change-pattern-for-mutating.html">I invented a design pattern</a> which makes it easy to update immutable objects without language support, by providing a way to make an object immutable and back again mutable.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/JTaxxrjf-mQ?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23343%20-%20Phase%20Change%20Pattern.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-63861234537314262652014-12-11T23:46:00.000+02:002014-12-11T23:46:33.876+02:00Let's Code Jumi #342: Unit Tests (Part 2)<p><iframe width="480" height="330" src="//www.youtube.com/embed/I7lJ9duhJpY?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23342%20-%20Unit%20Tests%20%28Part%202%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-24490457045852250752014-12-02T01:47:00.000+02:002014-12-02T01:47:23.011+02:00Let's Code Jumi #341: Unit Tests (Part 1)<p>I have a bunch of ideas how to still refactor the daemon and suite configuration classes, but a prerequisite for quick refactoring is good unit test coverage.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/RWtksk32Yzw?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23341%20-%20Unit%20Tests%20%28Part%201%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-49873792911217417992014-10-28T13:38:00.000+02:002014-10-28T13:38:01.850+02:00Let's Code Jumi #340: Daemon Configuration (Part 3)<p><iframe width="480" height="330" src="//www.youtube.com/embed/OvU9RFHeL2k?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23340%20-%20Daemon%20Configuration%20%28Part%203%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-38241955786222987282014-10-23T23:05:00.000+03:002014-10-23T23:05:57.135+03:00Let's Code Jumi #339: Daemon Configuration (Part 2)<p><iframe width="480" height="330" src="//www.youtube.com/embed/MDSDYKwdAss?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23339%20-%20Daemon%20Configuration%20%28Part%202%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-50152731636785664102014-10-19T22:44:00.001+03:002014-10-19T22:44:20.980+03:00Let's Code Jumi #338: Daemon Configuration (Part 1)<p>The <code>SuiteConfiguration</code> class is a bit non-cohesive, because it holds also daemon-related parameters which are used differently from suite-related parameters.</p>
<p><iframe width="480" height="330" src="//www.youtube.com/embed/i61yiBrg4rs?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23338%20-%20Daemon%20Configuration%20%28Part%201%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.comtag:blogger.com,1999:blog-3023004934898564435.post-54788905946092646222014-10-01T21:36:00.000+03:002014-10-01T21:36:18.104+03:00Let's Code Jumi #337: Suite Configuration (Part 3)<p><iframe width="480" height="330" src="//www.youtube.com/embed/1gKJM5SEwA0?rel=0&vq=hd1440" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://download.orfjackal.net/lets-code/Let%27s%20Code%20Jumi%20%23337%20-%20Suite%20Configuration%20%28Part%203%29.mp4">Download as MP4</a></p>
<p><a href="http://www.orfjackal.net/lets-code">Episode Archive</a></p>Esko Luontolahttp://www.blogger.com/profile/03956946511109435404noreply@blogger.com