<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://cc.isel.pt/feed.xml" rel="self" type="application/atom+xml" /><link href="https://cc.isel.pt/" rel="alternate" type="text/html" /><updated>2025-01-15T17:28:38+00:00</updated><id>https://cc.isel.pt/feed.xml</id><title type="html">CCISEL</title><subtitle>CCISEL web site</subtitle><entry><title type="html">PRODIGI: Formação online em competências digitais</title><link href="https://cc.isel.pt/programming/2025/01/15/prodigi/" rel="alternate" type="text/html" title="PRODIGI: Formação online em competências digitais" /><published>2025-01-15T00:00:00+00:00</published><updated>2025-01-15T00:00:00+00:00</updated><id>https://cc.isel.pt/programming/2025/01/15/prodigi</id><content type="html" xml:base="https://cc.isel.pt/programming/2025/01/15/prodigi/"><![CDATA[<p>O CCISEL faz parte da equipa de docentes que dará em 2025, a formação
online <a href="https://prodigi.pt">PRODIGI</a> (PROgramação, informação e cidadania DIGItal).
Esta formação é
disponibilizada pelo Instituto Politécnico de Lisboa e pela Universidade de
Lisboa e é destinada a jovens e adultos com formação em áreas não CTEAM
(Ciência, Tecnologia, Engenharia, Artes e Matemática) e a profissionais com a
mesma formação, interessados em lecionar no ensino básico e secundário na área
das TIC (Tecnologias de Informação e Comunicação). Entre os 22 módulos do
programa total da formação, seis deles (Estruturas de Dados, Algoritmos e
Complexidade, Fundamentos de Base de Dados, Técnicas de desenvolvimento de
Software, Programação para a Web e Programação para Dispositivos Móveis) serão
lecionados por membros do CCISEL (Cátia Vaz, Nuno Leite, Pedro Pereira, Luís
Falcão e Paulo Pereira).</p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;miguelgamboa&quot;, &quot;email&quot;=&gt;nil, &quot;display_name&quot;=&gt;&quot;Cátia Vaz&quot;, &quot;image&quot;=&gt;&quot;catia.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Engineer&quot;}</name></author><category term="Programming" /><category term="web" /><category term="programming" /><summary type="html"><![CDATA[O CCISEL faz parte da equipa de docentes que dará em 2025, a formação online PRODIGI (PROgramação, informação e cidadania DIGItal). Esta formação é disponibilizada pelo Instituto Politécnico de Lisboa e pela Universidade de Lisboa e é destinada a jovens e adultos com formação em áreas não CTEAM (Ciência, Tecnologia, Engenharia, Artes e Matemática) e a profissionais com a mesma formação, interessados em lecionar no ensino básico e secundário na área das TIC (Tecnologias de Informação e Comunicação). Entre os 22 módulos do programa total da formação, seis deles (Estruturas de Dados, Algoritmos e Complexidade, Fundamentos de Base de Dados, Técnicas de desenvolvimento de Software, Programação para a Web e Programação para Dispositivos Móveis) serão lecionados por membros do CCISEL (Cátia Vaz, Nuno Leite, Pedro Pereira, Luís Falcão e Paulo Pereira).]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2025-01-15-prodigi.png" /><media:content medium="image" url="https://cc.isel.pt/2025-01-15-prodigi.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Progressive Server-Side Rendering with Suspendable Web Templates</title><link href="https://cc.isel.pt/programming/2024/12/03/miguel-suspending-pssr/" rel="alternate" type="text/html" title="Progressive Server-Side Rendering with Suspendable Web Templates" /><published>2024-12-03T00:00:00+00:00</published><updated>2024-12-03T00:00:00+00:00</updated><id>https://cc.isel.pt/programming/2024/12/03/miguel-suspending-pssr</id><content type="html" xml:base="https://cc.isel.pt/programming/2024/12/03/miguel-suspending-pssr/"><![CDATA[<p>At the 25th International Conference on Web Information Systems Engineering
(WISE) in Qatar, Miguel Gamboa presented a groundbreaking approach to
Progressive Server-Side Rendering (PSSR). This paper introduces an innovative
method to enhance user experiences by optimizing the first contentful paint and
enabling incremental rendering as data becomes available. Addressing the
complexities of constructing web templates for asynchronous data models, the
proposal leverages the <code>async/await</code> pattern to ensure seamless, non-blocking
progress while maintaining well-formed HTML output. This research marks a
significant step forward in simplifying server-side rendering workflows for
modern web applications.</p>

<p><em>Read the full text here: <a href="https://www.researchgate.net/publication/387265879_Progressive_Server-Side_Rendering_with_Suspendable_Web_Templates">Progressive Server-Side Rendering with Suspendable Web Templates</a></em>.</p>

<p><img src="/assets/blog/2024-12-03-miguel-pssr-concurrent.png" width="650px" /></p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;miguelgamboa&quot;, &quot;email&quot;=&gt;nil, &quot;display_name&quot;=&gt;&quot;Miguel Gamboa&quot;, &quot;image&quot;=&gt;&quot;miguel.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Developer&quot;}</name></author><category term="Programming" /><category term="web" /><category term="ssr" /><category term="programming" /><summary type="html"><![CDATA[At the 25th International Conference on Web Information Systems Engineering (WISE) in Qatar, Miguel Gamboa presented a groundbreaking approach to Progressive Server-Side Rendering (PSSR). This paper introduces an innovative method to enhance user experiences by optimizing the first contentful paint and enabling incremental rendering as data becomes available. Addressing the complexities of constructing web templates for asynchronous data models, the proposal leverages the async/await pattern to ensure seamless, non-blocking progress while maintaining well-formed HTML output. This research marks a significant step forward in simplifying server-side rendering workflows for modern web applications.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2024-12-03-miguel-suspending-pssr.png" /><media:content medium="image" url="https://cc.isel.pt/2024-12-03-miguel-suspending-pssr.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Kotlin Meetup Lisbon - Mutability: Necessity or Habit</title><link href="https://cc.isel.pt/programming/2024/10/03/palbp-kotlin-lisbon-meetup/" rel="alternate" type="text/html" title="Kotlin Meetup Lisbon - Mutability: Necessity or Habit" /><published>2024-10-03T00:00:00+00:00</published><updated>2024-10-03T00:00:00+00:00</updated><id>https://cc.isel.pt/programming/2024/10/03/palbp-kotlin-lisbon-meetup</id><content type="html" xml:base="https://cc.isel.pt/programming/2024/10/03/palbp-kotlin-lisbon-meetup/"><![CDATA[<p>On October 3rd, 2024, the Kotlin Lisbon Meetup held its 9th edition, marking the first
gathering after the summer break. The event took place at the Mercedes-Benz.io
offices in Lisbon. The meetup featured a packed agenda and brought together
Kotlin enthusiasts for an engaging evening.</p>

<p>Paulo Pereira delivered a presentation titled
<a href="https://www.youtube.com/watch?v=-sJhepOzSCc">Kotlin Meetup Lisbon - Mutability: Necessity or Habit</a>.
Kotlin, a language designed to emphasize immutability alongside mutability,
requires programmers to decide at the point of declaration: variable or value?
This approach contrasts with languages like Java, which default to variables and
inherently presume the use of mutations. During the presentation, Paulo examined
the relevance of mutability in modern software development, questioning whether
it is a practical necessity or simply a habit ingrained in the mindset of
imperative programmers. He also discussed the implications of choosing immutable
data by default and the potential gains or losses from challenging the reliance
on mutations.</p>

<p>The session explored these questions from a historical perspective and used
simple, practical examples to highlight the merits and trade-offs of
immutability as a fundamental design principle in software development.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/-sJhepOzSCc?si=UEtWC1wOLW1yqYSD" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>]]></content><author><name>{&quot;login&quot;=&gt;&quot;palbp&quot;, &quot;email&quot;=&gt;&quot;palbp@cc.isel.ipl.pt&quot;, &quot;display_name&quot;=&gt;&quot;Paulo Pereira&quot;, &quot;image&quot;=&gt;&quot;palbp.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Engineer&quot;}</name><email>palbp@cc.isel.ipl.pt</email></author><category term="Programming" /><category term="teaching" /><category term="streaming" /><category term="programming" /><summary type="html"><![CDATA[On October 3rd, 2024, the Kotlin Lisbon Meetup held its 9th edition, marking the first gathering after the summer break. The event took place at the Mercedes-Benz.io offices in Lisbon. The meetup featured a packed agenda and brought together Kotlin enthusiasts for an engaging evening.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2024-10-03-kotlin-lisbon-meetup.jpeg" /><media:content medium="image" url="https://cc.isel.pt/2024-10-03-kotlin-lisbon-meetup.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Entrevista do Paulo Pereira ao Sapo</title><link href="https://cc.isel.pt/concurrent%20programming/2024/08/13/palbp-iLikeYouLike-entrevista-a-paulo-pereira/" rel="alternate" type="text/html" title="Entrevista do Paulo Pereira ao Sapo" /><published>2024-08-13T00:00:00+00:00</published><updated>2024-08-13T00:00:00+00:00</updated><id>https://cc.isel.pt/concurrent%20programming/2024/08/13/palbp-iLikeYouLike-entrevista-a-paulo-pereira</id><content type="html" xml:base="https://cc.isel.pt/concurrent%20programming/2024/08/13/palbp-iLikeYouLike-entrevista-a-paulo-pereira/"><![CDATA[<p>Recentemente, o portal SAPO publicou uma entrevista com o Paulo Pereira, membro do CCISEL, onde foram partilhadas as suas atividades e experiências sobre o ensino através de plataformas digitais, nomeadamente o <a href="https://www.twitch.tv/paulo_pereira">Twitch</a> e o <a href="https://www.youtube.com/@ProfPauloPereira">YouTube</a>.</p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;palbp&quot;, &quot;email&quot;=&gt;&quot;palbp@cc.isel.ipl.pt&quot;, &quot;display_name&quot;=&gt;&quot;Paulo Pereira&quot;, &quot;image&quot;=&gt;&quot;palbp.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Engineer&quot;}</name><email>palbp@cc.isel.ipl.pt</email></author><category term="Concurrent Programming" /><category term="teaching" /><category term="streaming" /><category term="programming" /><summary type="html"><![CDATA[Recentemente, o portal SAPO publicou uma entrevista com o Paulo Pereira, membro do CCISEL, onde foram partilhadas as suas atividades e experiências sobre o ensino através de plataformas digitais, nomeadamente o Twitch e o YouTube.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2024-08-13-palbp-sapo.webp" /><media:content medium="image" url="https://cc.isel.pt/2024-08-13-palbp-sapo.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Enhancing SSR in Low-Thread Web Servers</title><link href="https://cc.isel.pt/java/2023/11/24/miguel-enhancing-ssr/" rel="alternate" type="text/html" title="Enhancing SSR in Low-Thread Web Servers" /><published>2023-11-24T00:00:00+00:00</published><updated>2023-11-24T00:00:00+00:00</updated><id>https://cc.isel.pt/java/2023/11/24/miguel-enhancing-ssr</id><content type="html" xml:base="https://cc.isel.pt/java/2023/11/24/miguel-enhancing-ssr/"><![CDATA[<p>Naive server-side rendering (SSR) techniques require a dedicated server thread
per HTTP request, thereby limiting the number of concurrent requests to the
available server threads.
Furthermore, this approach proves impractical for modern low-thread servers like
WebFlux, VertX, and Express Node.js.
To achieve progressive rendering, asynchronous data models provided by
non-blocking APIs must be utilized. 
Nevertheless, this method can introduce undesirable interleaving between
template view processing and data access, potentially resulting in malformed
HTML documents.
Some template engines offer partial remedies through specific templating
dialects, but they encounter two limitations.
Firstly, their compatibility is confined to specific types of asynchronous APIs,
such as the reactive stream Publisher API. 
Secondly, they typically support only a single asynchronous data model at a
time. In this research, we propose an alternative web templating approach that
embraces any asynchronous AP I (e.g., Publisher, promises, suspend functions,
flow, etc.) and allows for multiple asynchronous data sources. 
Our approach is implemented on top of HtmlFlow, a Java-based DSL for writing
type-safe HTML. We evaluated against state-of-the-art reactive servers,
specifically WebFlux, and compared it with popular templating idioms like
Thymeleaf and KotlinX.html. 
Our proposal effectively overcomes the limitations of existing approaches.</p>

<p><a href="https://www.scitepress.org/Link.aspx?doi=10.5220/0012165300003584" target="_blank">
  <img src="/assets/blog/2023-11-24-miguel-enhancing-ssr.png" width="100%" />
</a></p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;miguelgamboa&quot;, &quot;email&quot;=&gt;nil, &quot;display_name&quot;=&gt;&quot;Miguel Gamboa&quot;, &quot;image&quot;=&gt;&quot;miguel.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Developer&quot;}</name></author><category term="java" /><category term="java" /><category term="kotlin" /><summary type="html"><![CDATA[Naive server-side rendering (SSR) techniques require a dedicated server thread per HTTP request, thereby limiting the number of concurrent requests to the available server threads. Furthermore, this approach proves impractical for modern low-thread servers like WebFlux, VertX, and Express Node.js. To achieve progressive rendering, asynchronous data models provided by non-blocking APIs must be utilized. Nevertheless, this method can introduce undesirable interleaving between template view processing and data access, potentially resulting in malformed HTML documents. Some template engines offer partial remedies through specific templating dialects, but they encounter two limitations. Firstly, their compatibility is confined to specific types of asynchronous APIs, such as the reactive stream Publisher API. Secondly, they typically support only a single asynchronous data model at a time. In this research, we propose an alternative web templating approach that embraces any asynchronous AP I (e.g., Publisher, promises, suspend functions, flow, etc.) and allows for multiple asynchronous data sources. Our approach is implemented on top of HtmlFlow, a Java-based DSL for writing type-safe HTML. We evaluated against state-of-the-art reactive servers, specifically WebFlux, and compared it with popular templating idioms like Thymeleaf and KotlinX.html. Our proposal effectively overcomes the limitations of existing approaches.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2023-11-24-miguel-enhancing-ssr.png" /><media:content medium="image" url="https://cc.isel.pt/2023-11-24-miguel-enhancing-ssr.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Kotlin scope functions</title><link href="https://cc.isel.pt/kotlin/2021/09/13/felix-kotlin-scope-functions/" rel="alternate" type="text/html" title="Kotlin scope functions" /><published>2021-09-13T00:00:00+00:00</published><updated>2021-09-13T00:00:00+00:00</updated><id>https://cc.isel.pt/kotlin/2021/09/13/felix-kotlin-scope-functions</id><content type="html" xml:base="https://cc.isel.pt/kotlin/2021/09/13/felix-kotlin-scope-functions/"><![CDATA[<p><a href="https://kotlinlang.org/docs/scope-functions.html">Kotlin scope functions</a> allow the execution of code blocks in a <em>richer</em> scope, typically with the end goal of making code simpler to write and read.</p>

<p>There are five different scope functions: <code class="language-plaintext highlighter-rouge">let</code>, <code class="language-plaintext highlighter-rouge">also</code>, <code class="language-plaintext highlighter-rouge">with</code>, <code class="language-plaintext highlighter-rouge">apply</code>, and <code class="language-plaintext highlighter-rouge">run</code>.
They all receive an object and a code block that will have access to that object.</p>

<p>The <code class="language-plaintext highlighter-rouge">with</code> function is the only one that receives the object as a regular parameter.
That leaves us with four remaining functions, which can be neatly organized in a two by two table, according to the two differentiating aspects:</p>

<ul>
  <li>
    <p>How is the object made available to the block - via <code class="language-plaintext highlighter-rouge">this</code> or via the lambda’s parameter.</p>
  </li>
  <li>
    <p>What is the scope function’s evaluation result - the received object or the block’s evaluation result.</p>
  </li>
</ul>

<p><img src="/assets/blog/2021-09-13-felix-kotlin-scope-functions.jpg" width="100%" /></p>

<p>For instance, <code class="language-plaintext highlighter-rouge">apply</code> provides the context object via <code class="language-plaintext highlighter-rouge">this</code> and evaluates to the context object.
This means that the following expression’s evaluation</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>someObject.apply {
  someMethod()
}
</code></pre></div></div>
<ul>
  <li>Calls <code class="language-plaintext highlighter-rouge">someMethod</code> on <code class="language-plaintext highlighter-rouge">someObject</code> (<code class="language-plaintext highlighter-rouge">this</code> is used implicitly).</li>
  <li>Evaluates to <code class="language-plaintext highlighter-rouge">someObject</code>.</li>
</ul>

<p>The table above can be used to select the most appropriate scope function for a given use case.
Just answer these two questions and use them to select the table’s column and row, respectively:</p>

<ul>
  <li>To what should the overall expression evaluate (i.e. is the action result needed or not)?</li>
  <li>How should the context object be made available inside the block? Typically, when calling methods on the context object the most ergonomic way is via <code class="language-plaintext highlighter-rouge">this</code>.</li>
</ul>

<p>Finally, in addition to the previous five scope functions, there is also a <code class="language-plaintext highlighter-rouge">run</code> overload that doesn’t receive any object and essentially allows a block to be used as an expression.</p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;pmhfelix&quot;, &quot;email&quot;=&gt;nil, &quot;display_name&quot;=&gt;&quot;Pedro Félix&quot;, &quot;image&quot;=&gt;&quot;felix.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Developer&quot;}</name></author><category term="Kotlin" /><category term="programing" /><summary type="html"><![CDATA[Kotlin scope functions allow the execution of code blocks in a richer scope, typically with the end goal of making code simpler to write and read.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2021-09-13-felix-kotlin-scope-functions.jpg" /><media:content medium="image" url="https://cc.isel.pt/2021-09-13-felix-kotlin-scope-functions.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Deconstructing yield Operator to Enhance Streams Processing</title><link href="https://cc.isel.pt/programming/2021/07/29/deconstructing-yield/" rel="alternate" type="text/html" title="Deconstructing yield Operator to Enhance Streams Processing" /><published>2021-07-29T00:00:00+00:00</published><updated>2021-07-29T00:00:00+00:00</updated><id>https://cc.isel.pt/programming/2021/07/29/deconstructing-yield</id><content type="html" xml:base="https://cc.isel.pt/programming/2021/07/29/deconstructing-yield/"><![CDATA[<p>The <em>yield</em> keyword is a well-known feature in most programming languages to pause and resume generator functions. 
Yet, what is the performance overhead of interleaving a <em>yield</em>-based operation in streams processing?
In this work, we analyze the intrinsic costs of using <em>yield</em> on user-defined operations and we compare it with other state-of-the-art alternatives, including our proposal of a functional and minimalistic yield-based design named <a href="https://github.com/tinyield/jayield">tinyield</a>.</p>

<p><a href="https://www.scitepress.org/PublicationsDetail.aspx?ID=sFFvNu0PTDs=&amp;t=1" target="_blank">
  <img src="/assets/blog/2021-07-29-deconstructing-yield.png" width="100%" />
</a></p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;dpoeira&quot;, &quot;email&quot;=&gt;&quot;dpoeira@cc.isel.ipl.pt&quot;, &quot;display_name&quot;=&gt;&quot;Diogo Poeira&quot;, &quot;image&quot;=&gt;&quot;dpoeira.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Engineer&quot;}</name><email>dpoeira@cc.isel.ipl.pt</email></author><category term="Programming" /><category term="yield" /><category term="iterators" /><category term="generators" /><summary type="html"><![CDATA[The yield keyword is a well-known feature in most programming languages to pause and resume generator functions. Yet, what is the performance overhead of interleaving a yield-based operation in streams processing? In this work, we analyze the intrinsic costs of using yield on user-defined operations and we compare it with other state-of-the-art alternatives, including our proposal of a functional and minimalistic yield-based design named tinyield.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2021-07-29-deconstructing-yield.png" /><media:content medium="image" url="https://cc.isel.pt/2021-07-29-deconstructing-yield.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bit aites - 01</title><link href="https://cc.isel.pt/programming/2021/05/20/palbp-bitaites-ep1-alex/" rel="alternate" type="text/html" title="Bit aites - 01" /><published>2021-05-20T00:00:00+00:00</published><updated>2021-05-20T00:00:00+00:00</updated><id>https://cc.isel.pt/programming/2021/05/20/palbp-bitaites-ep1-alex</id><content type="html" xml:base="https://cc.isel.pt/programming/2021/05/20/palbp-bitaites-ep1-alex/"><![CDATA[<p>Troca de bitaites entre dois professores do ISEL e dois dos seus ex-alunos.
Nesta conversa, recheada de divagações e de descontração, foram abordados
diversos temas relacionados com a área de engenharia de software. 
Falou-se da experiência de ir trabalhar para fora de Portugal, do que consiste o
trabalho de um engenheiro de software, a importância do mestrado, os intervalos
salariais em Portugal, a diferença entre salários de Portugal e Suécia, os
ambientes de desenvolvimento, as soluções low code e o ciclo de feedback no
desenvolvimento de software. 
Trata-se sobretudo de uma conversa de café onde se trocam uns quantos bitaites
acerca da experiência pessoal dos intervenientes.</p>

<p><a href="https://www.youtube.com/watch?v=q1Kqt0QAluk" target="_blank">
  <img src="/assets/blog/2021-05-20-palbp-bitaites-ep1-alex.png" width="350px" />
</a></p>

<p>Alguns dos temas da conversa:</p>
<ul>
  <li>00:00 - Os bitaites começam</li>
  <li>07:00 - Trabalhar fora de Portugal</li>
  <li>10:00 - Utilização escassa de programação funcional</li>
  <li>17:05 - O que é isso de ser engenheiro de software?</li>
  <li>24:15 - Importância do mestrado</li>
  <li>41:00 - O que é que custou mais na hora da saída</li>
  <li>44:00 - Discussão sobre o talento que sai de Portugal</li>
  <li>49:00 - Diferença de salários Portugal-Suécia</li>
  <li>59:00 - Erlang</li>
  <li>1:08:00 - Ambiente de desenvolvimento</li>
  <li>1:18:00 - Soluções low code</li>
  <li>1:24:00 - Ciclo de feedback</li>
  <li>1:41:00 - Ranges salariais</li>
</ul>]]></content><author><name>{&quot;login&quot;=&gt;&quot;palbp&quot;, &quot;email&quot;=&gt;&quot;palbp@cc.isel.ipl.pt&quot;, &quot;display_name&quot;=&gt;&quot;Paulo Pereira&quot;, &quot;image&quot;=&gt;&quot;palbp.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Engineer&quot;}</name><email>palbp@cc.isel.ipl.pt</email></author><category term="Programming" /><category term="erlang" /><category term="MsC" /><category term="concurrency" /><summary type="html"><![CDATA[Troca de bitaites entre dois professores do ISEL e dois dos seus ex-alunos. Nesta conversa, recheada de divagações e de descontração, foram abordados diversos temas relacionados com a área de engenharia de software. Falou-se da experiência de ir trabalhar para fora de Portugal, do que consiste o trabalho de um engenheiro de software, a importância do mestrado, os intervalos salariais em Portugal, a diferença entre salários de Portugal e Suécia, os ambientes de desenvolvimento, as soluções low code e o ciclo de feedback no desenvolvimento de software. Trata-se sobretudo de uma conversa de café onde se trocam uns quantos bitaites acerca da experiência pessoal dos intervenientes.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2021-05-20-palbp-bitaites-ep1-alex.png" /><media:content medium="image" url="https://cc.isel.pt/2021-05-20-palbp-bitaites-ep1-alex.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Towards unopinionated Web templates</title><link href="https://cc.isel.pt/java/2021/05/07/miguel-towards-unopinionated-web-templates/" rel="alternate" type="text/html" title="Towards unopinionated Web templates" /><published>2021-05-07T00:00:00+00:00</published><updated>2021-05-07T00:00:00+00:00</updated><id>https://cc.isel.pt/java/2021/05/07/miguel-towards-unopinionated-web-templates</id><content type="html" xml:base="https://cc.isel.pt/java/2021/05/07/miguel-towards-unopinionated-web-templates/"><![CDATA[<p>In this article, Miguel Gamboa et al. argue against the use of an external DSL
to implement HTML templates, such as using JSP, handlebars, Thymeleaf, Vue, or
others, that introduce new dialects such as <code class="language-plaintext highlighter-rouge">th:each</code>, <code class="language-plaintext highlighter-rouge">th:with</code>, <code class="language-plaintext highlighter-rouge">v-for</code>,
<code class="language-plaintext highlighter-rouge">v-if</code>, <code class="language-plaintext highlighter-rouge">v-bind</code>, etc… On the other hand, an internal DSL like React JSX,
KotlinX.html, or HtmlFlow, let you fluently interleave constructs from the host
language (i.e. JavaScript, Kotlin, or Java, respectively) with the use of HTML.</p>

<p>Providing templating features through specific dialects incur the following drawbacks:</p>
<ol>
  <li>weak or absent compile-time validation.</li>
  <li>idiomatic mix between HTML, template dialects and the host programming language.</li>
  <li>restricted suite of control flow features leveraged by template dialects.</li>
  <li>opinionated templating idioms.</li>
  <li>lack of asynchronous rendering support, according to asynchronous view models.</li>
</ol>

<p>This work shows how an internal domain-specific language (DSL) for HTML (such as
HtmlFlow, Kotlinx.html, or React JSX) can suppress the aforementioned
limitations.
To that end, this work uses the Spring Framework and the well-known sample
application PetClinic to show how an internal DSL for HTML provides
unopinionated web templates with boundless resolving features only ruled by the
host programming language (such as Java, Kotlin, or JavaScript).</p>

<p><a href="https://gamboa.pt/img/my-papers/lnbip2020-unopinionated-templates.pdf">
  <img src="/assets/blog/2021-05-07-miguel-towards-unopinionated-web-templates.png" width="650px" />
</a></p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;miguelgamboa&quot;, &quot;email&quot;=&gt;nil, &quot;display_name&quot;=&gt;&quot;Miguel Gamboa&quot;, &quot;image&quot;=&gt;&quot;miguel.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Developer&quot;}</name></author><category term="java" /><category term="java" /><category term="kotlin" /><summary type="html"><![CDATA[In this article, Miguel Gamboa et al. argue against the use of an external DSL to implement HTML templates, such as using JSP, handlebars, Thymeleaf, Vue, or others, that introduce new dialects such as th:each, th:with, v-for, v-if, v-bind, etc… On the other hand, an internal DSL like React JSX, KotlinX.html, or HtmlFlow, let you fluently interleave constructs from the host language (i.e. JavaScript, Kotlin, or Java, respectively) with the use of HTML.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2021-05-07-miguel-towards-unopinionated-web-templates.png" /><media:content medium="image" url="https://cc.isel.pt/2021-05-07-miguel-towards-unopinionated-web-templates.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Corrotinas Kotlin, com Pedro Félix</title><link href="https://cc.isel.pt/concurrent%20programming/2021/03/01/palbp-talking-kotlin-coroutines-with-pfelix/" rel="alternate" type="text/html" title="Corrotinas Kotlin, com Pedro Félix" /><published>2021-03-01T00:00:00+00:00</published><updated>2021-03-01T00:00:00+00:00</updated><id>https://cc.isel.pt/concurrent%20programming/2021/03/01/palbp-talking-kotlin-coroutines-with-pfelix</id><content type="html" xml:base="https://cc.isel.pt/concurrent%20programming/2021/03/01/palbp-talking-kotlin-coroutines-with-pfelix/"><![CDATA[<p>Está publicada no YouTube a gravação da conversa entre o Paulo Pereira e o Pedro Felix acerca do suporte Kotlin para corrotinas. O Pedro Félix fala da motivação para o seu uso e descreve as principais características do modelo de programação resultante.</p>

<p>Durante a conversa o Pedro Félix dá resposta às seguintes questões:</p>
<ul>
  <li>Qual a relevância das corrotinas Kotlin? Que problema pretendem resolver? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=4s">00:04​</a></li>
  <li>Qual a relação entre corrotinas, threads, fibras ou outras construções análogas? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=354s">05:54​</a></li>
  <li>Qual a relação entre corrotinas e suspending functions? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=890s">14:50​</a></li>
  <li>Como são executadas as corrotinas? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=1716s">28:36​</a></li>
  <li>O custo da suspensão da corrotina é comparável ao custo da suspensão da thread? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=2055s">34:15​</a></li>
  <li>O uso de corrotinas implica o uso de sincronização? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=2684s">44:44​</a></li>
  <li>Os benefícios do uso de corrotinas no servidor e no cliente são os mesmos? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=3355s">55:55​</a></li>
  <li>Quais são os principais elementos do modelo de programação disponibilizado? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=3509s">58:29</a></li>
  <li>Como se pode conciliar o modelo de programação das corrotinas com o uso de APIs assíncronas clássicas? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=4204s">1:10:04​</a></li>
  <li>Porque se diz que nas corrotinas Kotlin a concorrência é, por desenho, explícita? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=5420s">1:30:20​</a></li>
  <li>O que se entende por concorrência estruturada? <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=5945s">1:39:05​</a></li>
</ul>

<p>Epílogo da conversa <a href="https://www.youtube.com/watch?v=K_fqNQz3UoU&amp;list=PL8XxoCaL3dBhrsR7Sf4tVxOLCdrzfWTvG&amp;index=1&amp;t=7955s">2:12:35​</a></p>]]></content><author><name>{&quot;login&quot;=&gt;&quot;palbp&quot;, &quot;email&quot;=&gt;&quot;palbp@cc.isel.ipl.pt&quot;, &quot;display_name&quot;=&gt;&quot;Paulo Pereira&quot;, &quot;image&quot;=&gt;&quot;palbp.jpg&quot;, &quot;role&quot;=&gt;&quot;Software Engineer&quot;}</name><email>palbp@cc.isel.ipl.pt</email></author><category term="Concurrent Programming" /><category term="kotlin" /><category term="coroutines" /><category term="concurrency" /><summary type="html"><![CDATA[Está publicada no YouTube a gravação da conversa entre o Paulo Pereira e o Pedro Felix acerca do suporte Kotlin para corrotinas. O Pedro Félix fala da motivação para o seu uso e descreve as principais características do modelo de programação resultante.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cc.isel.pt/2021-03-01-palbp-talking-kotlin-coroutines-with-pfelix.png" /><media:content medium="image" url="https://cc.isel.pt/2021-03-01-palbp-talking-kotlin-coroutines-with-pfelix.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>