<?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: Donni</title>
    <description>The latest articles on DEV Community by Donni (@donni106).</description>
    <link>https://dev.to/donni106</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%2F246508%2F93bb87b1-e687-41e0-8b37-6f6e273de75b.png</url>
      <title>DEV Community: Donni</title>
      <link>https://dev.to/donni106</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/donni106"/>
    <language>en</language>
    <item>
      <title>Mac setup for web &amp; mobile development in 2022</title>
      <dc:creator>Donni</dc:creator>
      <pubDate>Fri, 16 Sep 2022 15:26:43 +0000</pubDate>
      <link>https://dev.to/donni106/mac-setup-for-web-mobile-development-in-2022-16hk</link>
      <guid>https://dev.to/donni106/mac-setup-for-web-mobile-development-in-2022-16hk</guid>
      <description>&lt;p&gt;I make a big switch from my beloved iMac (Retina 5K, 27'', Late 2015) to the latest MacBook Pro (14'', 2021) with M1 Max chip. Not only because the iMac was getting old and fragile, I want to be more flexibel in my remote work. The iMac still runs a macOS Mojave (10.14.6) due to the fear to updating it because of all the small things that could possibly go wrong. Everything is precisely aligned, works fine and I don't wanted to spend hours or days with fixing stuff in a tons of projects that maybe fail afterwards. For private use I own a Lenovo ThinkPad X1 Extreme (15'', 3. Gen) with Windows 10, which I have used from time to time to make remote work, but always with limitations. The Windows Subsystem or Linux (WSL) is great and one can do nearly everything, but the biggest limitation for me as a mobile developer has always been the impossibility for Apple stuff.&lt;/p&gt;

&lt;p&gt;My last setup was nearly 100% covered by Thoughtbot's laptop script: &lt;a href="https://github.com/thoughtbot/laptop"&gt;https://github.com/thoughtbot/laptop&lt;/a&gt;. Now I am highly inspired by &lt;a class="mentioned-user" href="https://dev.to/rwieruch"&gt;@rwieruch&lt;/a&gt; and his personal setup documented in a post from February: &lt;a href="https://www.robinwieruch.de/mac-setup-web-development"&gt;https://www.robinwieruch.de/mac-setup-web-development&lt;/a&gt;. I will combine "copying" system preferences from my iMac, updating my old script based on Thoughtbot's and picking additional highlights from Robin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The following part is not fully finished and will grow by time...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adopt and adjust system preferences
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dock&lt;/li&gt;
&lt;li&gt;Menu bar&lt;/li&gt;
&lt;li&gt;turn off siri, notifications, ...&lt;/li&gt;
&lt;li&gt;setup calendar&lt;/li&gt;
&lt;li&gt;setup mail

&lt;ul&gt;
&lt;li&gt;merge mail rules per SyncedRules.plist&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;disable most in spotlight&lt;/li&gt;
&lt;li&gt;finder with additional commands&lt;/li&gt;
&lt;li&gt;auto hide dock and decrease delay

&lt;ul&gt;
&lt;li&gt;defaults write com.apple.dock autohide-delay -float 0.03; killall Dock&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;install xcode

&lt;ul&gt;
&lt;li&gt;start xcode&lt;/li&gt;
&lt;li&gt;agree license&lt;/li&gt;
&lt;li&gt;setup command line tools in preferences &amp;gt; locations&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;install transporter&lt;/li&gt;
&lt;li&gt;remove garageband&lt;/li&gt;
&lt;li&gt;create Development folder in ~&lt;/li&gt;
&lt;li&gt;rosetta 2&lt;/li&gt;
&lt;li&gt;ssh key (manual copy of .ssh/config and .ssh/keys)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Homebrew
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;install in terminal&lt;/li&gt;
&lt;li&gt;used for everything else upcoming&lt;/li&gt;
&lt;li&gt;install iterm2&lt;/li&gt;
&lt;li&gt;install vscode&lt;/li&gt;
&lt;li&gt;update macbook script

&lt;ul&gt;
&lt;li&gt;asdf instead of nvm yvm rbenv&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;git config&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;h2&gt;
  
  
  iterm2
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ohmyzsh&lt;/li&gt;
&lt;li&gt;no plugins&lt;/li&gt;
&lt;li&gt;settings

&lt;ul&gt;
&lt;li&gt;dim inactive panes and background windows&lt;/li&gt;
&lt;li&gt;working directory -&amp;gt; reuse previous for new tabs and panes&lt;/li&gt;
&lt;li&gt;cursor -&amp;gt; vertical&lt;/li&gt;
&lt;li&gt;scrollback lines 1.000 -&amp;gt; 100.000&lt;/li&gt;
&lt;li&gt;focus follows mouse&lt;/li&gt;
&lt;li&gt;railscasts color scheme&lt;/li&gt;
&lt;li&gt;key bindings for jumping across words&lt;/li&gt;
&lt;li&gt;
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Finj5zy6l7mn028m2q2zu.png" alt="iterm2 settings" width="800" height="568"&gt; &lt;/li&gt;
&lt;li&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdfddiisikn4bcqrva9y.png" alt="iterm2 key bindings" width="800" height="210"&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;h2&gt;
  
  
  VSCode
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;extensions

&lt;ul&gt;
&lt;li&gt;less then before, maybe adding them later if needed&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;settings

&lt;ul&gt;
&lt;li&gt;railscasts color scheme &lt;a href="https://dev.to/donni106/railscasts-color-scheme-for-vscode-integrated-terminal-1nhm"&gt;https://dev.to/donni106/railscasts-color-scheme-for-vscode-integrated-terminal-1nhm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;secret gist (show example screenshot or maybe settings paste)&lt;/li&gt;
&lt;li&gt;sublime keybindings&lt;/li&gt;
&lt;li&gt;and also shift+cmd+d for "Duplicate Selection", instead of "View: Show Run and Debug"&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;other applications

&lt;ul&gt;
&lt;li&gt;photoscape&lt;/li&gt;
&lt;li&gt;bear&lt;/li&gt;
&lt;li&gt;choosy&lt;/li&gt;
&lt;li&gt;fork&lt;/li&gt;
&lt;li&gt;fork cli&lt;/li&gt;
&lt;li&gt;shottr&lt;/li&gt;
&lt;li&gt;maccy&lt;/li&gt;
&lt;li&gt;cron&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;auto start applications&lt;/li&gt;
&lt;li&gt;sync browser bookmarks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;To be continued...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>mac</category>
      <category>web</category>
      <category>mobile</category>
      <category>dev</category>
    </item>
    <item>
      <title>Railscasts color scheme for VSCode integrated terminal</title>
      <dc:creator>Donni</dc:creator>
      <pubDate>Fri, 01 Jul 2022 13:32:20 +0000</pubDate>
      <link>https://dev.to/donni106/railscasts-color-scheme-for-vscode-integrated-terminal-1nhm</link>
      <guid>https://dev.to/donni106/railscasts-color-scheme-for-vscode-integrated-terminal-1nhm</guid>
      <description>&lt;p&gt;Anyone still using the Railscasts color scheme for development like me? I like the smooth earthy colors besides the fact that I have been used to it for more than 10 years. It all started in Sublime Text and I have adopted it for iTerm2 for consistency. When switching over from Sublime Text 2 to VSCode I was happy to found the color scheme present as well. Since then I was unhappy with the default color scheme of the integrated terminal, although I use it very rarely.&lt;/p&gt;

&lt;p&gt;Today I have created a color customization for the integrated terminal of VSCode which you can find as a gist here: &lt;a href="https://gist.github.com/donni106/04a9a3cff5f41c45db52785425732482"&gt;https://gist.github.com/donni106/04a9a3cff5f41c45db52785425732482&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5tec3osvbhv84smm1b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5tec3osvbhv84smm1b0.png" alt="Image description" width="800" height="909"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I found a nice script that was simple to use here: &lt;a href="https://gist.github.com/2xAA/bd01638dc9ca46c590fda06c4ef0cc5a"&gt;https://gist.github.com/2xAA/bd01638dc9ca46c590fda06c4ef0cc5a&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;col&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;// run your .itermcolors file through a parser to get json and replace the array with the output&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;componentToHex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`0&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hex&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mapping&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.background&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Background Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.foreground&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Foreground Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminalCursor.background&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cursor Text Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminalCursor.foreground&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Cursor Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBlack&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 0 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBlue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 4 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightBlack&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 8 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightBlue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 12 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightCyan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 14 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightGreen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 10 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightMagenta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 13 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightRed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 9 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightWhite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 15 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiBrightYellow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 11 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiCyan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 6 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiGreen&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 2 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiMagenta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 5 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiRed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 1 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiWhite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 7 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terminal.ansiYellow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ansi 3 Color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vsCodeKey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;itermKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mapping&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vsCodeKey&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;red&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;componentToHex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;col&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;itermKey&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Red Component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;green&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;componentToHex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;col&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;itermKey&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Green Component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;componentToHex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;col&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nx"&gt;itermKey&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Blue Component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

  &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vsCodeKey&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`#&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;red&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;green&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{}),&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before running the script I had to convert the itermcolors file to a JSON, which was able with a tool at: &lt;a href="https://json2plist.sinaapp.com"&gt;https://json2plist.sinaapp.com&lt;/a&gt; (Plist -&amp;gt; JSON).&lt;/p&gt;

&lt;p&gt;The outcome needs to be copied in the VSCode settings under the &lt;code&gt;workbench.colorCustomizations&lt;/code&gt; key.&lt;/p&gt;

&lt;p&gt;Now it shines in the same glow ⭐&lt;/p&gt;

</description>
      <category>railscasts</category>
      <category>vscode</category>
      <category>terminal</category>
      <category>colorscheme</category>
    </item>
    <item>
      <title>Custom icon labels in Google Charts Pie Chart</title>
      <dc:creator>Donni</dc:creator>
      <pubDate>Sat, 21 Mar 2020 17:22:00 +0000</pubDate>
      <link>https://dev.to/donni106/custom-icon-labels-in-google-charts-pie-chart-1meo</link>
      <guid>https://dev.to/donni106/custom-icon-labels-in-google-charts-pie-chart-1meo</guid>
      <description>&lt;p&gt;In january this year a colleague and me worked on visualizing data with Google Charts for a customer. There was this one request concerning special icons inside of the charts. My first reaction was: "This should not be possible using one of these chart frameworks". Why? Because customizing frameworks is always hard, and the request was very special. It was not about changing colors or adding white space. The wish was to change the default behaviour of a presentation inside a chart.&lt;br&gt;
So in our case we had a pie chart with some slices, that should have icon labels. Normally Google Charts presents a text label or value. So, is it possible to change this with reasonable efforts?  &lt;strong&gt;Yes it is!&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;Create and import an icon font to use it in the Pie Chart options at &lt;code&gt;pieSliceTextStyle&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;When we thought about what is showing in the chart, we came to the result: &lt;strong&gt;text&lt;/strong&gt;. A basic pie slice has a color and a text label or value. With checking the &lt;a href="https://developers.google.com/chart/interactive/docs/gallery/piechart#configuration-options"&gt;Pie Chart options&lt;/a&gt; we found out, that you can choose between &lt;code&gt;'label'&lt;/code&gt; or &lt;code&gt;'value'&lt;/code&gt; instead of the default &lt;code&gt;'percentage'&lt;/code&gt; for &lt;code&gt;pieSliceText&lt;/code&gt;.&lt;br&gt;
When thinking about showing an icon we needed to think about the context. An icon should represent something outstanding and unique. In the chart we had data, that contained various numbers for different objects. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;❕ For this article I simplify things with speaking about healthy fruits to show in the chart. So we can imagine different types of fruits, each with a random value, e.g. the amount of vitamine c.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Back in january we created a chart with text labels first, which we could show to the customer. The bad thing about using text labels was the length of the texts. Too long labels were automatically hidden by Google Charts, which resulted in a colorful tasty pie with missing labels.&lt;br&gt;
After we searched the web as usual for solutions but this time without success, we have consulted again.&lt;br&gt;
So we have fruits and numbers. What are we showing in the chart? Text labels for each fruit. What can we display per icon? &lt;strong&gt;Fruits&lt;/strong&gt;, because each of them is unique and recognizeable.&lt;/p&gt;

&lt;h3&gt;
  
  
  The main question now was: How can we change the text label into an icon?
&lt;/h3&gt;

&lt;p&gt;Checking the docs again, we found the option &lt;code&gt;pieSliceTextStyle&lt;/code&gt;, which allows changing the font per &lt;code&gt;fontName&lt;/code&gt;. &lt;strong&gt;This was the needed trigger for the magic idea to use an icon font!&lt;/strong&gt;&lt;br&gt;
With using an icon font we do not change any functionality of the framework. The label still remains text, but with a special font it shows what we want, instead of basic characters. 💥&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a custom icon font
&lt;/h2&gt;

&lt;p&gt;IcoMoon is an awesome tool for generating custom icon fonts. You can upload svg files and &lt;a href="https://icomoon.io/app"&gt;IcoMoon App&lt;/a&gt; will convert it and build an icon font for you for free! Thanks guys ✋&lt;/p&gt;

&lt;p&gt;You need to add named ligatures (fi) to the icons. This makes it possible to reference and use an icon by a real name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F53jozyxop7laftbaocxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F53jozyxop7laftbaocxo.png" alt="Custom icon font with ligatures" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have no opportunity to set custom names in the Google Charts data, so the icons must represent the labels by having the exactly same name. If we want to show a plum, we need an icon called Plum. If we want an apple, we need Apple.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final comparison between default text labels and custom icon labels
&lt;/h2&gt;

&lt;p&gt;I found nothing about that possibility on the web before, so I wanted to share our journey in this short article. It is my first ever written article. I'm open for advices. If you already read about similar approches, please share them with me.&lt;/p&gt;

&lt;p&gt;In the end, using icons can have benefits but can also bring problems. You have to decide for each unique situation, if this is something for you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;❕ The numbers and percentages in the following image are randomly chosen. These are no true data!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fup6ms16oyqi8qkalu3tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fup6ms16oyqi8qkalu3tv.png" alt="Text labels vs. custom icon labels" width="754" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find the code on my CodePen: &lt;a href="https://codepen.io/donni106/pen/Exjexow"&gt;https://codepen.io/donni106/pen/Exjexow&lt;/a&gt;&lt;br&gt;
&lt;em&gt;❕ Do not wonder about missing icons. The icon font was created per IcoMoon free plan, which means "These links expire in 24 hours. To get permanent unchanging links, Go Premium.", sorry!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>google</category>
      <category>pie</category>
      <category>chart</category>
      <category>icon</category>
    </item>
  </channel>
</rss>
