<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Shalinda Dilshan Ranasinghe on Medium]]></title>
        <description><![CDATA[Stories by Shalinda Dilshan Ranasinghe on Medium]]></description>
        <link>https://medium.com/@shalindadilshanranasinghe?source=rss-846fe814c74a------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*woDHfbvFgwxXL4Oi.</url>
            <title>Stories by Shalinda Dilshan Ranasinghe on Medium</title>
            <link>https://medium.com/@shalindadilshanranasinghe?source=rss-846fe814c74a------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 23:01:39 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@shalindadilshanranasinghe/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[AI Isn’t Replacing Knowledge Workers. It’s Changing What Knowledge Means.]]></title>
            <link>https://medium.com/@shalindadilshanranasinghe/ai-isnt-replacing-knowledge-workers-it-s-changing-what-knowledge-means-4333e6fdc305?source=rss-846fe814c74a------2</link>
            <guid isPermaLink="false">https://medium.com/p/4333e6fdc305</guid>
            <dc:creator><![CDATA[Shalinda Dilshan Ranasinghe]]></dc:creator>
            <pubDate>Thu, 06 Aug 2026 17:42:56 GMT</pubDate>
            <atom:updated>2026-08-06T17:42:56.818Z</atom:updated>
            <content:encoded><![CDATA[<p>Over the past year, I’ve noticed something interesting.</p><p>Many people are now producing documents, designs, meeting summaries, requirements, and even software without deeply understanding the subject. They record a meeting, let AI transcribe it, ask AI to generate documentation, and share the results.</p><p>The output often looks great.</p><p>But it made me wonder…</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qKFR3H5M3FsyzWVUW3HnwA.png" /></figure><p><strong>Are we creating knowledge, or are we simply orchestrating it?</strong></p><p>I don’t think this is a bad thing. In fact, I believe AI is one of the biggest productivity breakthroughs we’ve seen.</p><p>My theory is simple.</p><p>AI should help us do three things:</p><ul><li>Capture knowledge</li><li>Orchestrate knowledge</li><li>Increase human productivity</li></ul><p>Imagine every meeting recorded, every decision captured, every design searchable, and every piece of organizational knowledge available in seconds. That’s incredibly powerful.</p><p>The real value isn’t that AI writes documents.</p><p>The value is that it helps preserve what organizations know and makes that knowledge available to everyone.</p><p>But there are also new challenges emerging.</p><p>Some people may become very good at using AI without truly understanding the work behind the output.</p><p>Future professionals might know which prompt to use but not why the answer is correct.</p><p>Organizations could slowly lose deep expertise if everyone relies on AI instead of learning the fundamentals.</p><p>This creates a new responsibility.</p><p>I think one of the most valuable skills in the AI era won’t be writing documents — it will be validating them.</p><p>Critical thinking, asking the right questions, and knowing when AI is wrong may become more important than creating the first draft.</p><p>Maybe we’re seeing the birth of a new role.</p><p>Not just a software engineer.<br>Not just a business analyst.<br>Not just a project manager.</p><p>But a <strong>Knowledge Orchestrator</strong> — someone who knows how to connect people, AI, data, and organizational knowledge to solve problems faster.</p><p>For me, AI isn’t about replacing experts.</p><p>It’s about making experts dramatically more productive while capturing knowledge that would otherwise disappear after a meeting, a phone call, or when someone leaves the company.</p><p>We’re still in the early days of this transformation.</p><p>The technology will continue to improve.</p><p>The bigger question is whether we’ll use it to replace thinking — or to amplify it.</p><p>I’d love to hear what others are seeing.</p><p>Are we creating a generation of AI-assisted experts, or a generation of AI operators?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4333e6fdc305" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Micro frontends with SmartGWT and Angular]]></title>
            <link>https://medium.com/@shalindadilshanranasinghe/micro-frontends-with-smartgwt-and-angular-cd1fdb68aafd?source=rss-846fe814c74a------2</link>
            <guid isPermaLink="false">https://medium.com/p/cd1fdb68aafd</guid>
            <dc:creator><![CDATA[Shalinda Dilshan Ranasinghe]]></dc:creator>
            <pubDate>Fri, 12 Apr 2024 02:06:48 GMT</pubDate>
            <atom:updated>2024-04-12T15:30:32.950Z</atom:updated>
            <content:encoded><![CDATA[<p>Creating a hybrid shell application that integrates a SmartGWT module for “Employee” management and an Angular 2 application for “Student” management involves several distinct steps across different technologies. This document outlines the complete process, providing code snippets and detailing the steps required to achieve integration.</p><h3>Overview</h3><p>The goal is to create a shell application with a left-side navigation menu that allows users to switch between two separate modules: a SmartGWT-based “Employee” module and an Angular-based “Student” module. The integration involves serving the Angular application separately and dynamically loading it within the shell application, alongside managing the SmartGWT module.</p><h3>Prerequisites</h3><ul><li>Node.js and npm installed for Angular development.</li><li>Java SDK and GWT SDK for SmartGWT development.</li><li>Angular CLI installed (npm install -g @angular/cli).</li></ul><h3>Step 1: Create the Shell Application Layout</h3><p>The shell application should have a basic layout with a left-side menu containing two items (“Employee” and “Student”) and a right-side area to dynamically display the selected module.</p><h4>Shell Application Layout (HTML)</h4><pre>&lt;div id=&quot;app&quot;&gt;<br>    &lt;div id=&quot;menu&quot;&gt;<br>        &lt;ul&gt;<br>            &lt;li onclick=&quot;loadEmployeeModule()&quot;&gt;Employee&lt;/li&gt;<br>            &lt;li onclick=&quot;loadStudentApp()&quot;&gt;Student&lt;/li&gt;<br>        &lt;/ul&gt;<br>    &lt;/div&gt;<br>    &lt;div id=&quot;content&quot;&gt;<br>        &lt;!-- Dynamic content will be loaded here --&gt;<br>    &lt;/div&gt;<br>&lt;/div&gt;</pre><h3>Step 2: Serve the Angular Student App Separately</h3><h4>Building the Angular Student Application</h4><ol><li>Create the Angular application (ng new student-app).</li><li>Develop the student management functionality.</li><li>Build the application for production (ng build --prod).</li><li>Serve the built application from a server accessible via URL.</li></ol><h4>Angular Student Application (TypeScript Example)</h4><pre>// student.ts<br>export class Student {<br>  id: number;<br>  name: string;<br>  grade: number;<br>}<br>// student.service.ts<br>import { Injectable } from &#39;@angular/core&#39;;<br>import { Student } from &#39;./student&#39;;<br>@Injectable({<br>  providedIn: &#39;root&#39;,<br>})<br>export class StudentService {<br>  private students: Student[] = [{ id: 1, name: &#39;John Doe&#39;, grade: 90 }];<br>  <br>  getStudents(): Student[] {<br>    return this.students;<br>  }<br>  addStudent(student: Student) {<br>    this.students.push(student);<br>  }<br>}</pre><h3>Step 3: Load the Angular App on Demand</h3><p>When the “Student” menu item is clicked, load the Angular app using an iframe within the shell application.</p><h4>Dynamically Loading the Angular App</h4><pre>function loadStudentApp() {<br>    document.getElementById(&#39;content&#39;).innerHTML = &#39;&lt;iframe src=&quot;http://localhost:4200&quot; style=&quot;width:100%; height:100%;&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&#39;;<br>}</pre><h3>Step 4: Integrate the SmartGWT Employee Module</h3><p>Develop the “Employee” management functionality using SmartGWT within the shell application. When the “Employee” menu item is clicked, dynamically load the SmartGWT Employee module.</p><h4>SmartGWT Employee Module (Java Example)</h4><pre>public void loadEmployeeModule() {<br>    VLayout layout = new VLayout();<br>    layout.setWidth100();<br>    layout.setHeight100();<br><br>    ListGrid employeeGrid = new ListGrid();<br>    employeeGrid.setWidth100();<br>    employeeGrid.setHeight100();<br>    // Configure the grid with employee data<br>    layout.addMember(employeeGrid);<br>    RootPanel.get(&quot;content&quot;).add(layout);<br>}</pre><h3>Step 5: Switch Between Modules Dynamically</h3><p>Attach event listeners to the “Employee” and “Student” menu items to dynamically load the respective module content into the shell application.</p><pre>document.getElementById(&#39;employeeMenuItem&#39;).onclick = loadEmployeeModule;<br>document.getElementById(&#39;studentMenuItem&#39;).onclick = loadStudentApp;</pre><h3>Final Considerations</h3><ul><li>Integration Complexity: Bridging two significantly different frameworks requires careful consideration, especially for routing, state management, and look-and-feel consistency.</li><li>Performance and UX: Using an iframe to embed the Angular app might not provide the best user experience and could have implications for performance and styling.</li><li>Maintenance: Maintaining a hybrid application with components from two different technology stacks can increase the complexity of upgrades, debugging, and performance optimization.</li></ul><p>This guide outlines a basic approach to integrating SmartGWT and Angular applications within a single shell application, providing a starting point for developers looking to leverage the strengths of both frameworks in a unified project.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cd1fdb68aafd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular subpath with docker]]></title>
            <link>https://medium.com/@shalindadilshanranasinghe/angular-subpath-with-docker-a8bcadd89a1c?source=rss-846fe814c74a------2</link>
            <guid isPermaLink="false">https://medium.com/p/a8bcadd89a1c</guid>
            <category><![CDATA[angular]]></category>
            <category><![CDATA[docker]]></category>
            <dc:creator><![CDATA[Shalinda Dilshan Ranasinghe]]></dc:creator>
            <pubDate>Fri, 13 Sep 2019 02:43:10 GMT</pubDate>
            <atom:updated>2019-09-13T02:43:10.147Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/52/1*tFd-LfhgnP_UD3U6d96q1w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/150/1*FgAO98Ig0_PHNJBGx2xsQQ.png" /></figure><p>Spent a lot of time in a Angular 6 single page application where I had to use different base paths for router and static assets. Angular makes use of the base href to tell router how to compose navigation URLs. If your application exists at the root, then you can use / as the href value as shown below. But use of the subpath makes it complicated</p><p>To solve my problem, I used —-base-href and —-deploy-url options as shown below.</p><pre>ng build -prod --base-href /ui --deploy-url /ui</pre><p>The Dockerfile</p><pre>FROM node:10.14.2 AS <em>builder<br></em>COPY . ./src<br>WORKDIR /src<br>RUN npm i<br>RUN npm rebuild node-sass<br>RUN $(npm bin)/ng build --base-href &#39;/ui/&#39; --deploy-url &#39;/ui/&#39;</pre><pre>FROM nginx<br>COPY --from=<em>builder </em>/src/dist/* /etc/nginx/html</pre><p>Docker build</p><pre>docker build -t agui .</pre><p>Running your docker</p><pre>docker run -p 8080:80 agui</pre><p><a href="http://localhost:8080/ui">http://localhost:8080/ui</a> should render the application.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a8bcadd89a1c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>