alvinalexander.com - scala, java, linux, mac os x, iphone, perl, drupal, tutorials http://alvinalexander.com/rss.xml en Privacy policy updates http://alvinalexander.com/misc/twitter-godaddy-etsy-facebook-provacy-policy-updates <span class="field field--name-title field--type-string field--label-hidden">Privacy policy updates</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 25, 2018 - 7:43pm</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Wow, in the last 48 hours Twitter, GoDaddy, Etsy, and other websites/businesses have sent me emails saying that their privacy policies have changed. The stuff Facebook has gone through (or created, depending on your perspective) seem to be having a rapid ripple effect on the industry.</p> <!--break--></div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/technology" hreflang="en">technology</a></div> <div class="field field--name-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/taxonomy/term/925" hreflang="en">facebook</a></div> <div class="field__item"><a href="/category/tags/twitter" hreflang="en">twitter</a></div> <div class="field__item"><a href="/category/tags/etsy" hreflang="en">etsy</a></div> <div class="field__item"><a href="/taxonomy/term/2133" hreflang="en">privacy</a></div> <div class="field__item"><a href="/taxonomy/term/11797" hreflang="en">privacy policy</a></div> <div class="field__item"><a href="/category/tags/april" hreflang="en">april</a></div> <div class="field__item"><a href="/taxonomy/term/11351" hreflang="en">2018</a></div> <div class="field__item"><a href="/category/tags/godaddy" hreflang="en">godaddy</a></div> </div> Thu, 26 Apr 2018 01:43:05 +0000 alvin 9823 at http://alvinalexander.com A Play Framework login/authentication example project http://alvinalexander.com/scala/play-framework-login-authentication-example-project <span class="field field--name-title field--type-string field--label-hidden">A Play Framework login/authentication example project</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Without an example it can be hard to understand how user authentication works in a <a href="https://www.playframework.com/">Play Framework</a> application, so I just created a project on Github named <a href="https://github.com/alvinj/PlayFrameworkLoginAuthenticationExample">PlayFrameworkLoginAuthenticationExample</a> that demonstrates one way to implement login authentication in a Play Framework 2.6 application.</p> <!--break--> <p>I can write more about it if people are interested, but the highlights go like this:</p> <ul><li>If you have a current version of SBT installed, you can download the project and immediately run it with the <code>sbt run</code> command</li> <li>I removed all the database-access code from the project, so you can immediately access the <em>http://localhost:9000/users/login</em> URL</li> <li>When you access that URL the <em>routes</em> file sends control to the <code>showLoginForm</code> method in the <code>UserController</code> class; it displays the <em>userLogin.scala.html</em> template</li> <li>You can see in the <code>UserDao</code> that the username and password are both <code>foo</code></li> <li>When you attempt to login, the <em>routes</em> file sends the user form data to the <code>processLoginAttempt</code> in the <code>UserController</code> class</li> <li>If the login attempt succeeds, control is sent to the <code>showLandingPage</code> action in the <code>LandingPageController</code> class; it shows the <em>loginLandingPage.scala.html</em> template, which includes a “logout” link; it also shows a Flash message that the login succeeded</li> <li>User authentication is implemented in the <code>AuthenticatedUserAction</code> class</li> <li>To make sure that an action can only be accessed by an authenticated user, the method should use an instance of <code>AuthenticatedUserAction</code>, as shown by the <code>showLandingPage</code> method in the <code>LandingPageController</code> controller:</li> </ul><div> <pre> <code class="language-scala">def showLandingPage() = authenticatedUserAction { implicit request: Request[AnyContent] =&gt; Ok(views.html.loginLandingPage(logoutUrl)) }</code></pre> </div> <h2 id="toc_0">What it looks like</h2> <p>Here’s what this little starter application looks like. First, the login page:</p> <p><img alt="Play Framework authentication: Login page" data-entity-type="file" data-entity-uuid="adf1f83b-40ff-40cd-be7f-c18f4f8691ce" src="/sites/default/files/inline-images/1-play-framework-authentication-login-page.jpg" style="border: 1px solid #777; border-radius: 5px;" width="600" /></p> <p>Next, the simple landing page with the Flash message:</p> <p><img alt="Play Framework authentication: Landing page with Flash message" data-entity-type="file" data-entity-uuid="48163ee1-ee54-4621-ab4a-d0321d9ec863" src="/sites/default/files/inline-images/2-play-framework-authentication-landing-page.jpg" style="border: 1px solid #777; border-radius: 5px;" width="600" /></p> <p>Next, what you see when you log out:</p> <p><img alt="Play Framework authentication: Logout page" data-entity-type="file" data-entity-uuid="4b56d789-2d6f-41f6-8c97-bb3babe532fd" src="/sites/default/files/inline-images/3-play-framework-authentication-post-logout.jpg" style="border: 1px solid #777; border-radius: 5px;" width="600" /></p> <p>And finally, what you see if you attempt to access the landing page when you’re not logged in:</p> <p><img alt="Play Framework authentication: Landing page when you're not logged in" data-entity-type="file" data-entity-uuid="75136741-e11e-4d05-99d8-c1e177187683" src="/sites/default/files/inline-images/4-play-framework-authentication-landing-page-not-logged-in.jpg" style="border: 1px solid #777; border-radius: 6px;" width="600" /></p> <p>Admittedly not too exciting, but it shows the authentication basics.</p> <h2 id="toc_1">Summary</h2> <p>If you wanted to see an example of a Play Framework 2.6 login/authentication application, I hope <a href="https://github.com/alvinj/PlayFrameworkLoginAuthenticationExample">this project</a> is helpful. I think it follows the Play <a href="https://www.playframework.com/documentation/2.6.x/ScalaActionsComposition#Authentication">Action Composition docs</a> pretty faithfully. If people have questions about the project I’ll be glad to write more here, but I hope this is helpful as is.</p> <p>P.S. — If you’re writing a Play Framework server application with a JavaScript client front-end you’ll have to do things a little differently, but hopefully this example can help a little bit in that use case as well.</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 24, 2018 - 2:44pm</span> <div class="field field--name-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/category/tags/scala" hreflang="en">scala</a></div> <div class="field__item"><a href="/category/tags/play-framework" hreflang="en">play framework</a></div> <div class="field__item"><a href="/taxonomy/term/1627" hreflang="en">login</a></div> <div class="field__item"><a href="/taxonomy/term/184" hreflang="en">authentication</a></div> <div class="field__item"><a href="/taxonomy/term/2158" hreflang="en">project</a></div> <div class="field__item"><a href="/taxonomy/term/11792" hreflang="en">starter project</a></div> </div> <section class="field field--name-comment field--type-comment field--label-hidden comment-wrapper"> <h2 class="title comment-form__title">Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=9818&amp;2=comment&amp;3=comment" token="8L8JKnyqmdxI1VM3xCmJcNdZsJq_LM9nLu91dOm8EYw"></drupal-render-placeholder> </section> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/scala" hreflang="en">scala</a></div> Tue, 24 Apr 2018 20:44:24 +0000 alvin 9818 at http://alvinalexander.com The Mosaic web browser turned 25 http://alvinalexander.com/photos/mosaic-web-browser-25-years-old-april-1993-2018 <span class="field field--name-title field--type-string field--label-hidden">The Mosaic web browser turned 25</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>On April 22, 2018, the Mosaic web browser — the internet’s first major web browser — turned 25 years old. And I’m old enough to remember using it. (<a href="https://twitter.com/mit_csail/status/988186118242885637?s=12">Image from this tweet</a>.)</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 24, 2018 - 11:01am</span> <div class="field field--name-field-photo-d8 field--type-image field--label-above"> <div class="field__label">Photo D8</div> <div class="field__item"> <a href="http://alvinalexander.com/sites/default/files/2018-04/mosaic-web-browser-25-years-old.jpg"><img src="/sites/default/files/styles/preview/public/2018-04/mosaic-web-browser-25-years-old.jpg?itok=LgBqm3yh" width="480" height="403" alt="The Mosaic web browser turned 25" typeof="foaf:Image" class="image-style-preview" /> </a> </div> </div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/technology" hreflang="en">technology</a></div> <div class="field field--name-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/taxonomy/term/11791" hreflang="en">mosaic</a></div> <div class="field__item"><a href="/taxonomy/term/294" hreflang="en">browser</a></div> <div class="field__item"><a href="/category/tags/web-browser" hreflang="en">web browser</a></div> <div class="field__item"><a href="/taxonomy/term/1335" hreflang="en">internet</a></div> <div class="field__item"><a href="/taxonomy/term/9665" hreflang="en">1993</a></div> </div> </div> Tue, 24 Apr 2018 17:01:49 +0000 alvin 9817 at http://alvinalexander.com A Java method to round a float value to the nearest one-half value http://alvinalexander.com/source-code/java-method-round-float-nearest-half-value <span class="field field--name-title field--type-string field--label-hidden">A Java method to round a float value to the nearest one-half value</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 24, 2018 - 10:43am</span> Tue, 24 Apr 2018 16:43:15 +0000 alvin 8461 at http://alvinalexander.com http://alvinalexander.com/source-code/java-method-round-float-nearest-half-value#comments Paraprosdokians http://alvinalexander.com/funny/paraprosdokians-winston-churchill <span class="field field--name-title field--type-string field--label-hidden">Paraprosdokians</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>From a recent email:</p> <p>Paraprosdokians are figures of speech in which the latter part of a sentence or phrase is surprising or unexpected; frequently humorous. Winston Churchill loved them.<br />  <br /> 1. Where there's a will, I want to be in it.<br /> 2. The last thing I want to do is hurt you. But it's still on my list.<br /> 3. Since light travels faster than sound, some people appear bright until you hear them speak.<br /> 4. Knowledge is knowing a tomato is a fruit. Wisdom is not putting it in a fruit salad.<br /> 5. To steal ideas from one person is plagiarism. To steal from many is research.<br /> 6. I didn't say it was your fault, I said I was blaming you.<br /> 7. In filling out an application, where it says, 'In case of emergency, Notify: ________', I put 'DOCTOR'.<br /> 8. Women will never be equal to men until they can walk down the street with a bald head and a beer gut, and still think they are sexy.<br /> 9. You do not need a parachute to skydive. You only need a parachute to skydive twice.<br /> 10. I used to be indecisive; now I'm not so sure.<br /> 11. To be sure of hitting the target, shoot first and call whatever you hit the target.<br /> 12. I'm supposed to respect my elders, but now it’s getting harder and harder for me to find one.<br /> 13. Outside of a dog, a book is a man's best friend. Inside of a dog it's too dark to read. ~ Groucho Marx</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 23, 2018 - 7:35pm</span> <div class="field field--name-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/category/tags/winston-churchill" hreflang="en">winston churchill</a></div> <div class="field__item"><a href="/category/tags/paraprosdokians" hreflang="en">paraprosdokians</a></div> <div class="field__item"><a href="/taxonomy/term/1240" hreflang="en">humor</a></div> <div class="field__item"><a href="/taxonomy/term/1064" hreflang="en">funny</a></div> <div class="field__item"><a href="/taxonomy/term/11790" hreflang="en">groucho marx</a></div> </div> <section class="field field--name-comment field--type-comment field--label-hidden comment-wrapper"> <h2 class="title comment-form__title">Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=4364&amp;2=comment&amp;3=comment" token="8jOXI2xQNA8MqsEjksqm_asiyUc07s8MHSD40pkmMy8"></drupal-render-placeholder> </section> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/funny" hreflang="en">funny</a></div> Tue, 24 Apr 2018 01:35:14 +0000 alvin 4364 at http://alvinalexander.com Complaining is not a strategy http://alvinalexander.com/misc/complaining-is-not-a-strategy-jeff-bezos <span class="field field--name-title field--type-string field--label-hidden">Complaining is not a strategy</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 22, 2018 - 6:00pm</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>“Complaining is not a strategy. You have to work with the world as you find it, not as you would have it be.”</p> <p>~ Jeff Bezos</p> <!--break--></div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/personal" hreflang="en">personal</a></div> <div class="field field--name-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/taxonomy/term/175" hreflang="en">attitude</a></div> <div class="field__item"><a href="/taxonomy/term/10665" hreflang="en">positive attitude</a></div> <div class="field__item"><a href="/taxonomy/term/11789" hreflang="en">complaining</a></div> <div class="field__item"><a href="/category/tags/complaint" hreflang="en">complaint</a></div> <div class="field__item"><a href="/category/tags/jeff-bezos" hreflang="en">jeff bezos</a></div> <div class="field__item"><a href="/category/tags/april" hreflang="en">april</a></div> <div class="field__item"><a href="/taxonomy/term/11351" hreflang="en">2018</a></div> </div> Mon, 23 Apr 2018 00:00:29 +0000 alvin 9815 at http://alvinalexander.com Learning how to learn (Barbara Oakley) http://alvinalexander.com/misc/learning-how-to-learn-barbara-oakley <span class="field field--name-title field--type-string field--label-hidden">Learning how to learn (Barbara Oakley)</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 22, 2018 - 5:55pm</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>If you struggle to learn new things, check out <a href="https://www.fs.blog/2018/04/learning-barbara-oakley/">this podcast interview with Barbara Oakley</a>. A few years ago I read her book, <a href="https://amzn.to/2Jiat57">A Mind for Numbers: How to Excel at Math and Science (Even If You Flunked Algebra)</a>, and it was helpful to me, and even influenced my book, <a href="/scala/functional-programming-simplified-book">Functional Programming, Simplified</a>.</p> <!--break--></div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/personal" hreflang="en">personal</a></div> <div class="field field--name-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/taxonomy/term/1549" hreflang="en">learn</a></div> <div class="field__item"><a href="/taxonomy/term/1550" hreflang="en">learning</a></div> <div class="field__item"><a href="/taxonomy/term/11788" hreflang="en">barbara oakley</a></div> <div class="field__item"><a href="/taxonomy/term/1892" hreflang="en">numbers</a></div> <div class="field__item"><a href="/category/tags/april" hreflang="en">april</a></div> <div class="field__item"><a href="/taxonomy/term/11351" hreflang="en">2018</a></div> </div> Sun, 22 Apr 2018 23:55:31 +0000 alvin 9814 at http://alvinalexander.com Disabling Drupal 8 page caching significantly increases CPU use http://alvinalexander.com/photos/disabling-drupal-8-page-caching-increases-cpu-use-comments-spam <span class="field field--name-title field--type-string field--label-hidden">Disabling Drupal 8 page caching significantly increases CPU use</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><a href="/photos/drupal-8-anti-spam-modules-caching-performance">As I noted five days ago</a>, Mollom went out of business so I had to switch this Drupal 8 website to use a different module to control comment spam. I ended up adding two modules that work together, but the side effect of using their best features is that they end up disabling Drupal 8 page caching. This image clearly shows the result that disabling page caching has on CPU use.</p> <!--break--></div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 22, 2018 - 2:53pm</span> <div class="field field--name-field-photo-d8 field--type-image field--label-above"> <div class="field__label">Photo D8</div> <div class="field__item"> <a href="http://alvinalexander.com/sites/default/files/2018-04/drupal-8-comments-cpu-usage.jpg"><img src="/sites/default/files/styles/preview/public/2018-04/drupal-8-comments-cpu-usage.jpg?itok=7LxsNw0V" width="480" height="198" alt="Disabling Drupal 8 page caching significantly increases CPU use" typeof="foaf:Image" class="image-style-preview" /> </a> </div> </div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/drupal" hreflang="en">drupal</a></div> <div class="field field--name-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/taxonomy/term/774" hreflang="en">drupal</a></div> <div class="field__item"><a href="/category/tags/drupal-8" hreflang="en">drupal 8</a></div> <div class="field__item"><a href="/taxonomy/term/338" hreflang="en">cache</a></div> <div class="field__item"><a href="/taxonomy/term/340" hreflang="en">caching</a></div> <div class="field__item"><a href="/taxonomy/term/484" hreflang="en">comments</a></div> <div class="field__item"><a href="/taxonomy/term/2572" hreflang="en">spam</a></div> <div class="field__item"><a href="/taxonomy/term/1764" hreflang="en">modules</a></div> <div class="field__item"><a href="/category/tags/april" hreflang="en">april</a></div> <div class="field__item"><a href="/taxonomy/term/11351" hreflang="en">2018</a></div> </div> </div> Sun, 22 Apr 2018 20:53:35 +0000 alvin 9813 at http://alvinalexander.com Yesterday’s ‘wow’ quickly becomes today’s ‘ordinary’ http://alvinalexander.com/misc/-yesterdays-wow-becomes-todays-ordinary-jeff-bezos <span class="field field--name-title field--type-string field--label-hidden">Yesterday’s ‘wow’ quickly becomes today’s ‘ordinary’</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 22, 2018 - 8:49am</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>“People have a voracious appetite for a better way, and yesterday’s ‘wow’ quickly becomes today’s ‘ordinary.’”</p> <p>~ Jeff Bezos, Amazon, in <a href="https://blog.aboutamazon.com/2017-letter-to-shareholders/">his 2017 (2018?) letter to shareholders</a></p> <p>In a slightly related note I find that work is easier when you have the attitude that what you’re working on is constantly changing, constantly evolving. If one day you think, “There it is, Product 1.0, I’m done,” you’ll find it mentally hard to come into the office tomorrow to work on the same product. The only constant is change, and if you accept that your job is to be in that process of change, life and work are easier.</p> <!--break--></div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/personal" hreflang="en">personal</a></div> <div class="field field--name-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/category/tags/jeff-bezos" hreflang="en">jeff bezos</a></div> <div class="field__item"><a href="/taxonomy/term/389" hreflang="en">change</a></div> <div class="field__item"><a href="/category/tags/flow" hreflang="en">flow</a></div> <div class="field__item"><a href="/taxonomy/term/2140" hreflang="en">process</a></div> <div class="field__item"><a href="/category/tags/april" hreflang="en">april</a></div> <div class="field__item"><a href="/taxonomy/term/11351" hreflang="en">2018</a></div> <div class="field__item"><a href="/category/tags/letter" hreflang="en">letter</a></div> <div class="field__item"><a href="/taxonomy/term/10256" hreflang="en">shareholders</a></div> </div> Sun, 22 Apr 2018 14:49:54 +0000 alvin 9812 at http://alvinalexander.com Dotty will become Scala 3.0 http://alvinalexander.com/photos/dotty-becomes-scala-3.0-april-2018 <span class="field field--name-title field--type-string field--label-hidden">Dotty will become Scala 3.0</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>As shown in the image, the project known as <a href="http://www.scala-lang.org/blog/2018/04/19/scala-3.html">Dotty will be Scala 3.0</a>.</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/users/alvin" lang="" about="/users/alvin" typeof="schema:Person" property="schema:name" datatype="" class="username">alvin</a></span> <span class="field field--name-created field--type-created field--label-hidden">April 20, 2018 - 1:06pm</span> <div class="field field--name-field-photo-d8 field--type-image field--label-above"> <div class="field__label">Photo D8</div> <div class="field__item"> <a href="http://alvinalexander.com/sites/default/files/2018-04/scala-3-dotty.jpg"><img src="/sites/default/files/styles/preview/public/2018-04/scala-3-dotty.jpg?itok=kUot1eun" width="480" height="347" alt="Dotty will become Scala 3.0" typeof="foaf:Image" class="image-style-preview" /> </a> </div> </div> <div class="field field--name-category field--type-entity-reference field--label-hidden field__item"><a href="/scala" hreflang="en">scala</a></div> <div class="field field--name-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/category/tags/scala" hreflang="en">scala</a></div> <div class="field__item"><a href="/taxonomy/term/11786" hreflang="en">scala 3</a></div> <div class="field__item"><a href="/taxonomy/term/9868" hreflang="en">dotty</a></div> <div class="field__item"><a href="/category/tags/april" hreflang="en">april</a></div> <div class="field__item"><a href="/taxonomy/term/11351" hreflang="en">2018</a></div> </div> </div> Fri, 20 Apr 2018 19:06:16 +0000 alvin 9811 at http://alvinalexander.com