<?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: Camden Clark</title>
    <description>The latest articles on DEV Community by Camden Clark (@camdenclark).</description>
    <link>https://dev.to/camdenclark</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%2F147540%2Fde702c3e-cf3b-47c1-8277-c81367b8c24a.jpeg</url>
      <title>DEV Community: Camden Clark</title>
      <link>https://dev.to/camdenclark</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/camdenclark"/>
    <language>en</language>
    <item>
      <title>Why can't browsers natively handle cookie consent?</title>
      <dc:creator>Camden Clark</dc:creator>
      <pubDate>Mon, 29 Mar 2021 09:18:54 +0000</pubDate>
      <link>https://dev.to/camdenclark/why-can-t-browsers-natively-handle-cookie-consent-1omc</link>
      <guid>https://dev.to/camdenclark/why-can-t-browsers-natively-handle-cookie-consent-1omc</guid>
      <description>&lt;p&gt;With the implementation of GDPR and CCPA, every website has to have their own half-baked implementation of a cookie consent banner. For the uninitiated, these are the banners that appear at the bottom of webpages that say "Accept Cookies" or "Decline". These banners can sometimes take up half the viewport or not be responsive on mobile. Moreover, it's really common that these &lt;a href="https://uxdesign.cc/cookie-banners-and-accessibility-d476bf9ee4fc"&gt;banners often have serious accessibility issues that might make them non-compliant&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There should be a better way.&lt;/p&gt;

&lt;p&gt;What if browsers could have a similar native UX implementation for cookie consent as with getting access to the microphone, for example? The user experience I'm thinking about here is as follows: the user would be prompted in the browser context whether or not to allow access to cookies when navigating to a webpage. There's a lot of room in the design space here to make sure that the user is in control while minimizing the damage to the user experience on the web.&lt;/p&gt;

&lt;p&gt;Before I get in to a few roadblocks I see, there could be ongoing work in this space, but some googling didn't help me here. If it's not being worked on, there's probably a few other reasons this hasn't been done yet (this is just a random thought I had), so please leave a comment if I've missed something.&lt;/p&gt;

&lt;h4&gt;
  
  
  Roadblock 1: Old browser versions
&lt;/h4&gt;

&lt;p&gt;This is inevitably a huge roadblock. But we already have a bad patchwork of implementations, so it seems like that damage has been done here. Why not try to move towards a better standard?&lt;/p&gt;

&lt;h4&gt;
  
  
  Roadblock 2: Not granular enough
&lt;/h4&gt;

&lt;p&gt;It's probable that a cookie interface for the browser wouldn't be granular enough to support all use cases (say, missing different levels of cookies to opt-in to). But, again, I think websites that want to support use cases outside of regulatory frameworks should probably implement their own interfaces. Getting 95% of the way there seems worth it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Roadblock 3: Regulatory patchwork
&lt;/h4&gt;

&lt;p&gt;This is probably the main roadblock for the near future. A lot of these laws are in their infancy, and many jurisdictions are considering their regulatory frameworks on data privacy right now.&lt;/p&gt;

&lt;p&gt;This could be totally naive, but this could actually be an argument for writing a standard now. If there's a consistent standard that gets negotiated with all parties at the table, it would be way easier to lobby governments across the world that they should write regulation that matches the standard.&lt;/p&gt;

&lt;p&gt;I'll just reiterate: I'm not super familiar with this area or what ongoing work or discussions have been had in the past here. Just sketching out some thoughts I had and found it difficult to find any information about decisions in this space.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>discuss</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Why don't voice apps see more adoption?</title>
      <dc:creator>Camden Clark</dc:creator>
      <pubDate>Sat, 08 Aug 2020 06:23:51 +0000</pubDate>
      <link>https://dev.to/camdenclark/why-don-t-voice-apps-see-more-adoption-bkp</link>
      <guid>https://dev.to/camdenclark/why-don-t-voice-apps-see-more-adoption-bkp</guid>
      <description>&lt;p&gt;I read &lt;a href="https://voicebot.ai/2020/05/03/streaming-music-questions-weather-timers-and-alarms-remain-smart-speaker-killer-apps-third-party-voice-app-usage-not-growing/"&gt;this summary of smart speaker usage&lt;/a&gt; and was struck by how little adoption third party smart speaker apps are gaining. It's not particularly &lt;em&gt;surprising&lt;/em&gt;: just ask anyone not super familiar with the technology if they've used an Alexa skill. It seems like the third party ecosystem would have been more robust by now.&lt;/p&gt;

&lt;h4&gt;
  
  
  A Quick Note on Discoverability
&lt;/h4&gt;

&lt;p&gt;From what I've been reading, there's a ton of discourse in the voice application community on discoverability. Sure, discoverability is really important for lots of applications. Ask yourself this: how many of the applications on your phone did you install after finding them in the app store?&lt;/p&gt;

&lt;p&gt;I don't think discoverability is the key. If users were getting consistent value, we'd see adoption.&lt;/p&gt;

&lt;h4&gt;
  
  
  It's all about jobs to be done
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;What can your user accomplish that they can't accomplish easier by picking up their phone?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I think the Jeopardy skill is an excellent example--it's actually easier to dictate answers to Jeopardy than it is to write them on your phone.&lt;/p&gt;

&lt;p&gt;There are a ton of reasons why the subset of jobs to be done with third party voice apps is really small right now. What do you think is the key?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;mirrored &lt;a href="https://camden.codes/blog/voice-and-adoption/"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>voice</category>
      <category>skills</category>
      <category>alexa</category>
    </item>
    <item>
      <title>Github Actions: What you might want to know</title>
      <dc:creator>Camden Clark</dc:creator>
      <pubDate>Thu, 06 Aug 2020 05:58:06 +0000</pubDate>
      <link>https://dev.to/camdenclark/github-actions-what-you-might-want-to-know-415l</link>
      <guid>https://dev.to/camdenclark/github-actions-what-you-might-want-to-know-415l</guid>
      <description>&lt;p&gt;I really wanted to try out &lt;a href="https://docs.github.com/en/actions"&gt;github actions&lt;/a&gt; for my newest project, &lt;a href="https://plaud.io"&gt;plaud.io&lt;/a&gt;. So I did.&lt;/p&gt;

&lt;p&gt;It's a CI/CD tool that's fully integrated into your github repo workflow.&lt;/p&gt;

&lt;p&gt;The jist is this: you have workflows, which run completely independently. You have jobs inside those workflows, which can run independently or based on a a DAG style dependency model. And, inside jobs you have steps. Each step is either a shell command you specify, or there are pre-baked steps built by the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I liked
&lt;/h2&gt;

&lt;p&gt;It's absurdly easy to get started. I was able to go from nothing to building my projects in about 30 minutes, which is really excellent.&lt;/p&gt;

&lt;p&gt;Secrets are available right at your fingertips, there's no misdirection, you just set up secrets in your environment and you can inject them anywhere.&lt;/p&gt;

&lt;p&gt;Everything is in the same space. I don't have to integrate with another CI/CD tool, and for a simple project it is nice to have things all in the same space.&lt;/p&gt;

&lt;p&gt;I used a few pre-baked steps: google cloud cli setup, publish to npm if there's a new version, and a cached npm install. All of the pre-baked steps I used worked without much fanfare. One of these was a pretty nascent open source project, so it's nice that they work well and are reliable!&lt;/p&gt;

&lt;p&gt;It's also really easy to change the things that trigger a specific workflow. Built into each workflow you can specify which files changing would run a specific workflow, only trigger them on PR, only on certain tags, etc. This is really batteries included.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was kind of cumbersome
&lt;/h2&gt;

&lt;p&gt;Let's say I had this project structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;lib/&lt;/code&gt; - a private node library deployed to a private npm repo&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;frontend/&lt;/code&gt; - depends on lib from npm&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/&lt;/code&gt; - depends on lib from npm&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to be able to build and publish lib first, then build the frontend and backend. This is totally possible and quite easy.&lt;/p&gt;

&lt;p&gt;There's a few caveats here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;[It's my understanding that] you have to specify the working directory on &lt;em&gt;every single step&lt;/em&gt;. It would be really nice to be able to specify a working directory once per job. I guess you can specify an environment variable and then use that, but it's still a lot of boilerplate.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can't conditionally run jobs based on changes in the repo. It would be awesome to avoid building and deploying the backend if there are no changes to &lt;code&gt;backend/&lt;/code&gt; or &lt;code&gt;lib/&lt;/code&gt;. I guess I could build my own pre-baked step in a docker container and just short-circuit the job if there's no changes...but that's a lot of work I feel like I shouldn't have to do. This functionally means you're forced to run a long deploy script even if there are no changes, or you split them all into different workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I was a little frustrated that some of the pre-baked steps didn't allow you to specify working-directories. I think it would be nice to be able to run a step in the context of a working-directory even if the step doesn't have an explicit setting for it. There's probably some technical reason for being unable to do this, but not super clear to me.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  A couple other separate things
&lt;/h4&gt;

&lt;p&gt;I have a background in clojure, and the tooling for that didn't seem very well developed. I'd definitely do some investigation if you're using a less popular technology if you don't want to do a ton of bootstrapping.&lt;/p&gt;

&lt;p&gt;One other separate thing: I really couldn't get the workflow exclude paths feature to work. Kind of annoying, but I didn't end up doing it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Overall, a really positive experience using github actions. I think as it matures it will be much easier to use, but for now, if you're taking on a heavy project with lots of weird build steps, you might want to pick up something more tried and true.&lt;/p&gt;

</description>
      <category>github</category>
      <category>ci</category>
      <category>git</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
