<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Little Handy Tips</title>
	<atom:link href="http://littlehandytips.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://littlehandytips.com</link>
	<description>Helping you save time and be more productive</description>
	<lastBuildDate>Mon, 08 Jul 2024 00:36:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/cropped-logo.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Little Handy Tips</title>
	<link>https://littlehandytips.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">13796269</site>	<item>
		<title>Stop the Clutter: How to Prevent Macs from Creating .DS_Store Files on Network Drives</title>
		<link>https://littlehandytips.com/stop-the-clutter-how-to-prevent-macs-from-creating-ds_store-files-on-network-drives/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Mon, 08 Jul 2024 00:15:36 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://littlehandytips.com/?p=41275</guid>

					<description><![CDATA[Ever browsed a network shared folder on your Windows PC and seen a bunch of mysterious &#8220;.DS_Store&#8221; files? These hidden files are a byproduct of macOS, storing information like icon view preferences and custom backgrounds for folders. While harmless, they can clutter up your shared drives and cause headaches for non-Mac users. Luckily, there&#8217;s a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="1024" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-41276" srcset="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?w=1024&amp;ssl=1 1024w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2024/07/ds-store-files.jpg?resize=440%2C440&amp;ssl=1 440w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Ever browsed a network shared folder on your Windows PC and seen a bunch of mysterious &#8220;.DS_Store&#8221; files? These hidden files are a byproduct of macOS, storing information like icon view preferences and custom backgrounds for folders. While harmless, they can clutter up your shared drives and cause headaches for non-Mac users.</p>



<p class="wp-block-paragraph">Luckily, there&#8217;s a simple way to prevent Macs from creating these .DS_Store files on network shares. Here&#8217;s how:</p>



<p class="wp-block-paragraph"><strong>Using Terminal:</strong></p>



<ol class="wp-block-list">
<li>Open the Terminal app (Applications &gt; Utilities).</li>



<li>Enter the following command and press return:</li>
</ol>



<pre class="wp-block-code"><code>defaults write com.apple.desktopservices DSDontWriteNetworkStores true
</code></pre>



<p class="wp-block-paragraph">This command instructs macOS not to write .DS_Store files to network volumes.</p>



<ol class="wp-block-list" start="3">
<li>Restart your Mac for the changes to take effect.</li>
</ol>



<p class="wp-block-paragraph"><strong>Verifying the Setting (Optional):</strong></p>



<p class="wp-block-paragraph">If you&#8217;re curious, you can verify the setting with another Terminal command:</p>



<pre class="wp-block-code"><code>defaults read com.apple.desktopservices DSDontWriteNetworkStores
</code></pre>



<p class="wp-block-paragraph">This should return &#8220;true&#8221; if the setting is enabled.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Run the following command in Terminal to delete existing .DS_store files (replacing /&lt;YourShareName> with the location of your network share drive</p>



<pre class="wp-block-code"><code>find /&lt;YourShareName> -name ".DS_Store" -delete</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><strong>What to Expect:</strong></p>



<p class="wp-block-paragraph">After implementing this change, Macs will no longer create .DS_Store files on network shares. Existing .DS_Store files might remain, but they won&#8217;t cause any harm. You can manually delete them if desired.</p>



<p class="wp-block-paragraph"><strong>Benefits:</strong></p>



<ul class="wp-block-list">
<li><strong>Cleaner Network Drives:</strong> No more clutter from hidden .DS_Store files.</li>



<li><strong>Improved Performance:</strong> Browsing network shares might feel snappier without the overhead of writing these files.</li>



<li><strong>Compatibility Boost:</strong> Prevents permission errors that can sometimes arise with .DS_Store files on shared drives.</li>
</ul>



<p class="wp-block-paragraph"><strong>Keep in Mind:</strong></p>



<p class="wp-block-paragraph">This setting only affects Macs. Windows and other operating systems won&#8217;t be impacted.</p>



<p class="wp-block-paragraph"><strong>Conclusion:</strong></p>



<p class="wp-block-paragraph">By preventing the creation of .DS_Store files, you can streamline your network share experience and ensure a smoother workflow for all users, regardless of their platform. With this simple Terminal tweak, you can keep your shared drives organized and clutter-free.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">41275</post-id>	</item>
		<item>
		<title>New Website Design</title>
		<link>https://littlehandytips.com/new-website-design/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Sat, 29 Sep 2018 12:40:43 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Blogging]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=40861</guid>

					<description><![CDATA[After five and a half years, it is time to give the website a new coat of paint. New website&#8217;s layout, same great content. Below are screenshots of the old and new website designs. Old Design &#160; New Design &#160;]]></description>
										<content:encoded><![CDATA[<p>After five and a half years, it is time to give the website a new coat of paint. New website&#8217;s layout, same great content.</p>
<p>Below are screenshots of the old and new website designs.</p>
<h1>Old Design</h1>
<p><a href="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-old-website-index.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone size-large wp-image-40862" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-old-website-index.png?resize=1024%2C978&#038;ssl=1" alt="" width="1024" height="978" srcset="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-old-website-index.png?resize=1024%2C978&amp;ssl=1 1024w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-old-website-index.png?resize=300%2C287&amp;ssl=1 300w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-old-website-index.png?resize=768%2C734&amp;ssl=1 768w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-old-website-index.png?w=1047&amp;ssl=1 1047w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>&nbsp;</p>
<h1>New Design</h1>
<p><a href="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-website-index.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone size-full wp-image-40863" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-website-index.png?resize=955%2C867&#038;ssl=1" alt="" width="955" height="867" srcset="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-website-index.png?w=955&amp;ssl=1 955w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-website-index.png?resize=300%2C272&amp;ssl=1 300w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2018/09/2018_09_20-website-index.png?resize=768%2C697&amp;ssl=1 768w" sizes="(max-width: 955px) 100vw, 955px" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">40861</post-id>	</item>
		<item>
		<title>Using GPG for SSH access on GitHub</title>
		<link>https://littlehandytips.com/using-gpg-for-ssh-access-on-github/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Wed, 26 Sep 2018 02:01:34 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://littlehandytips.com/?p=40787</guid>

					<description><![CDATA[Using SSH keys for github, you can connect to it without having to supply a username and password.
If you already have a gpg key, below are instructions on how you can use it for SSH access.
The benefits of doing this would be that you only have the one GPG key to manage, rather than that and an extra SSH key.]]></description>
										<content:encoded><![CDATA[<p>Using SSH keys for github, you can connect to it without having to supply a username and password.<br />
If you already have a gpg key, below are instructions on how you can use it for SSH access.<br />
The benefits of doing this would be that you only have the one GPG key to manage, rather than that and an extra SSH key.</p>
<h1>Generate a new GPG key</h1>
<p>Refer to <a href="https://help.github.com/articles/generating-a-new-gpg-key/">https://help.github.com/articles/generating-a-new-gpg-key/ </a>for instructions on how to generate the gpg key</p>
<h1>Generate an authentication subkey</h1>
<p>The steps were taken from <a href="https://www.linode.com/docs/security/authentication/gpg-key-for-ssh-authentication/">here</a>. (credit for this step goes to the guys at linode.com)</p>
<ol>
<li>In a command prompt or terminal, type:
<pre><code>gpg2 --expert --edit-key key-id
</code></pre>
<p>Replace <code>key-id</code> with the eight-character string output from the key generation process. This will be found in the line beginning with <code>pub</code>. In the example above, the ID is <code>71735D23</code>.</li>
<li>At the new <code>gpg&gt;</code> prompt, enter:
<pre><code>addkey
</code></pre>
</li>
<li>When prompted, enter your passphrase.</li>
<li>When asked for the type of key you want, select: <code>(8) RSA (set your own capabilities)</code>.</li>
<li>Enter <code>S</code> to toggle the ‘Sign’ action off.</li>
<li>Enter <code>E</code> to toggle the ‘Encrypt’ action off.</li>
<li>Enter <code>A</code> to toggle the ‘Authenticate’ action on. The output should now include <code>Current allowed actions: Authenticate</code>, with nothing else on that line.</li>
<li>Enter <code>Q</code> to continue.</li>
<li>When asked for a keysize, choose <code>4096</code>. The same limitation from Step 4 in the first section applies, so ensure your card/YubiKey can support this key size.</li>
<li>Enter an expiration date, just as before. You should probably keep this the same as the first one. If you choose a lower expiration date, your main private key will continue to function but your SSH authentication will break on this date.</li>
<li>When you’re sure all of the information entered is correct, enter <code>y</code> at the <code>Really create? (y/N)</code> prompt to complete the process.</li>
<li>Once the key is created, enter <code>quit</code> to leave the gpg prompt, and <code>y</code> at the prompt to save changes.</li>
</ol>
<p>Your terminal should now look like this:</p>
<div class="btn-copy"></div>
<pre><code>$ gpg2 --expert --edit-key 71735D23

Secret key is available.

pub  4096R/71735D23  created: 2016-04-09  expires: 2017-04-09  usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/693C5635  created: 2016-04-09  expires: 2017-04-09  usage: E
[ultimate] (1). Your Name (Test for GPG -&gt; SSH) &lt;you@yoursite.net&gt;

gpg&gt; addkey
Key is protected.

You need a passphrase to unlock the secret key for
user: "Your Name (Test for GPG -&gt; SSH) &lt;you@yoursite.net&gt;"
4096-bit RSA key, ID 71735D23, created 2016-04-09

Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
Your selection? 8

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? S

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? E

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions:

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? A

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Authenticate

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? Q
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
      &lt;n&gt;  = key expires in n days
      &lt;n&gt;w = key expires in n weeks
      &lt;n&gt;m = key expires in n months
      &lt;n&gt;y = key expires in n years
Key is valid for? (0) 1y
Key expires at Sun Apr  9 18:49:58 2017 AEST
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy.

pub  4096R/71735D23  created: 2016-04-09  expires: 2017-04-09  usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/693C5635  created: 2016-04-09  expires: 2017-04-09  usage: E
sub  4096R/48B9C23C  created: 2016-04-09  expires: 2017-04-09  usage: A
[ultimate] (1). Your Name (Test for GPG -&gt; SSH) &lt;you@yoursite.net&gt;

gpg&gt; quit
Save changes? (y/N) y
</code></pre>
<h1>SSH configuration</h1>
<p>some snippets were copied from <a href="https://ryanlue.com/posts/2017-06-29-gpg-for-ssh-auth">ryanlue.com</a></p>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Add the following line to ~/.gnupg/gpg-agent.conf
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight">enable-ssh-support
</pre>
</div>
</div>
</li>
<li>Add the following lines to ~/.bash_profile
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight">export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent
</pre>
</div>
</div>
</li>
<li>Run the following:
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight">$ gpgconf --kill gpg-agent  # (just in case it’s already running)
$ source ~/.bash_profile
</pre>
</div>
</div>
</li>
<li>Tell gpg-agent which subkey to pass to ssh by adding its “keygrip” to <code>~/.gnupg/sshcontrol</code>:
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight">$ gpg -k --with-keygrip
/Users/you/.gnupg/pubring.kbx
------------------------------
pub   rsa2048/93BDD96B 2017-06-29 [SC]
      D03833D3D52F5FFCCC73452461671825E8DEC139
      Keygrip = 8A6CDC5FCE05A5B251BD8C397B269607534B4702
uid         [ultimate] Big John &lt;big.john@gmail.com&gt;
sub   rsa2048/0424163D 2017-06-29 [E]
      Keygrip = E110250E32B811D45879A66F487CE95BC1906D77
sub   rsa2048/8F228EDB 2017-06-29 [A]
      Keygrip = 32BC5688805A640D495E8A7B41EC78F74E77E098
$ echo 32BC5688805A640D495E8A7B41EC78F74E77E098 &gt; ~/.gnupg/sshcontrol
</pre>
</div>
</div>
</li>
<li>Confirm key has been added:
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight">$ ssh-add -l
2048 SHA256:zQ1wF6qOq8UNqcSRMYhDc+Cg3yM9lgp8dWvXwjnPcvU (none)
(RSA)
</pre>
</div>
</div>
</li>
<li>Get public key:
<div class="highlighter-rouge">
<div class="highlight">
<pre class="highlight">$ ssh-add -L
ssh-rsa AAASJHKHGUYGUYHGBUYGFHBNYGYUBUYGUYHHBUYGYU2048zQ1wF6q 
... 
Oq8UNqcSRMYhDc+Cg3yM9lgp8dWvXwjnPcvU== (none)
</pre>
</div>
</div>
</li>
</ul>
</li>
</ul>
<h1>Adding SSH public key to Github</h1>
<p>Add the SSH public key (from the previous step) into your GitHub account following <a href="https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/">this GitHub guide</a>.</p>
<p>Once done, you can <a href="https://help.github.com/articles/testing-your-ssh-connection/">test your SSH connection</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">40787</post-id>	</item>
		<item>
		<title>Trust your CDN but verify with SRI</title>
		<link>https://littlehandytips.com/trust-your-cdn-but-verify-with-sri/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Wed, 15 Jun 2016 11:12:43 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=40694</guid>

					<description><![CDATA[When using Content Delivery Networks (CDNs), we should trust but verify using SRI. Here's how to do that.]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p>I attended a SecTalks meetup last night which talked about the dangers of Content Delivery Networks being compromised (CDNs).</p>
<p>Lots of websites source their javascript and css resources from CDNs to improve their website&#8217;s performance. Examples of CDNs are jquery, bootstrap, google api and Amazon S3.</p>
<p>This implicit trust of external/third party resources can put those websites at risk of being compromised, even without those web servers being hacked.</p>
<p>&nbsp;</p>
<h4>How so?, you might ask.</h4>
<p>Well through the CDN being compromised, the website might be sourcing infected javascript files with malicious code (such as keyloggers) or with css stylesheets that can deface your website.</p>
<p>A well known example of this sort of attack was when <a class="external-link" href="https://medium.com/@FredericJacobs/the-reuters-compromise-by-the-syrian-electronic-army-6bf570e1a85b#.b760v52jj" rel="nofollow">Reuters&#8217; website got hacked back in 2014</a> and had their website redirected to somewhere else. Reuters itself wasn&#8217;t hacked, but the CDN it used was.</p>
<p>&nbsp;</p>
<h4>Trust but Verify</h4>
<p>A recent W3C specification, <a class="external-link" href="https://www.w3.org/TR/SRI/" rel="nofollow">Subresource Integrity</a> (SRI), allows websites that include javascript to stop working if that file had been modified. This allows websites to benefit from the performance gain of using CDNs without the fear that a CDN compromise can harm their website.</p>
<p>This can be done using the <em>integrity </em>attribute. See examples below.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone size-full wp-image-40699" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2016/06/sriCodeExample.png?resize=759%2C146&#038;ssl=1" alt="sriCodeExample" width="759" height="146" srcset="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2016/06/sriCodeExample.png?w=759&amp;ssl=1 759w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2016/06/sriCodeExample.png?resize=300%2C58&amp;ssl=1 300w" sizes="(max-width: 759px) 100vw, 759px" /></p>
<p>The value of the integrity is basically the hash of the file. Currently the supported hash functions are SHA-256, SHA-384 and SHA-512.</p>
<p>&nbsp;</p>
<h4 id="TrustyourCDNbutverifywithSRI-HowdoIgeneratethehash?">How do I generate the hash?</h4>
<p>You can run the sha256sum, sha284sum or sha512sum command on a terminal to generate the hash.</p>
<p>Alternatively, there are websites which does the same thing too, such as the <a class="external-link" href="https://www.srihash.org/" rel="nofollow">SRI Hash Generator</a>. However with this option, it might lead you to ask how you can trust that those SRI generator websites aren&#8217;t compromised themselves.</p>
<p>On top of that some common CMS have plugins for doing SRI, such as the <a class="external-link" href="https://wordpress.org/plugins/wp-sri/" rel="nofollow">WordPress SRI manager plugin</a>.</p>
<p>&nbsp;</p>
<h4 id="TrustyourCDNbutverifywithSRI-NotallbrowserscurrentlysupportSRI">Not all browsers currently support SRI</h4>
<p>The specification is currently only supported on Firefox, Chrome and Opera. So those using Internet Explorer and Safari don&#8217;t currently benefit from SRI.</p>
<p>However looking at the recent browser statistics, those three browsers make up for almost 90% of the browser market share.</p>
<p>&nbsp;</p>
<h4 id="TrustyourCDNbutverifywithSRI-Conclusion">Conclusion</h4>
<p>SRI allow websites to enjoy the performance benefits of using CDNs and give companies peace of mind that the content they are using have not been compromised.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">40694</post-id>	</item>
		<item>
		<title>Mac File Name Case Preserving yet Case Insensitive</title>
		<link>https://littlehandytips.com/mac-file-name-case-preserving-yet-case-insensitive/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Sat, 21 Feb 2015 11:51:22 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Shell]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=40318</guid>

					<description><![CDATA[Mac OS have case preserving and case insensitive file systems. This little handy tip will talk about that does that mean and also mention the gotchas from having such a file system and what can be done to prevent it.]]></description>
										<content:encoded><![CDATA[<p>Recently I was made aware of a little gotcha in the Mac file system. And that is file names on a Mac OS are case preserving, yet case insensitive.</p>
<p>What this means is that the cases are preserved in the file name, but when accessing the file, the name you use to identify the file is not case sensitive.</p>
<p>For example if you have a file named <em>MyFile.txt</em>. The cases in that file name is preserved. However when you want to access the file, you can call the filename as MyFile.txt or MYFILE.txt or Myfile.txt and in the mac, it will all reference the same file.</p>
<p>So you can do something like this.</p>
<pre>$ echo "Hello World" &gt; MyFile.txt
$ cat MyFile.txt
Hello World
$ cat Myfile.txt
Hello World
$ echo "Hello Again" &gt;&gt; myfile.txt
$ cat MyFile.txt
Hello World
Hello Again
$ ls 
MyFile.txt
</pre>
<h3></h3>
<h3>So Where&#8217;s the Gotcha?</h3>
<p>The gotcha lies mainly when you use the file in two different file systems and one of them uses case sensitive file names.</p>
<p>For example if you are writing Java code in a Mac but your build server run on Linux. You might be working on a file called MyClass.java but when you initially created the file, it was called Myclass.java. However because MyClass.java would reference the same file as Myclass.java, you weren&#8217;t aware of it until the class gets compiled on Linux.</p>
<p>Another example is you might have a script which executes another script or make references to other files. The file naming case sensitively on the Mac might bite you when you try to run that same script on a different operating system.</p>
<h3>How do I work around this?</h3>
<p>From what I have read, the case insensitive file system is actually a good thing on the Mac as for those who decided to reformat their hard drives to have a case insensitive file system, they seem to be complaining about a whole bunch of problems, mainly from programs not running as they can&#8217;t find files. You could also argue that it&#8217;s a bad thing as it resulted in programs being written with complete disregard for case sensitivity in the file name.</p>
<p>So it seems like the best way to work around this is to use caution when creating files when working on a Mac. And I guess if you have a build server running on Linux, as long as you have good tests, that will help you verify that your program/scripts will work in a case-insensitive file system.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">40318</post-id>	</item>
		<item>
		<title>JAVA: How to create a generic Array</title>
		<link>https://littlehandytips.com/java-how-to-create-a-generic-array/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Fri, 16 May 2014 04:33:49 +0000</pubDate>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Web Design and Development]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=38132</guid>

					<description><![CDATA[If you try to create a generic array in Java, you will notice that it will throw an error. Here's how to get around that.]]></description>
										<content:encoded><![CDATA[<p>If you try to create a generic array in Java, you will notice that it will throw an error.<br />
<code><br />
Coordinate[] coordinates = aClass.someMethod(Coordinate.class);</code></p>
<p>public &lt;T&gt; T[] someMethod(Class&lt;T&gt; t)<br />
{<code><br />
//Create an array to hold the data<br />
int size=10;<br />
T[] data = new &lt;T&gt;t[size];<br />
return data;</code><br />
}</p>
<p>You will get the following error: &#8220;Cannot create a generic array of T&#8221;.</p>
<p>The way to get around that is to use the <code>Array.newInstance(Class&lt;?&gt; componentType, int... dimensions)</code></p>
<p><code>public &lt;T&gt; T[] someMethod(Class&lt;T&gt; t)<br />
{</code><code><br />
//Create an array to hold the data<br />
int size=10;<br />
T[] data = (T[]) Array.newInstance(t, size);<br />
return data;<br />
}<br />
</code></p>
<p>Hope you find this handy little tip useful!</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">38132</post-id>	</item>
		<item>
		<title>How to Control a DSLR using an iPhone 5S</title>
		<link>https://littlehandytips.com/how-to-control-a-dslr-using-an-iphone-5s/</link>
		
		<dc:creator><![CDATA[guest]]></dc:creator>
		<pubDate>Sun, 10 Nov 2013 10:19:20 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Headline]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=34575</guid>

					<description><![CDATA[With the proliferation of smartphones that support powerful cameras, it’s not surprising to see an increase in the number of iPhoneographers worldwide. If you’re a camera enthusiast looking for a way to use both devices on your next shoot, read on. We’ll provide you with the steps in using your iPhone 5S to control your DSLR with the help of CamRanger.]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_34576" style="width: 310px" class="wp-caption alignnone"><img data-recalc-dims="1" loading="lazy" decoding="async" aria-describedby="caption-attachment-34576" class="size-medium wp-image-34576" alt="" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2013/11/camranger1.jpg?resize=300%2C183&#038;ssl=1" width="300" height="183" srcset="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2013/11/camranger1.jpg?resize=300%2C183&amp;ssl=1 300w, https://i0.wp.com/littlehandytips.com/wp-content/uploads/2013/11/camranger1.jpg?w=620&amp;ssl=1 620w" sizes="(max-width: 300px) 100vw, 300px" /><p id="caption-attachment-34576" class="wp-caption-text">Image Courtesy of petapixel.com</p></div></p>
<p>With the proliferation of smartphones that support powerful cameras, it’s not surprising to see an increase in the number of <a href="http://www.coursesmart.com/the-art-of-iphone-photography-1st-edition/bob-weil-nicki-fitz-gerald/dp/9781937538187">iPhoneographers </a>worldwide. Apple&#8217;s latest offering, the iPhone 5S, may not receive an upgrade in the number of pixels but it has advance camera features. Even with the inclusion of new features, it still lacks the comprehensive controls that only the professional DSLRs can handle. If you’re a camera enthusiast looking for a way to use both devices on your next shoot, read on. We’ll provide you with the steps in using your iPhone 5S to control your DSLR with the help of <a href="http://www.camranger.com/">CamRanger</a>.  This tool allows a DSLR to be augmented with an iPhone. This allows users to control the ISO, shutter, white balance, and aperture on their smartphone.</p>
<p>While <a href="http://www.verizonwireless.com/">Verizon </a>suggests that you should maximize your iPhone 5S’ <a href="http://www.verizoninsider.com/lifestyle/insider-blog/How-To-Take-Better-Smartphone-Photos">native camera settings</a>, the CamRanger allows you to do all that, with a remarkable level of control and functionality. Here’s the steps on how to do that:</p>
<h2>Step 1: Register CamRanger</h2>
<p>Before pairing, you need to register and set-up a CamRanger account. First, launch the CamRanger iOS app on your device. You will be asked to enter the 8-character serial number. This is located both on the back cover and above the battery.</p>
<h2>Step 2: Set-up CamRanger Device</h2>
<p>As you turn on the CamRanger device, wait for all four lights to appear on-screen. This process takes about 30 seconds to fully initialize.</p>
<ul>
<li>Connect your 5S to the CamRanger network.</li>
<li>Enter the SSID. By default, the SSID is coded as CamRanger-###, where the pound signs must be replaced with last characters of the serial number.</li>
<li>Enter the 8-character capitalized password .</li>
</ul>
<h2>Step 3: Pair the Devices</h2>
<p>Before using the CamRanger, you need to pair it first with your iPhone 5S using the specified app. The application is also available for the iPad and the iPod Touch.</p>
<ul>
<li>At the end of the CamRanger, insert the male A end of the USB port.</li>
<li>Connect the other end of the cable to the DSLR.</li>
<li>Turn on the camera and the green light will appear at the edge of the CamRanger device.</li>
</ul>
<h2>Step 4: Familiarize yourself with the app</h2>
<p>Before navigating the camera using your phone, you must familiarize yourself with the app, as it sports some confusing features.</p>
<ul>
<li>Camera Connection: This toggle shows that the device is communicating with the DSLR.</li>
<li>Camera Battery Status: This option displays the remaining juice of the DSLR and your <a title="How To Get The Most Out Of Your iPhone’s Battery" href="https://littlehandytips.com/how-to-get-the-most-out-of-your-iphone%e2%80%99s-battery/">iPhone battery</a>.</li>
<li>Shots Remaining: The number of remaining shots depends on the media card you are using.</li>
</ul>
<p><strong>Where do all photos go?</strong><br />
As you snap a photo, the thumbnails will be automatically downloaded and displayed on the top of the screen. The selected image will be put in a yellow outline, which will be displayed in the Main Image View.</p>
<ul>
<li>Live View Images</li>
</ul>
<p>In the live view grid, all the images are automatically updated as new photo stream in. Take note that the outer edges of the images produced by Canon DSLRS can’t be magnified.</p>
<ul>
<li>Main Image View</li>
</ul>
<p>On your iPhone, images under the main image view can be presented in two ways – by selecting a thumbnail or through the <a href="http://www.camranger.com/features/">Auto-View feature</a>. Remember that the images presented in this grid are not saved by default – they are just displayed. You need to access the Current Image Controls to save the photos in your iPhone 5S.</p>
<p>In just four easy steps, controlling your DSLR remotely becomes easier with your iPhone 5S. For better quality, you can always use a tripod to capture larger portraits and landscapes.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">34575</post-id>	</item>
		<item>
		<title>Infograph on Facebook Page Marketing Part 3</title>
		<link>https://littlehandytips.com/infograph-on-facebook-page-marketing-part-3/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Tue, 25 Jun 2013 12:27:10 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web Design and Development]]></category>
		<category><![CDATA[Facebook]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=34529</guid>

					<description><![CDATA[Have your Facebook posts and updates been getting less attention than it used it? Well Facebook has gone through a number of changes and it has changed the way it determine what posts appear on each individual user’s news feed. This three part article series will explain to you how Facebook determine what posts gets displayed on which individual’s news feed.]]></description>
										<content:encoded><![CDATA[<p>Below is the last part of the Facebook Page Marketing Infograph.</p>
<p>In case you missed out, here are the first two.</p>
<p><a title="Infograph on Facebook Page Marketing Part 1" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-1/">Infograph on Facebook Page Marketing Part 1</a><br />
<a title="Infograph on Facebook Page Marketing Part 2" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-2/">Infograph on Facebook Page Marketing Part 2</a></p>
<p><a href="http://getpostrocket.com/"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone  wp-image-34530" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2013/06/edgerank103.jpg?resize=472%2C4913&#038;ssl=1" alt="edgerank103" width="472" height="4913" /></a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">34529</post-id>	</item>
		<item>
		<title>Infograph on Facebook Page Marketing Part 2</title>
		<link>https://littlehandytips.com/infograph-on-facebook-page-marketing-part-2/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Thu, 13 Jun 2013 12:51:13 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web Design and Development]]></category>
		<category><![CDATA[Facebook]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=34515</guid>

					<description><![CDATA[Have your Facebook posts and updates been getting less attention than it used it? Well Facebook has gone through a number of changes and it has changed the way it determine what posts appear on each individual user’s news feed. This three part article series will explain to you how Facebook determine what posts gets displayed on which individual’s news feed.]]></description>
										<content:encoded><![CDATA[<p>Below is the second part of the three part mini-series on understanding how news feed stories are being filtered on Facebook.</p>
<p>If you have missed the first part, it is available here.</p>
<p><a title="Infograph on Facebook Page Marketing Part 1" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-1/">Infograph on Facebook Page Marketing Part 1.</a></p>
<p>Stay tuned for the last part.</p>
<p><a href="http://getpostrocket.com"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone  wp-image-34516" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2013/06/edgerank102.jpg?resize=518%2C4941&#038;ssl=1" alt="" width="518" height="4941" /></a></p>
<p>Part III is available at: <a title="Infograph on Facebook Page Marketing Part 3" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-3/">Infograph on Facebook Page Marketing Part 3</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">34515</post-id>	</item>
		<item>
		<title>Infograph on Facebook Page Marketing Part 1</title>
		<link>https://littlehandytips.com/infograph-on-facebook-page-marketing-part-1/</link>
		
		<dc:creator><![CDATA[Edwin Kwan]]></dc:creator>
		<pubDate>Mon, 27 May 2013 12:11:03 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Headline]]></category>
		<category><![CDATA[Web Design and Development]]></category>
		<category><![CDATA[Facebook]]></category>
		<guid isPermaLink="false">http://littlehandytips.com/?p=34496</guid>

					<description><![CDATA[Have your Facebook posts and updates been getting less attention than it used it? Well Facebook has gone through a number of changes and it has changed the way it determine what posts appear on each individual user's news feed. This three part article series will explain to you how Facebook determine what posts gets displayed on which individual's news feed.]]></description>
										<content:encoded><![CDATA[<p>Have your Facebook posts and updates been getting less attention than it used it? Well Facebook has gone through a number of changes and it has changed the way it determine what posts appear on each individual user&#8217;s news feed. This three part article series will explain to you how Facebook determine what posts gets displayed on which individual&#8217;s news feed.</p>
<p>It uses an algorithm which takes into account three variables, your relationship with the individual (affinity), how popular the posts are (weight) and how old is the post (time decay). Below is an infograph explaining this.</p>
<p>This is a three part mini-series, part II and part III are available at</p>
<p><a title="Infograph on Facebook Page Marketing Part 2" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-2/">Infograph on Facebook Page Marketing Part 2</a><a title="Infograph on Facebook Page Marketing Part 3" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-3/">Infograph on Facebook Page Marketing Part 3</a></p>
<p><a href="http://getpostrocket.com"><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone  wp-image-34497" alt="edgerank101" src="https://i0.wp.com/littlehandytips.com/wp-content/uploads/2013/05/edgerank101.jpg?resize=512%2C4916&#038;ssl=1" width="512" height="4916" /></a></p>
<p>Part II is available at: <a title="Infograph on Facebook Page Marketing Part 2" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-2/">Infograph on Facebook Page Marketing Part 2</a></p>
<p>Part III is available at: <a title="Infograph on Facebook Page Marketing Part 3" href="https://littlehandytips.com/infograph-on-facebook-page-marketing-part-3/">Infograph on Facebook Page Marketing Part 3</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">34496</post-id>	</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced (Page is feed) 

Served from: littlehandytips.com @ 2026-11-02 18:00:52 by W3 Total Cache
-->