<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arshabhi Rai</title>
    <description>The latest articles on DEV Community by Arshabhi Rai (@arshabhirai).</description>
    <link>https://dev.to/arshabhirai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F187221%2Fe858b319-3ee1-4b79-af23-3a00afc6f881.jpeg</url>
      <title>DEV Community: Arshabhi Rai</title>
      <link>https://dev.to/arshabhirai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arshabhirai"/>
    <language>en</language>
    <item>
      <title>Recapping Day 2 of SmashingConf Toronto 2019</title>
      <dc:creator>Arshabhi Rai</dc:creator>
      <pubDate>Sat, 29 Jun 2019 01:12:48 +0000</pubDate>
      <link>https://dev.to/solacedevs/recapping-day-2-of-smashingconf-toronto-2019-c0e</link>
      <guid>https://dev.to/solacedevs/recapping-day-2-of-smashingconf-toronto-2019-c0e</guid>
      <description>&lt;p&gt;I recently recapped my experience at the &lt;a href="https://dev.to/solacedevs/recapping-day-1-of-smashingconf-toronto-2019-40cb"&gt;first day of Smashing Conference&lt;/a&gt; in Toronto, and didn’t want to leave you hanging so here’s a quick summary of day 2. As before, I’ve published a fairly comprehensive writeup over on Medium.&lt;/p&gt;

&lt;p&gt;Day 2 covered trending topics in front-end development such as service workers, performance, CSS grid, color systems, and component-based development and design.&lt;/p&gt;

&lt;p&gt;The day also featured a mystery speaker who frankly blew me away – renowned English artist and calligrapher &lt;a href="https://www.seblester.com/"&gt;Seb Lester&lt;/a&gt;. I was mesmerized by his work and presentation, and took away some things that will reshape the way I work – like knowing when to stop and move on, and how experimenting with ideas away from corporate work can give way to more creative, expressive designs.&lt;/p&gt;

&lt;p&gt;Here’s a summary of my take on the rest of the speakers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For the Love of the Grid:&lt;/strong&gt; In just forty minutes, and in front of our very eyes, &lt;a href="https://codepen.io/julesforrest/"&gt;Jules Forrest&lt;/a&gt; transformed a printed restaurant menu into a responsive web page using CSS Grid and CodePen. She emphasized the fact that getting overly creative isn’t always necessary or good, as sticking with common UI patterns can help users more easily navigate your site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diving into Service Workers, Live:&lt;/strong&gt; &lt;a href="https://philna.sh/"&gt;Phil Nash&lt;/a&gt; demonstrated how “&lt;a href="https://www.npmjs.com/package/service-worker-mock"&gt;service worker&lt;/a&gt;” strategy can be used to make websites work offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seeing the Pages for Components:&lt;/strong&gt; Graphic designer &lt;a href="http://danroseonline.com/"&gt;Dan Rose&lt;/a&gt; then shared his thoughts on how to identify common symptoms of non-cohesive design. He explained how &lt;a href="https://weareadjacent.com/blog/component-connectivity/"&gt;component connectivity&lt;/a&gt; can help you prioritize consistency to create a steady visual flow among all components, while working with the content team because content drives design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Secret Lives of Color Systems:&lt;/strong&gt; In this session, &lt;a href="https://broccolini.net/"&gt;Diana Mounter&lt;/a&gt; demonstrated the work behind adding a new feature to offer users the ability to change GitHub’s color theme from white to dark mode. She used a Gatsby app and a sample repository of the GitHub to demonstrate the process, techniques, and challenges of updating the color scheme of an enterprise-level web application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move Fast and Don’t Break Things:&lt;/strong&gt; In this forty minutes session, &lt;a href="https://scottjehl.com/"&gt;Scott Jehl&lt;/a&gt; talked about issues in web performance and shared some ways of improving them. One example being “progressive enhancement” that can accelerate a web site regardless of network speed and device type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Day 2 ended with a &lt;a href="https://smashingconf.com/toronto-2019/photo-walk"&gt;Photo Walk,&lt;/a&gt; which we unfortunately missed, but here is a fun picture of the “Smashing Family.” Smashing Family, thank you for a great event!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HDyCbT5I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2019/06/1_EUxA9nuDIl-mjCuJ_oaYEQ-1024x768.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HDyCbT5I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2019/06/1_EUxA9nuDIl-mjCuJ_oaYEQ-1024x768.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://solace.com/blog/smashingconf-toronto-2019-day-2/"&gt;Recapping Day 2 of SmashingConf Toronto 2019&lt;/a&gt; appeared first on &lt;a href="https://solace.com"&gt;Solace&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>smashingconf</category>
      <category>solace</category>
    </item>
    <item>
      <title>Recapping Day 1 of SmashingConf Toronto 2019</title>
      <dc:creator>Arshabhi Rai</dc:creator>
      <pubDate>Thu, 27 Jun 2019 19:10:51 +0000</pubDate>
      <link>https://dev.to/solacedevs/recapping-day-1-of-smashingconf-toronto-2019-40cb</link>
      <guid>https://dev.to/solacedevs/recapping-day-1-of-smashingconf-toronto-2019-40cb</guid>
      <description>&lt;p&gt;I was stoked to attend SmashingConf in Toronto this year. SmashingConf is the place to be if you want to learn about front-end and UX development. My colleague &lt;a href="https://www.linkedin.com/in/blainehussey/"&gt;Blaine Hussey&lt;/a&gt; and I were so excited that we showed up at 8:00 a.m. and waited anxiously for the doors to open.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d6w95Q9Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2019/06/arsh-blaine-smashing-conf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d6w95Q9Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://solace.com/wp-content/uploads/2019/06/arsh-blaine-smashing-conf.jpg" alt="A photo of Arshabhi Rai and Blaine Hussey standing in front of the SmashingConf Toronto 2019 welcome poster"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Me on left, Blaine on right&lt;/p&gt;

&lt;p&gt;On the first day, seven speakers delivered compelling talks about everything from animation and front-end code architecture to inclusive design and digital policies. I’ve summarized what they talked about here, and written more over on Medium.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Let’s Build a Design System:&lt;/strong&gt; &lt;a href="http://bradfrost.com/"&gt;Brad Frost&lt;/a&gt;, author of the book &lt;em&gt;Atomic Design&lt;/em&gt; and co-host of the Style Guides podcast, kicked things off by talking about how to build a design system. He shared some great ideas about code architecture, modularity and reuse of components; demonstrating key concepts with a pair of front-end development tools called &lt;a href="https://patternlab.io/"&gt;io&lt;/a&gt; and &lt;a href="https://storybook.js.org/"&gt;Story UI&lt;/a&gt;. In my &lt;a href="https://dev.to/solacedevs/re-designing-documentation-website-from-planning-to-launch-ba9-temp-slug-5286738"&gt;recent experience re-designing&lt;/a&gt; Solace’s documentation site, it was critical to design and code through the lens of the software we use, which also included &lt;a href="https://dev.to/solacedevs/integrating-the-algolia-docsearch-into-madcap-flare-based-customer-documentation-32l1-temp-slug-7562892"&gt;third-party software&lt;/a&gt; we wanted to integrate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let’s Build a Vue App from Scratch:&lt;/strong&gt; We then heard from &lt;a href="https://sarahdrasnerdesign.com/"&gt;Sarah Drasner&lt;/a&gt;, who’s the head of developer experience at Netlify and a member of the team behind &lt;a href="https://vuejs.org/"&gt;Vue.js&lt;/a&gt;, an open source javascript library for building user interfaces and single-page applications. She showed us how to use Vue to build a functional application with routing, server-side rendering, and animations using Nuxt.js and her Vue snippet extensions. I was intrigued by how she used her custom Vue snippets and other tools such as CSS Grid generator, that she had developed herself, to speed up her workflow. Very cool!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JAMStack: Silly Name, Serious Stuff:&lt;/strong&gt; Then &lt;a href="https://twitter.com/philhawksworth"&gt;Phil Hawksworth&lt;/a&gt;, head of developer relations for &lt;a href="https://netlify.com/"&gt;Netlify&lt;/a&gt;, cleared up what &lt;a href="https://jamstack.org/"&gt;JAMStack&lt;/a&gt; means (Javascript + APIs + pre-rendered Markup), and demonstrated how WebHooks and APIs can be used to trigger events, generate notifications and create and automate the development environment. His key message was that you should simplify the technology stack, decouple sites from deployment environments and automate as much as you can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building Bridges, Not Walls:&lt;/strong&gt; Seasoned UX consultant &lt;a href="https://jennyshen.com/"&gt;Jenny Shen&lt;/a&gt; gave a fascinating talk about how cultural differences do – or should, at least – influence product and interface design. She made it clear that it’s no longer enough to simply translate text on the page – to increase trust and engagement, designers must understand and factor for &lt;a href="https://www.hofstede-insights.com/country-comparison/"&gt;the wide range&lt;/a&gt; of cultural, habitual and other social differences across countries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let’s Create a Web Animation from Scratch:&lt;/strong&gt; Illustrator and animator &lt;a href="https://gannon.tv/"&gt;Chris Gannon&lt;/a&gt; walked us through the process of creating an animation with SVG code. It was fascinating to see the decisions he made as he coded and how even the smallest detail in code can have a significant impact on the output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital Policy and Standards Rehab Hour:&lt;/strong&gt; &lt;a href="https://www.kpodnar.com/"&gt;Kristina Podnar&lt;/a&gt;, author of &lt;a href="http://thepowerofdigitalpolicy.com/"&gt;The Power of Digital Policy&lt;/a&gt;, explained how the often overlooked matter of digital policy and standards actually plays a vital role in creating a good website. She talked about some common challenges and how to use policies and standards to enhance website health.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentic Digital Design by the Numbers:&lt;/strong&gt; Last but not least, &lt;a href="https://www.linkedin.com/in/shoobe01/"&gt;Steven Hoober&lt;/a&gt; (who literally wrote the book on mobile design, i.e. O’Reilly’s &lt;a href="https://www.amazon.com/gp/product/1449394639"&gt;Designing Mobile Interfaces&lt;/a&gt;) detailed the unique usability challenges faced when designing for mobile devices, such as the fact that people don’t start at the top of mobile screens, but in the middle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was an informative day, and if you find these topics as fascinating as I did, I think you’ll get a lot out of my detailed description of their presentations &lt;a href="https://medium.com/@arshrai.ca/day-1-smashingconf-toronto-2019-97596bddc69e"&gt;over on Medium&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quick update…here’s &lt;a href="https://solace.com/blog/smashingconf-toronto-2019-day-2/"&gt;my quick take on day two&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://solace.com/blog/smashingconf-toronto-day-1/"&gt;Recapping Day 1 of SmashingConf Toronto&lt;/a&gt; appeared first on &lt;a href="https://solace.com"&gt;Solace&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>smashingconf</category>
      <category>solace</category>
    </item>
    <item>
      <title>Integrating the Algolia DocSearch into MadCap Flare-based Customer Documentation</title>
      <dc:creator>Arshabhi Rai</dc:creator>
      <pubDate>Thu, 18 Apr 2019 18:53:47 +0000</pubDate>
      <link>https://dev.to/solacedevs/integrating-the-algolia-docsearch-into-madcap-flare-based-customer-documentation-3anb</link>
      <guid>https://dev.to/solacedevs/integrating-the-algolia-docsearch-into-madcap-flare-based-customer-documentation-3anb</guid>
      <description>&lt;p&gt;&lt;a href="https://solace.com/"&gt;Solace&lt;/a&gt; recently redesigned its brand. As part of this initiative, all the web properties had to be updated, including our MadCap Flare-based customer documentation website. A significant piece in this project was integrating &lt;a href="https://community.algolia.com/docsearch/"&gt;Algolia DocSearch&lt;/a&gt; with &lt;a href="https://www.madcapsoftware.com/products/flare/"&gt;MadCap Flare&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k8UFLkUU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A5vPlhGvJ2L_cZQ3MK_K-mQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k8UFLkUU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2A5vPlhGvJ2L_cZQ3MK_K-mQ.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why DocSearch?
&lt;/h3&gt;

&lt;p&gt;In &lt;a href="https://docs.solace.com/"&gt;docs.solace.com&lt;/a&gt;, we have several externally hosted web pages. Since those web pages are not part of the Flare project, their content could not be searched using Flare’s internal search engine, which, unfortunately, was a weakness in our docs. Along with resolving this issue, we were also intrigued by the idea of having a context-aware search engine that could quickly predict and find what users search.&lt;/p&gt;

&lt;p&gt;After doing some research, I found a few third-party search engine services that could potentially solve our problem. We narrowed down our decision to try DocSearch. We were required to apply for DocSearch. Once our application was approved, the DocSearch team created a custom JSON configuration for our website. The configuration file defined which URLs to crawl or ignore, as well as the CSS selectors to be used for selecting headers, subheaders, and the results summary. All the DocSearch configuration files are publicly available in GitHub, and users can customize it as per their documentation needs. They also provided us with a JavaScript (JS) library and snippet that we had to add to our website. The scripts are used to track the keystrokes typed in the search input field, and the results that match the text are displayed as a dropdown list.&lt;/p&gt;

&lt;p&gt;So, all we had to do was add some custom updates to the configuration file, paste the JS library and snippet to the master pages in Flare, and then design the search UI. Sounds simple, no? Not really.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Integrating DocSearch&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When I added the DocSearch scripts into the Flare project, it immediately threw a bunch of errors. Flare has several built-in scripts including &lt;a href="https://requirejs.org/"&gt;require.js&lt;/a&gt;, which is bundled with Flare. Many third-party scripts conflict with Flare’s foundational scripts if not consumed by require.js. So, for the DocSearch scripts to work, it had to be consumed by require.js. Tricky stuff for a simple technical writer 😊. I reached out to two of my developer colleagues and worked with them to resolve the integration errors. Thanks, &lt;a href="https://www.linkedin.com/in/ian-wong-105a2161/"&gt;Ian Wong&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/ye-deng-3347692/"&gt;Ye Deng&lt;/a&gt;. You guys are amazing!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Solution&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The DocSearch team provided the following JavaScript library and snippet:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\&amp;lt;!-- at the end of the HEAD --\&amp;gt;
\&amp;lt;script type=”text/javascript” src=”https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"\&amp;gt;\&amp;lt;/script\&amp;gt;

\&amp;lt;!-- at the end of the BODY --\&amp;gt;
\&amp;lt;script type=”text/javascript”\&amp;gt;
 docsearch({
 apiKey: ‘###########’,
 indexName: ‘YourIndexName’,
 inputSelector: ‘#youInputselector’,
 algoliaOptions: { ‘facetFilters’: [‘tags:docs’] },
 debug: false, // Set debug to true if you want to inspect the dropdown
});
\&amp;lt;/script\&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;After we added the script in Flare and published a build, following JS errors were highlighted on Chrome’s developer console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w9GxABRF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AXAefhAdqz8h8Ko9y" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w9GxABRF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AXAefhAdqz8h8Ko9y" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The error occurred as the script was running outside Flare’s foundational JS. To resolve this issue, we figured out a way to load those scripts as a require.js module.&lt;/p&gt;

&lt;p&gt;We used the require.config method to load the DocSearch JS library:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require.config({
 paths: {
 “docsearchLib” : “https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min"
 }
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;After that, we nested the docsearch snippet and docsearchLib inside the require() call for the configuration:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require(["docsearchLib"], function(docsearch){
 docsearch({
 apiKey: '###########',
 indexName: 'YourIndexName',
 inputSelector: '#youInputselector',
 algoliaOptions: { 'facetFilters': ['tags:docs'] },
 debug: false,
 });
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Once we added the updated scripts and published a build, our new search engine was up and running.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\&amp;lt;body\&amp;gt;
....

\&amp;lt;script\&amp;gt;

require.config({
 paths: {
 “docsearchLib” : “https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min"
 }
});

require(["docsearchLib"], function(docsearch){
 docsearch({
 apiKey: '###########',
 indexName: 'YourIndexName',
 inputSelector: '#youInputselector',
 algoliaOptions: { 'facetFilters': ['tags:docs'] },
 debug: false,
 });
});

\&amp;lt;/script\&amp;gt;

\&amp;lt;/body\&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can see the result in &lt;a href="https://docs.solace.com/"&gt;docs.solace.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the next post, I will be covering other aspects of our documentation website redesign — planning, content migration, and development.&lt;/p&gt;




</description>
      <category>algolia</category>
      <category>madcapflare</category>
      <category>technicalwriting</category>
      <category>searchengines</category>
    </item>
  </channel>
</rss>
