<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Spincast Framework</title>
    <link>https://www.spincast.org</link>
    <description>What's new about Spincast Framework?</description>
    <image>
      <title>Spincast Framework</title>
      <url>https://www.spincast.org/public/images/feed.png</url>
    </image>
    <item>
      <title>HTML Forms &amp;amp; Validation</title>
      <link>https://www.spincast.org/news/11</link>
      <description>&lt;p&gt;
	This release is &lt;em&gt;huge&lt;/em&gt;. We have been working on it for more than 3 months now.
    The last released version of Spincast contained approximately 800 tests, there are now over 1600!
&lt;/p&gt;
&lt;p&gt;
    The core of this release is about &lt;a href="https://www.spincast.org/documentation#forms"&gt;HTML Forms&lt;/a&gt; and
    &lt;a href="https://www.spincast.org/documentation#validation"&gt;Validation&lt;/a&gt;. There's a lot more than that, but
    those are the two big novelties.
&lt;/p&gt;
&lt;p&gt;
    &lt;img src="https://www.spincast.org/public/images/demo.png" /&gt; Try the &lt;a href="https://www.spincast.org/demos-tutorials/html-forms/"&gt;new demos&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
    Spincast supports &lt;code&gt;Json&lt;/code&gt; and &lt;code&gt;XML&lt;/code&gt; out of the box since day one, so 
    developing a &lt;code&gt;Single Page Application&lt;/code&gt;
    or a set of &lt;code&gt;REST services&lt;/code&gt; has always been easy. But, even if &lt;code&gt;SPAs&lt;/code&gt; are very popular 
    these days, any serious web framework must provide excellent support for &lt;em&gt;traditional websites&lt;/em&gt; too, where the server
    generates the &lt;code&gt;HTML&lt;/code&gt; to render. 
&lt;/p&gt;
&lt;p&gt; 
    As long as you integrate a good &lt;a href="https://www.spincast.org/documentation#templating_engine"&gt;Templating Engine&lt;/a&gt;, providing
    HTML generation functionalities is not too hard.
    What's more challenging is to provide a good experience when it's time to deal with &lt;code&gt;forms&lt;/code&gt; and
    their validation... And we think we hit the nail on the head! Spincast now provides an easy way to validate
    a submitted form and to redisplay it with &lt;a href="https://www.spincast.org/documentation#validation_messages"&gt;Validation Messages&lt;/a&gt; 
    resulting from the validation, when this is required.
&lt;/p&gt;
&lt;p&gt;
    Another big change in this release is about &lt;a href="https://www.spincast.org/documentation#jsonobject"&gt;JsonObjects&lt;/a&gt; : they
    are now more powerful than ever and they are used pretty much &lt;em&gt;everywhere&lt;/em&gt; in Spincast. We added to them a feature we call
    &lt;a href="https://www.spincast.org/documentation#jsonobject_jsonpaths"&gt;JsonPaths&lt;/a&gt; : this makes retrieving an element,
    inside an element, inside an array, inside an element, as simple as :
&lt;/p&gt;
&lt;p&gt;
    &lt;code&gt;Date myDate = myJsonObject.getDate("&lt;strong&gt;&lt;em&gt;user.books[3].publishingDate&lt;/em&gt;&lt;/strong&gt;")&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/tipy.png" /&gt;
    We also added a small &lt;a href="https://www.spincast.org/documentation#quick_tutorial"&gt;Quick Tutorial&lt;/a&gt; section which is a
    high-level view of the main steps involved when building an application using Spincast. And, finally, we cleaned a lot 
    of code, which now follows more closely Java's standards (no more &lt;code&gt;"I"&lt;/code&gt; prefixed interfaces!).
&lt;/p&gt;</description>
      <pubDate>Sat, 26 Nov 2016 12:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/11</guid>
      <dc:date>2016-11-26T12:00:00Z</dc:date>
    </item>
    <item>
      <title>Bootstrapping++</title>
      <link>https://www.spincast.org/news/12</link>
      <description>&lt;p&gt;
	This release is all about &lt;a href="https://www.spincast.org/documentation#bootstrapping"&gt;bootstrapping a
    Spincast application&lt;/a&gt;. This process has been greatly improved and the creation of the 
    Guice context associated with an application is now easier. A new component, the 
    &lt;a href="https://www.spincast.org/documentation#boot_bootstrapper"&gt;Bootstrapper&lt;/a&gt;, is at the core of this
    process.
&lt;/p&gt;
&lt;p&gt;
    Here's a fully working &lt;em&gt;"Hello World!"&lt;/em&gt; Spincast application :

    &lt;div&gt;
        &lt;p&gt;
            &lt;pre class="ace ace-java"
&gt;public class App {

    public static void main(String[] args) {
        Spincast.init(args);
    }

    @Inject
    protected void init(DefaultRouter router, Server server) {
        router.GET("/").handle(context -&gt; context.response().sendHtml("&amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;"));
        server.start();
    }
}&lt;/pre&gt;
                  
        &lt;/p&gt;
    &lt;/div&gt; 

&lt;/p&gt;
&lt;p&gt; 
    Speaking of &lt;em&gt;"Hello world!"&lt;/em&gt; applications, you can now find &lt;em&gt;three&lt;/em&gt; of them in the &lt;em&gt;"Demos / Tutorials"&lt;/em&gt; section! :
    &lt;ul&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/demos-tutorials/hello-world/quick"&gt;Quick version&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/demos-tutorials/hello-world/better"&gt;Better version&lt;/a&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/demos-tutorials/hello-world/super"&gt;Advanced version&lt;/a&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
    Finally, we introduced a new section in the documentation dedicated to 
    &lt;a href="https://www.spincast.org/documentation#plugins"&gt;plugins&lt;/a&gt; : what they really are, how to install them, etc.
&lt;/p&gt;</description>
      <pubDate>Mon, 02 Jan 2017 12:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/12</guid>
      <dc:date>2017-01-02T12:00:00Z</dc:date>
    </item>
    <item>
      <title>Video : Spincast Framework application from scratch in under 3 minutes</title>
      <link>https://www.spincast.org/news/13</link>
      <description>&lt;p&gt;
    A tutorial video has been posted on Youtube : &lt;a href="https://youtu.be/RH6o_v14dWs?vq=hd1080"&gt;Spincast Framework application from scratch in under 3 minutes&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Please watch in &lt;em&gt;1080p&lt;/em&gt; to see the code clearly!
&lt;/p&gt;</description>
      <pubDate>Sun, 08 Jan 2017 12:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/13</guid>
      <dc:date>2017-01-08T12:00:00Z</dc:date>
    </item>
    <item>
      <title>Configuring a Spincast application</title>
      <link>https://www.spincast.org/news/14</link>
      <description>&lt;p&gt;
	A new section on &lt;a href="https://www.spincast.org/documentation#configuration"&gt;how to configure a Spincast application&lt;/a&gt; is
	now available.
&lt;/p&gt;
&lt;p&gt;
	In this section, you will learn how to make the configurations &lt;em&gt;externalizable&lt;/em&gt;, so they can have different
	values depending on the environment the application runs on....
&lt;/p&gt;</description>
      <pubDate>Tue, 20 Jun 2017 23:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/14</guid>
      <dc:date>2017-06-20T23:00:00Z</dc:date>
    </item>
    <item>
      <title>JDBC / SQL utilities</title>
      <link>https://www.spincast.org/news/15</link>
      <description>&lt;p&gt;
	A new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-jdbc"&gt;Spincast JDBC plugin&lt;/a&gt; is available!
    Using this plugin, you have access to :
    
    &lt;ul&gt;
        &lt;li&gt;
            &lt;strong&gt;Scopes&lt;/strong&gt; - automatic connections management and
            support for transactions.
        &lt;/li&gt;
        &lt;li&gt;
            &lt;strong&gt;Statements&lt;/strong&gt; - allow the creation of 
            SQL queries in a safe and easy manner, with &lt;code&gt;named parameters&lt;/code&gt; support.
        &lt;/li&gt;
        &lt;li&gt;
            &lt;strong&gt;Result Sets&lt;/strong&gt; - with goodies and better &lt;code&gt;null&lt;/code&gt; 
            support compared to plain JDBC.
        &lt;/li&gt;  
    &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
    A full documentation section "&lt;a href="https://www.spincast.org/documentation#jdbc"&gt;JDBC / SQL&lt;/a&gt;" is 
    dedicated to the features this plugin provides.
&lt;/p&gt;</description>
      <pubDate>Tue, 26 Dec 2017 02:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/15</guid>
      <dc:date>2017-12-26T02:00:00Z</dc:date>
    </item>
    <item>
      <title>Internationalization (i18n)</title>
      <link>https://www.spincast.org/news/16</link>
      <description>&lt;p&gt;
    Internationalization of a Spincast application is now very easy.
&lt;/p&gt;
&lt;p&gt;
    You can read everything about this topic in the &lt;a href="https://www.spincast.org/documentation#dictionary"&gt;Dictionary&lt;/a&gt;
    section of the documentation.
&lt;/p&gt; 
&lt;p&gt;
    Not only can you now translate your application, but you can also override the messages
    provided by Spincast and the various plugins.
&lt;/p&gt; 
&lt;p&gt;
    Finally, a &lt;a href="https://www.spincast.org/documentation#templating_functions_msg"&gt;Pebble function&lt;/a&gt; is also
    provided to get localized messages from your templates (your &lt;code&gt;HTML&lt;/code&gt; templates, for example).
&lt;/p&gt;</description>
      <pubDate>Fri, 10 Aug 2018 15:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/16</guid>
      <dc:date>2018-08-10T15:00:00Z</dc:date>
    </item>
    <item>
      <title>Timezone resolver and Date formatter</title>
      <link>https://www.spincast.org/news/17</link>
      <description>&lt;p&gt;
    A &lt;a href="https://www.spincast.org/plugins/spincast-timezone-resolver"&gt;Timezone resolver&lt;/a&gt;
    is now part of the &lt;code&gt;spincast-default&lt;/code&gt; artifact. This resolver allows you to define
    a default TimeZone to use, but also provides a &lt;a href="https://pebbletemplates.io"&gt;Pebble&lt;/a&gt; filter: 
    "&lt;code&gt;&lt;a href="https://www.spincast.org/plugins/spincast-timezone-resolver#pebble"&gt;timeZoneCookie()&lt;/a&gt;&lt;/code&gt;". This filter
    gets the user TimeZone using javascript and stores it in a cookie so Spincast has access to it.
&lt;/p&gt; 
&lt;p&gt;
    Another new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-date-formatter"&gt;Spincast Date Formatter&lt;/a&gt;,
    allows you to format dates in various ways, both in Java code and in templates (using a provided 
    &lt;code&gt;&lt;a href="https://www.spincast.org/plugins/spincast-date-formatter#pebble"&gt;dateFormat()&lt;/a&gt;&lt;/code&gt; Pebble function).
&lt;/p&gt;</description>
      <pubDate>Mon, 13 Aug 2018 22:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/17</guid>
      <dc:date>2018-08-13T22:00:00Z</dc:date>
    </item>
    <item>
      <title>4 new plugins</title>
      <link>https://www.spincast.org/news/18</link>
      <description>&lt;p&gt;
    4 new plugins are now available:
&lt;/p&gt; 
&lt;p&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/plugins/spincast-session"&gt;Spincast Session&lt;/a&gt;:
            Create and manage sessions associated with your users.
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/plugins/spincast-scheduled-tasks"&gt;Spincast Scheduled Tasks&lt;/a&gt;:
            Register scheduled tasks ("&lt;em&gt;cron jobs&lt;/em&gt;") that are going to be run
            at specific times or specific intervals.
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/plugins/spincast-crypto"&gt;Spincast Crypto&lt;/a&gt;:
            Utilities related to cryptography, encryption, hashing.         
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/plugins/spincast-forms-protection"&gt;Spincast Forms Protection&lt;/a&gt;:
            Protect your forms from CSRF attacks and double submissions.                 
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</description>
      <pubDate>Wed, 29 Aug 2018 23:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/18</guid>
      <dc:date>2018-08-29T23:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast Attempts Limiter plugin</title>
      <link>https://www.spincast.org/news/19</link>
      <description>&lt;p&gt;
    Have you ever wish you could easily &lt;em&gt;limit the number of attempts&lt;/em&gt; a visitor can make at something, on your site?
    For example to limit the number of registrations done using the same IP address, or to limit the number of messages sent by a specific user?
&lt;/p&gt; 
&lt;p&gt;
    The new &lt;a href="https://www.spincast.org/plugins/spincast-attempts-limiter"&gt;Spincast Attempts Limiter&lt;/a&gt; plugin does exactly that!
    It helps you deal with actions performed too much, or even with &lt;em&gt;brute force attacks&lt;/em&gt;, by limiting the attempts a visitor/user can make
    trying to perform a given action.
&lt;/p&gt;</description>
      <pubDate>Sun, 02 Sep 2018 23:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/19</guid>
      <dc:date>2018-09-02T23:00:00Z</dc:date>
    </item>
    <item>
      <title>Hot Swapping</title>
      <link>https://www.spincast.org/news/20</link>
      <description>&lt;p&gt;
    A new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-hotswap"&gt;Spincast Hotswap&lt;/a&gt;, helps you
    configure &lt;em&gt;hot swapping&lt;/em&gt; (sometimes called "&lt;em&gt;hot reloading&lt;/em&gt;") in your application. 
&lt;/p&gt; 
&lt;p&gt;
    The plugin uses
    &lt;a href="http://hotswapagent.org"&gt;HotswapAgent&lt;/a&gt; + &lt;a href="https://github.com/dcevm/dcevm"&gt;DCEVM&lt;/a&gt;
    to get the best Java classes redefinitions solution available for free! 
    The modifications you make to your Java source code during development are immediately picked up, without 
    the need to restart the application.
&lt;/p&gt; 
&lt;p&gt;
    In addition to the automatic classes redefinitions provided by HotswapAgent, you can also register &lt;em&gt;listeners&lt;/em&gt; 
    to be called when modifications are made. By using such listeners, you can run custom code to react to  modifications
    (by clearing cache, refreshing routes, refreshing configurations, etc.). 
&lt;/p&gt; 
&lt;p&gt;
    Those new features lead to a very pleasant and fast development experience.
&lt;/p&gt;</description>
      <pubDate>Sun, 09 Sep 2018 20:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/20</guid>
      <dc:date>2018-09-09T20:00:00Z</dc:date>
    </item>
    <item>
      <title>Database migration using Flyway</title>
      <link>https://www.spincast.org/news/21</link>
      <description>&lt;p&gt;
    A new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-flyway-utils"&gt;Spincast Flyway Utils&lt;/a&gt;, integrates
    &lt;a href="https://flywaydb.org/"&gt;Flyway&lt;/a&gt; into Spincast to provide easy migrations for your SQL database.  
&lt;/p&gt; 
&lt;p&gt;
    By using this plugin, you write your migrations using
    plain Java code, will full dependency injection support. You are also sure the appropriate connection
    will be used when running the SQL queries, even when your code makes use of existing
    components that are not aware of the migration context.
&lt;/p&gt;</description>
      <pubDate>Sun, 16 Sep 2018 02:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/21</guid>
      <dc:date>2018-09-16T02:00:00Z</dc:date>
    </item>
    <item>
      <title>Hotlinking protection and images watermarking</title>
      <link>https://www.spincast.org/news/22</link>
      <description>&lt;p&gt;
    A new feature and a new plugin are now available and they work together very well!
&lt;/p&gt; 
&lt;p&gt;
    The new feature is &lt;a href="https://www.spincast.org/documentation#hotlinking"&gt;Hotlinking Protection&lt;/a&gt;.
    This feature allows you to protect resources from your website that may have been embedded in
    a foreign website, without your consent. You can then simply stop serving those hotlinked resources
    (a &lt;em&gt;forbidden&lt;/em&gt; status is returned), or you can decide to serve &lt;em&gt;different versions&lt;/em&gt;
    of them...
&lt;/p&gt; 

&lt;p&gt;
    And this is where the new plugin becomes handy: the &lt;a href="https://www.spincast.org/plugins/spincast-watermarker"&gt;Spincast Watermark Plugin&lt;/a&gt;.
    This plugin allows you to &lt;em&gt;watermark&lt;/em&gt; files, images in particular. For example, you could use this plugin to
    create an image identical to a base image but with your logo added at one of its corners.
&lt;/p&gt; 

&lt;p&gt;
    Hotlinking protection and watermarking go very well together, as you can now easily serve a watermarked version
    of your images if they are hotlinked without your consent. 
&lt;/p&gt;</description>
      <pubDate>Sat, 02 Mar 2019 16:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/22</guid>
      <dc:date>2019-03-02T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast 1.0.0</title>
      <link>https://www.spincast.org/news/23</link>
      <description>&lt;p&gt;
   The very first Git commit of Spincast framework was done April 23, 2016, almost three years ago! Since then, Spincast has always stayed in &lt;em&gt;beta&lt;/em&gt;... Why is that?
   The answer is that we wanted to stabilize the API as much as possible and we wanted Spincast to be used on real projects before calling it
   &lt;em&gt;ready&lt;/em&gt;.
&lt;/p&gt; 
&lt;p&gt;
   Since then, a lot of &lt;a href="https://www.spincast.org/plugins"&gt;new plugins&lt;/a&gt; have been developed. A
   &lt;a href="https://github.com/gothinkster/realworld"&gt;RealWorld.io&lt;/a&gt; implementation (&lt;a href="https://github.com/spincast/spincast-realworld"&gt;here&lt;/a&gt;)
   was also created... RealWorld.io is slowly becoming a mandatory &lt;em&gt;rite of passage&lt;/em&gt; for any new framework.
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="https://www.bigbadaboomcomics.com"&gt;Big Bada Boom comics&lt;/a&gt; is an example of a real project entirely based on Spincast. 
   Everything, from authentication to security is based on Spincast framework.
&lt;/p&gt;
&lt;p&gt;
   At first, we wanted to migrate Spincast to Java 11 before tagging it &lt;code&gt;1.0.0&lt;/code&gt;, but sadly we feel the Java ecosystem is still not perfect in regard to
   the new &lt;a href="https://en.wikipedia.org/wiki/Java_Platform_Module_System"&gt;JPMS&lt;/a&gt;/Jigsaw module system added in Java 9... 
   We encountered &lt;a href="https://stackoverflow.com/questions/54993710/the-package-com-google-inject-is-accessible-from-more-than-one-module"&gt;many errors&lt;/a&gt; 
   using the popular IDEs trying to migrate. So we decided to stabilize on Java 8 first. Spincast &lt;code&gt;2.X.X&lt;/code&gt; will be based on Java 11 when we feel
   the tools are mature enough.
&lt;/p&gt;
&lt;p&gt;
   Please play with the &lt;a href="https://www.spincast.org/documentation#quick_start"&gt;Quick Start application&lt;/a&gt;! Tell us what you think.
   Feel free to &lt;a href="https://www.spincast.org/community#contribution"&gt;contribute&lt;/a&gt;. We know we do not have the
   financial resources or a community as big as other frameworks such as &lt;em&gt;Spring&lt;/em&gt;, but look at the code, experiment 
   a bit, make your own mind.
&lt;/p&gt;</description>
      <pubDate>Sun, 10 Mar 2019 16:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/23</guid>
      <dc:date>2019-03-10T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast Logback Utils plugin</title>
      <link>https://www.spincast.org/news/24</link>
      <description>&lt;p&gt;
   A new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-logback-utils"&gt;Spincast Logback Utils&lt;/a&gt; is now 
   available. This small plugin allows you to easily configure &lt;a href="https://logback.qos.ch/"&gt;Logback&lt;/a&gt;, for logging purposes in your application.
&lt;/p&gt;
&lt;p&gt;
   Using plain Java code, you can specify which configuration file Logback should be configured with, for example depending on the
   &lt;em&gt;environment&lt;/em&gt; the application runs on! The plugin also allows you to tweak the content of the configuration file, 
   for example by replacing some &lt;em&gt;placeholders&lt;/em&gt;.
&lt;/p&gt;</description>
      <pubDate>Tue, 12 Mar 2019 23:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/24</guid>
      <dc:date>2019-03-12T23:00:00Z</dc:date>
    </item>
    <item>
      <title>OpenAPI support</title>
      <link>https://www.spincast.org/news/25</link>
      <description>&lt;p&gt;
   We are happy to announce that Spincast now has a plugin to generate 
   &lt;a href ="https://www.openapis.org/"&gt;OpenAPI&lt;/a&gt; / &lt;a href="https://swagger.io/docs/specification/about/"&gt;Swagger&lt;/a&gt; specifications!
   This allows you to document a &lt;code&gt;REST API&lt;/code&gt; developed using Spincast easily.
&lt;/p&gt;
&lt;p&gt;
   The plugin, &lt;a href="https://www.spincast.org/plugins/spincast-openapi-bottomup"&gt;Spincast OpenAPI Bottom Up&lt;/a&gt;,
   uses a &lt;em&gt;bottom-up&lt;/em&gt; approach (also called "&lt;em&gt;code first&lt;/em&gt;" approach) as it starts from the code
   of your application to generate the associated OpenAPI specifications as &lt;code&gt;JSON&lt;/code&gt; or as &lt;code&gt;YAML&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
   This plugin reuses a lot of code from the battle-tested and 
   well-maintained official &lt;a href="https://github.com/swagger-api/swagger-core"&gt;Swagger Core&lt;/a&gt;
   reference implementation. Doing so, the plugin should respect the
   OpenAPI specifications very well and should also be future-proof.
&lt;/p&gt;</description>
      <pubDate>Sat, 30 Mar 2019 20:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/25</guid>
      <dc:date>2019-03-30T20:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast Gson plugin</title>
      <link>https://www.spincast.org/news/26</link>
      <description>&lt;p&gt;
   If, for some reasons, your prefer to use &lt;a href="https://github.com/google/gson"&gt;Gson&lt;/a&gt; rather
   than &lt;a href="https://github.com/FasterXML/jackson"&gt;Jackson&lt;/a&gt; as a way of converting Java Objects into JSON and back, this new plugin is for you.
&lt;/p&gt;
&lt;p&gt;
   The &lt;a href="https://www.spincast.org/plugins/spincast-gson"&gt;Spincast Gson plugin&lt;/a&gt; is a complete replacement
   for the default &lt;a href="https://www.spincast.org/plugins/spincast-jackson-json"&gt;Spincast Jackson Json plugin&lt;/a&gt;
   that is provided in the default Spincast artifact.
&lt;/p&gt;
&lt;p&gt;
   Some custom serializers and deserializers are provided. Also, the &lt;a href="https://google.github.io/gson/apidocs/com/google/gson/GsonBuilder.html"&gt;GsonBuilder&lt;/a&gt;
   is easy to access so you can add your own configurations to help build the final &lt;code&gt;Gson&lt;/code&gt; instance.
&lt;/p&gt;</description>
      <pubDate>Thu, 04 Apr 2019 17:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/26</guid>
      <dc:date>2019-04-04T17:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast Swagger UI plugin</title>
      <link>https://www.spincast.org/news/27</link>
      <description>&lt;p&gt;
   Now that Spincast &lt;a href="https://www.spincast.org/news/25"&gt;has support&lt;/a&gt; for 
   &lt;code&gt;OpenAPI&lt;/code&gt; documentation, it makes sense to provide plugins for related tools!
&lt;/p&gt;
&lt;p&gt;
   This new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-swagger-ui"&gt;Spincast Swagger UI plugin&lt;/a&gt;,
   integrates &lt;a href="https://swagger.io/tools/swagger-ui/"&gt;Swagger UI&lt;/a&gt; with Spincast so you can 
   display your REST API specifications in a friendly HTML interface.
&lt;/p&gt;</description>
      <pubDate>Tue, 09 Apr 2019 10:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/27</guid>
      <dc:date>2019-04-09T10:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast Process Utils plugin + other utilities</title>
      <link>https://www.spincast.org/news/28</link>
      <description>&lt;p&gt;
    The new &lt;a href="https://www.spincast.org/plugins/spincast-process-utils"&gt;Spincast Process Utils&lt;/a&gt; plugin
    provides utilities to manipulate processes and external programs.
&lt;/p&gt;
&lt;p&gt;
    The main features are:
    &lt;ul&gt;
		&lt;li&gt;
		    "&lt;a href="https://www.spincast.org/plugins/spincast-process-utils#maven_project"&gt;Running a goal on an external Maven project&lt;/a&gt;" - 
		    Allows you to programmatically compile/package/install an &lt;em&gt;external&lt;/em&gt; Maven project.
		    The Maven project can be on your classpath: it will first be extracted to the file system before the
		    goal is executed.
		&lt;/li&gt;
        &lt;li&gt;
            "&lt;a href="https://www.spincast.org/plugins/spincast-process-utils#execute_async"&gt;Executing an external program&lt;/a&gt;" - 
            Allows you to easily execute an external program and keep control over the created process.
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
    By combining those utilities, it is now possible to
    &lt;a href="https://www.spincast.org/documentation#testing_jar"&gt;test code inside a .jar file&lt;/a&gt;!
    Indeed, running tests from an &lt;code&gt;IDE&lt;/code&gt; (or using the command line) doesn't always represent the 
    production environment, where everything is bundled in an executable &lt;code&gt;.jar&lt;/code&gt; file.
&lt;/p&gt;
&lt;p&gt;
    Finally, two new utility methods are provided by the &lt;a href="https://www.spincast.org/public/javadoc/org/spincast/core/utils/SpincastUtils.html"&gt;SpincastUtils&lt;/a&gt;
    component:
    &lt;ul&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/documentation#utils_copyClasspathFileToFileSystem"&gt;copyClasspathFileToFileSystem(...)&lt;/a&gt;,
            to copy a single file from the classpath to the file system.
            
        &lt;/li&gt;
        &lt;li&gt;
            &lt;a href="https://www.spincast.org/documentation#utils_copyClasspathDirToFileSystem"&gt;copyClasspathDirToFileSystem(...)&lt;/a&gt;,
            to copy a full directory from the classpath to the file system.
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</description>
      <pubDate>Tue, 09 Apr 2019 10:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/28</guid>
      <dc:date>2019-04-09T10:00:00Z</dc:date>
    </item>
    <item>
      <title>What about Spring Framework?</title>
      <link>https://www.spincast.org/news/29</link>
      <description>&lt;p&gt;
    &lt;a href="https://spring.io"&gt;Spring Framework&lt;/a&gt; / &lt;a href="https://spring.io/projects/spring-boot"&gt;Spring Boot&lt;/a&gt; is by far 
    the most popular Java framework. If you are looking for a framework with a very large community
    and for which paid support is available, look no further, you will not find anything better! 
    We used Spring &lt;em&gt;a lot&lt;/em&gt; before starting Spincast.
&lt;/p&gt;
&lt;p&gt;
    The problem we had with Spring, is that we found ourself asking those questions too often:
    &lt;ul&gt;
        &lt;li&gt;
            "&lt;em&gt;How can I modify that default behavior?&lt;/em&gt;"
        &lt;/li&gt;
        &lt;li&gt;
            "&lt;em&gt;How do I configure this component?&lt;/em&gt;"
        &lt;/li&gt;
        &lt;li&gt;
            "&lt;em&gt;How can this work since I didn't even configure it?&lt;/em&gt;"
        &lt;/li&gt;
        &lt;li&gt;
            "&lt;em&gt;What does this annotation actually do? Can I tweak its behavior?&lt;/em&gt;"
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/para.png" /&gt;
    Our experience with Spring Framework is that it tends to be a little bit too
    &lt;em&gt;magical&lt;/em&gt;, it tends to hide implementation details too much 
    so your application is harder to configure and tweak. In the name of "&lt;em&gt;Defaults that are good enough 80% of the time&lt;/em&gt;", 
    Spring sometimes seems to favor &lt;em&gt;simplicity&lt;/em&gt; over &lt;em&gt;providing full control&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/tipy.png" /&gt;
    Any real-world application &lt;em&gt;will&lt;/em&gt; be part of that
    20% requiring a lot of manual tweaking, so why not base it on a framework that favors
    flexibility and control from the ground up?
&lt;/p&gt;
&lt;p&gt;
    Yes, it is very easy to start a new Spring Boot application using their
    pretty &lt;a href="https://start.spring.io/"&gt;Initializr&lt;/a&gt;! But as long as you
    have developed at least one real application in your life, you know that this kind of
    simple bootstrapping is smoke and mirrors: you &lt;em&gt;will&lt;/em&gt; have to
    modify/change/replace components at some points or another. You &lt;em&gt;will&lt;/em&gt;
    have to manually control what is actually happening behind the scene.
&lt;/p&gt;
&lt;p&gt;
    Also, Spring relies a lot on annotations: that contributes to the
    "easy to use" aura. But, as &lt;a href="https://www.spincast.org/about#annotations"&gt;we explain here&lt;/a&gt;, we are
    not big fans of annotations.
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/para.png" /&gt;
    In the other hand, the very first goal of Spincast is to make modifying anything a &lt;em&gt;borderline trivial task&lt;/em&gt;. If 
    you find something that is not easily modifiable and should be, it will be considered as &lt;em&gt;a bug&lt;/em&gt; and 
    will be fixed. 
&lt;/p&gt;
&lt;p&gt;
    Here is how you tweak almost &lt;em&gt;anything&lt;/em&gt; in a Spincast application:
    
    &lt;ol class="normal"&gt;
        &lt;li&gt;
            You identify the class containing the code you want to tweak and the interfaces this
            class is bound to in the Guice context.
        &lt;/li&gt;
        &lt;li&gt;
            You extend this class to override/tweak/add anything you need. There are
            &lt;a href="https://www.spincast.org/about#private_methods"&gt;no private methods&lt;/a&gt; so sky is the limit here.
        &lt;/li&gt;
        &lt;li&gt;
            In your application's Guice module, you bind your custom implementation.
        &lt;/li&gt;
        &lt;li&gt;
            Done. No magic. No components hard to extend.
        &lt;/li&gt;
    &lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/tipy.png" /&gt;
    Even Spincast's &lt;em&gt;core components&lt;/em&gt; can be modified using those simple steps.
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/para.png" /&gt;
    In other words, we would say that the main difference between Spring and Spincast
    is that Spincast favors long term flexibility and control from the ground up, while Spring
    seems more preoccupied with providing something that is easy to start with.
&lt;/p&gt;
&lt;p&gt;
    &lt;hr /&gt;
&lt;/p&gt;
&lt;p&gt;
    &lt;em&gt;(this news is taken from the &lt;a href="https://www.spincast.org/about#spring"&gt;About&lt;/a&gt; section of the site)&lt;/em&gt;
&lt;/p&gt;</description>
      <pubDate>Wed, 10 Apr 2019 10:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/29</guid>
      <dc:date>2019-04-10T10:00:00Z</dc:date>
    </item>
    <item>
      <title>HTTP/2 official support</title>
      <link>https://www.spincast.org/news/30</link>
      <description>&lt;p&gt;
    The &lt;a href="https://en.wikipedia.org/wiki/HTTP/2"&gt;HTTP/2&lt;/a&gt; protocol is now officially supported by Spincast.
&lt;/p&gt;
&lt;p&gt;
    You can read more about this topic in the dedicated &lt;a href="https://www.spincast.org/documentation#http2"&gt;HTTP/2 section&lt;/a&gt; of the documentation.
&lt;/p&gt;
&lt;p&gt;
    Spincast supports &lt;code&gt;HTTP/2&lt;/code&gt; and &lt;a href="https://en.wikipedia.org/wiki/HTTP/2_Server_Push"&gt;Server Push&lt;/a&gt; in
    two ways:
    &lt;ul&gt;
        &lt;li&gt;
            If your application is standalone and &lt;code&gt;HTTP/2&lt;/code&gt; connections are managed by the embedded server 
            (&lt;a href="http://undertow.io/"&gt;Undertow&lt;/a&gt; is the default).
        &lt;/li&gt;
        &lt;li&gt;
            If your application is behind a &lt;code&gt;reverse proxy&lt;/code&gt; such as &lt;a href="https://www.nginx.com/"&gt;Nginx&lt;/a&gt;
            or &lt;a href="https://httpd.apache.org/"&gt;Apache&lt;/a&gt;.
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</description>
      <pubDate>Fri, 12 Apr 2019 23:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/30</guid>
      <dc:date>2019-04-12T23:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast CSS Autoprefixer plugin + refactoring</title>
      <link>https://www.spincast.org/news/31</link>
      <description>&lt;p&gt;
    A new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-css-autoprefixer"&gt;Spincast CSS Autoprefixer&lt;/a&gt;,
    integrates &lt;a href="https://github.com/postcss/autoprefixer"&gt;Autoprefixer&lt;/a&gt; to easily 
    add vendor prefixes to your &lt;code&gt;CSS&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
    The plugin allows you to serve &lt;code&gt;CSS&lt;/code&gt; that has been tweaked so browsers support is enhanced. 
    For example, you may use this plugin to be able to use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout"&gt;CSS Grids&lt;/a&gt; 
    with &lt;a href="https://css-tricks.com/css-grid-in-ie-css-grid-and-the-new-autoprefixer/"&gt;good support for IE11&lt;/a&gt;! 
&lt;/p&gt;
&lt;p&gt;
    &lt;img class="inlineIcon" src="https://www.spincast.org/public/images/icons/para.png" /&gt;
    Also, some methods of the &lt;a href="https://www.spincast.org/plugins/spincast-process-utils"&gt;Spincast Process Utils&lt;/a&gt; plugin
    have been refactored to be more generic. If you are currently using the &lt;code&gt;executeJar(...)&lt;/code&gt; method, please
    upgrade to one of the new &lt;a class="javadoc" href="https://www.spincast.org/public/javadoc/org/spincast/plugins/processutils/SpincastProcessUtils.html#executeAsync-org.spincast.plugins.processutils.ProcessExecutionHandler-java.lang.String...-"&gt;executeAsync(...)&lt;/a&gt;
    or &lt;a class="javadoc" href="https://www.spincast.org/public/javadoc/org/spincast/plugins/processutils/SpincastProcessUtils.html#executeSync-long-java.util.concurrent.TimeUnit-org.spincast.plugins.processutils.ExecutionOutputStrategy-java.lang.String...-"&gt;executeSync(...)&lt;/a&gt;
    methods! Those are more generic and provide way more control over the executed programs.
&lt;/p&gt;
&lt;p&gt;
    Read more about those new methods in the plugin's &lt;a href="https://www.spincast.org/plugins/spincast-process-utils"&gt;documentation&lt;/a&gt;.
&lt;/p&gt;</description>
      <pubDate>Sun, 05 May 2019 12:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/31</guid>
      <dc:date>2019-05-05T12:00:00Z</dc:date>
    </item>
    <item>
      <title>Spincast CSS YUI Compressor plugin</title>
      <link>https://www.spincast.org/news/32</link>
      <description>&lt;p&gt;
    A new plugin, &lt;a href="https://www.spincast.org/plugins/spincast-css-yuicompressor"&gt;Spincast CSS YUI Compressor&lt;/a&gt;,
    integrates &lt;a href="https://yui.github.io/yuicompressor/"&gt;YUI Compressor&lt;/a&gt; so you can easily 
    minify/compress your &lt;code&gt;CSS&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
    What else can we say? It is simple and it works!
&lt;/p&gt;</description>
      <pubDate>Sun, 05 May 2019 22:00:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/32</guid>
      <dc:date>2019-05-05T22:00:00Z</dc:date>
    </item>
    <item>
      <title>Optimize your Javascript with the new Closure Compiler integration</title>
      <link>https://www.spincast.org/news/33</link>
      <description>&lt;p&gt;
    A few days ago, we released a plugin to minify your &lt;code&gt;CSS&lt;/code&gt;. We now release
    &lt;a href="https://www.spincast.org/plugins/spincast-js-closurecompiler"&gt;Spincast JS Closure Compiler&lt;/a&gt;, a plugin made to
    optimize your &lt;code&gt;&lt;em&gt;Javascript&lt;/em&gt;&lt;/code&gt;!
&lt;/p&gt;
&lt;p&gt;
    As its name implies, this new plugin makes use of the well-supported &lt;a href="https://github.com/google/closure-compiler"&gt;Closure Compiler&lt;/a&gt; 
    library, from Google.
&lt;/p&gt;
&lt;p&gt;
    All official &lt;a href="https://github.com/google/closure-compiler/wiki/Flags-and-Options"&gt;flags and options&lt;/a&gt; are supported and easy to specify.
&lt;/p&gt;</description>
      <pubDate>Thu, 09 May 2019 23:30:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/33</guid>
      <dc:date>2019-05-09T23:30:00Z</dc:date>
    </item>
    <item>
      <title>Easy Javascript and CSS bundling</title>
      <link>https://www.spincast.org/news/34</link>
      <description>&lt;p&gt;
    Two new &lt;code&gt;Pebble&lt;/code&gt; functions are now provided to easily bundle your Javascript files together and your CSS files together,
    &lt;em&gt;directly from an HTML template&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
    The &lt;a href="https://www.spincast.org/plugins/spincast-js-closurecompiler#pebble"&gt;jsBundle(...)&lt;/a&gt; function
    allows you to concatenate and optimize multiple .js files. The result can then be served as a &lt;em&gt;single&lt;/em&gt;
    bundle that is quick to download for the client. This Pebble function is provided by the
    &lt;a href="https://www.spincast.org/plugins/spincast-js-closurecompiler"&gt;Spincast JS Closure Compiler&lt;/a&gt; plugin.
&lt;/p&gt;
&lt;p&gt;
    The &lt;a href="https://www.spincast.org/plugins/spincast-css-yuicompressor#pebble"&gt;cssBundle(...)&lt;/a&gt; is similar but
    target your .css files. It is provided by the
    &lt;a href="https://www.spincast.org/plugins/spincast-css-yuicompressor"&gt;Spincast CSS YUI Compressor&lt;/a&gt; plugin.
&lt;/p&gt;</description>
      <pubDate>Wed, 15 May 2019 23:30:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/34</guid>
      <dc:date>2019-05-15T23:30:00Z</dc:date>
    </item>
    <item>
      <title>Java 17</title>
      <link>https://www.spincast.org/news/35</link>
      <description>&lt;p&gt;
   Unfortunately, Spincast hasn't gained a community, so I won't put as much effort into it as I did in the past. 
   But I still want to keep an updated version for my own projects that use it. 
   This version makes Spincast compatible with Java 17 instead of Java 8, and also contains 
   multiple small fixes and improvements.
&lt;/p&gt;
&lt;p&gt;
    Note that the documentation may not have been updated to reflect all the new features. 
    When in doubt, the code is of course the source of Truth.
&lt;/p&gt;
&lt;p&gt;
	One of the big changes coming with Java 17 is the requirements 
	for the &lt;a href="https://www.spincast.org/plugins/spincast-hotswap"&gt;Spincast Hotswap&lt;/a&gt; plugin. 
	The DCEVM library is not available as standard 
	for JDK 17, so the currently suggested method of automatically 
	reloading a Spincast application is to use a &lt;em&gt;JetBrains&lt;/em&gt; JDK release, 
	which already contains DCEVM. More information on the plugin page! 
&lt;/p&gt;</description>
      <pubDate>Sun, 17 Apr 2022 23:30:00 GMT</pubDate>
      <guid>https://www.spincast.org/news/35</guid>
      <dc:date>2022-04-17T23:30:00Z</dc:date>
    </item>
  </channel>
</rss>
