tag:blogger.com,1999:blog-326364282024-03-17T01:21:56.469-06:00Nyquist Art + LogicA little info for artists and programmers.artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.comBlogger169125tag:blogger.com,1999:blog-32636428.post-61296089970694943802023-12-16T07:53:00.002-07:002023-12-16T07:54:27.980-07:00Swasteroids 2.0<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs1v-G9i_nREgFF4fYqEsDm51Oe2Q0mfNZs1CHMMt9gsS8jY9S-CK_819JudoDRkIKTldu8Ewo9bNm7m2iwLGlSXPive9EHDpulzpVh5Jj1m2iHpfBR8M1tvRv6MC2p9ulpMKNuoasnLJmpsT9TmnDgogVmY_eoNXU8Z2GQf2Mt7U9LGIx2eh4Ug/s1024/SwashteroidsRounded1024x1024.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs1v-G9i_nREgFF4fYqEsDm51Oe2Q0mfNZs1CHMMt9gsS8jY9S-CK_819JudoDRkIKTldu8Ewo9bNm7m2iwLGlSXPive9EHDpulzpVh5Jj1m2iHpfBR8M1tvRv6MC2p9ulpMKNuoasnLJmpsT9TmnDgogVmY_eoNXU8Z2GQf2Mt7U9LGIx2eh4Ug/s320/SwashteroidsRounded1024x1024.png" width="320" /></a></div><br /><span face="system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px; white-space: pre-wrap;"><br /></span><p></p><p><span face="system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px; white-space: pre-wrap;">I’ve released Swashteroids 2.0 to the App Store! A fun retro open-source game built on my open-source ECS framework Swash. </span></p><p><span face="system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px; white-space: pre-wrap;"></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG54bdVLlrR6bfDOxzPqvKHuj0AntfWj9HU7k-gjBKElGt5CVYHw4ihzYIBXilProPpjZmsnDx7SGwiwjgHsPLoMQ_zUqgDFxaY52ymqLXYdHwvLOAt3M82YEFTurBxbFFuLI3ZiieW5NYxlZ9Hwsj_acxBQ0wqV6K1EzUppAe_66yzJQew57nFQ/s2732/Swashteroids2_LinkedIn.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1698" data-original-width="2732" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG54bdVLlrR6bfDOxzPqvKHuj0AntfWj9HU7k-gjBKElGt5CVYHw4ihzYIBXilProPpjZmsnDx7SGwiwjgHsPLoMQ_zUqgDFxaY52ymqLXYdHwvLOAt3M82YEFTurBxbFFuLI3ZiieW5NYxlZ9Hwsj_acxBQ0wqV6K1EzUppAe_66yzJQew57nFQ/s320/Swashteroids2_LinkedIn.jpeg" width="320" /></a></div><p></p><p><span style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px;">All new user-interface and art.</span><span style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px;"> </span><span style="color: #2d3436;"><span style="caret-color: rgb(45, 52, 54); font-size: 17.142857px;">Play with or without buttons! Plasma torpedoes and hyperspace are now both power-ups, and they're moving! Game play mechanics have been tweaked, ie asteroids' base speeds increase per level. The game starts easier as well so you can warm up.</span></span></p><div data-block="true" data-editor="3c4lh" data-offset-key="91g0n-0-0" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-family: system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif; font-size: 17.142857px; white-space: pre-wrap;"><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="91g0n-0-0" style="direction: ltr; position: relative;"><span class="ig9Cs" data-offset-key="91g0n-0-0">https://apps.apple.com/us/app/swashteroids/id6472061502</span></div></div>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-66358194175156625882023-11-20T06:29:00.002-07:002023-11-20T06:29:55.552-07:00<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG1BvxKOMeWO7JEKXu9E6TD1Ay9bke7zMJ2iA1LSjA_hWMUkti3GB1_pEYGKc4owsU3Mw-tEf7aNY4w6tfikOqrCUUbrvXJSrKE2j0Zd6d5-WNq_9_3XPz77MIZ_wiHekwUm-DVkhZTeKCFICetJaRyeMai9BV4wPqvReAFiZvQ2jT72BRXogFHw/s498/swashteroids_blog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="498" data-original-width="496" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG1BvxKOMeWO7JEKXu9E6TD1Ay9bke7zMJ2iA1LSjA_hWMUkti3GB1_pEYGKc4owsU3Mw-tEf7aNY4w6tfikOqrCUUbrvXJSrKE2j0Zd6d5-WNq_9_3XPz77MIZ_wiHekwUm-DVkhZTeKCFICetJaRyeMai9BV4wPqvReAFiZvQ2jT72BRXogFHw/s320/swashteroids_blog.png" width="319" /></a></div><br /><p><br /></p><p> <span style="caret-color: rgb(45, 52, 54); color: #2d3436; font-family: system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif; font-size: 17.142857px; white-space: pre-wrap;">I’ve released Swashteroids to the App Store! A fun retro open-source game built on my open-source ECS framework Swash.</span></p><div data-block="true" data-editor="3c4lh" data-offset-key="91g0n-0-0" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-family: system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif; font-size: 17.142857px; white-space: pre-wrap;"><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="91g0n-0-0" style="direction: ltr; position: relative;"><span class="ig9Cs" data-offset-key="91g0n-0-0">https://apps.apple.com/us/app/swashteroids/id6472061502</span></div></div>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-51063533574971261292023-11-17T06:26:00.000-07:002023-11-20T06:30:12.049-07:00<p><span face="system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px; white-space: pre-wrap;"><br /></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjClMw5i8re3AfezVsPqkEsLpgTNjklvFNUpirNFZilyB9veCC3vFmYootnAK27fhcYjyYk7vJ08C4pbh6sXFA4nSJWBnWuxlCxQDvcUiS6v5S0w7LMFEZnO960NZ_UeAJdefeDfMqFC5vsEIvcFlfiqyRY-2PodC15uibdKdCaJVpgUMfRvPlc1A/s496/nearmint.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="496" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjClMw5i8re3AfezVsPqkEsLpgTNjklvFNUpirNFZilyB9veCC3vFmYootnAK27fhcYjyYk7vJ08C4pbh6sXFA4nSJWBnWuxlCxQDvcUiS6v5S0w7LMFEZnO960NZ_UeAJdefeDfMqFC5vsEIvcFlfiqyRY-2PodC15uibdKdCaJVpgUMfRvPlc1A/s320/nearmint.png" width="320" /></a></div><br /><div style="text-align: center;"><br /></div><p style="text-align: left;"><span face="system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-size: 17.142857px; white-space: pre-wrap;">Version 2.0 of my <a href="https://apps.apple.com/us/app/near-mint/id1328733510?platform=iphone">Near Mint</a> iOS app is now live! This release has many new features and other improvements. This is an app that helps you organize your comic book collection. It is fast and native since 2017! 🤠</span></p><div data-block="true" data-editor="6e83i" data-offset-key="5l2st-0-0" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-family: system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif; font-size: 17.142857px; white-space: pre-wrap;"><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="5l2st-0-0" style="direction: ltr; position: relative;"><span class="ig9Cs" data-offset-key="5l2st-0-0">#comicbooks</span><span data-offset-key="5l2st-1-0"> </span><span class="ig9Cs" data-offset-key="5l2st-2-0">#ios</span></div></div><div data-block="true" data-editor="6e83i" data-offset-key="ckjcb-0-0" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-family: system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif; font-size: 17.142857px; white-space: pre-wrap;"><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="ckjcb-0-0" style="direction: ltr; position: relative;"><span data-offset-key="ckjcb-0-0"><br data-text="true" /></span></div></div><div data-block="true" data-editor="6e83i" data-offset-key="88k6r-0-0" style="caret-color: rgb(45, 52, 54); color: #2d3436; font-family: system-ui, -apple-system, BlinkMacSystemFont, Roboto, Ubuntu, "Helvetica Neue", sans-serif; font-size: 17.142857px; white-space: pre-wrap;"><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="88k6r-0-0" style="direction: ltr; position: relative;"><br /></div><div class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr" data-offset-key="88k6r-0-0" style="direction: ltr; position: relative;"><span class="ig9Cs" data-offset-key="88k6r-0-0"><br /></span></div></div>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-41987494505028595582022-04-14T19:40:00.001-06:002022-04-14T19:41:24.231-06:00Swift Arrays to Dictionaries with indices<p>The extension below is to facilitate the creation of dictionaries from arrays. In this case, the dictionary has the array element as the key and the index of that element as the value. </p><p>Since I was only working with arrays that held unique values I added a guard statement to enforce that. If you remove it, then your the last duplicated element would have the index as its value.</p><p><span style="background-color: white; color: #890009; font-family: Menlo; font-size: 13px;">extension</span><span style="background-color: white; font-family: Menlo; font-size: 13px;"> </span><span style="background-color: white; color: #377375; font-family: Menlo; font-size: 13px;">Array</span><span style="background-color: white; font-family: Menlo; font-size: 13px;"> </span><span style="background-color: white; color: #890009; font-family: Menlo; font-size: 13px;">where</span><span style="background-color: white; font-family: Menlo; font-size: 13px;"> Element: </span><span style="background-color: white; color: #9d2807; font-family: Menlo; font-size: 13px;">Hashable</span><span style="background-color: white; font-family: Menlo; font-size: 13px;"> {</span></p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> <span style="color: #890009;">func</span> <span style="color: #0e5365;">toDictionary</span>() -> [Element: <span style="color: #9d2807;">Int</span>] {</p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> <span style="color: #890009;">guard</span> <span style="color: #9d2807;">Set</span>(<span style="color: #890009;">self</span>).<span style="color: #a56311;">count</span> == <span style="color: #890009;">self</span>.<span style="color: #a56311;">count</span> <span style="color: #890009;">else</span> {</p>
<p style="background-color: white; color: #66620d; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"><span style="color: black;"> </span><span style="color: #0e5365;">fatalError</span><span style="color: black;">(</span>"<span style="color: black;">\(</span><span style="color: #890009;">#function</span><span style="color: black;">)</span> requires arrays with unique values!"<span style="color: black;">)</span></p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> }</p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> <span style="color: #890009;">return</span> <span style="color: #890009;">self</span></p><p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"><span> <span> <span> </span></span></span>.<span style="color: #0e5365;">enumerated</span>()</p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> .<span style="color: #0e5365;">reduce</span>(<span style="color: #0e5365;">into</span>: [Element: <span style="color: #9d2807;">Int</span>]()) { dict, tup <span style="color: #890009;">in</span></p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> dict[tup.<span style="color: #7b2b5e;">1</span>] = tup.<span style="color: #7b2b5e;">0</span></p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> }</p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"> }</p>
<p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;">} </p><p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;"><br /></p><p style="background-color: white; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; margin: 0px;">["hello", "world"].toDictionary() // ["world": 1, "hello": 0]</p><div><br /></div>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-18053823921102306812019-06-01T14:03:00.001-06:002019-06-01T14:15:02.488-06:00100 Days of Swift<div style="color: #262626; font-family: "Helvetica Neue"; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;">
<div style="font-stretch: normal; line-height: normal;">
<span style="font-kerning: none;">3. For a tougher challenge, take the image generation code out of </span><span style="color: #b80e3d; font-family: "menlo"; font-stretch: normal; line-height: normal;">cellForRowAt</span><span style="font-kerning: none;">: generate all images when the app first launches, and use those smaller versions instead. For bonus points, combine the </span><span style="color: #b80e3d; font-family: "menlo"; font-stretch: normal; line-height: normal;">getDocumentsDirectory()</span><span style="font-kerning: none;"> method I introduced in project 10 so that you save the resulting cache to make sure it never happens again.</span></div>
<div style="font-stretch: normal; line-height: normal; min-height: 14px;">
<span style="font-kerning: none;"></span><br /></div>
<div style="font-stretch: normal; line-height: normal;">
<span style="font-kerning: none;">As a reminder, here’s the code for </span><span style="color: #b80e3d; font-family: "menlo"; font-stretch: normal; line-height: normal;">getDocumentsDirectory()</span><span style="font-kerning: none;">:</span></div>
<div style="background-color: black; color: #e0d561; font-family: monaco; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #58d1eb; font-kerning: none;">func</span><span style="color: #f6f6ef; font-kerning: none;"> </span><span style="font-kerning: none;">getDocumentsDirectory</span><span style="color: #f6f6ef; font-kerning: none;">() -> </span><span style="color: #f4005f; font-kerning: none;">URL</span><span style="color: #f6f6ef; font-kerning: none;"> {</span></div>
<div style="background-color: black; color: #f6f6ef; font-family: monaco; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="font-kerning: none;"> </span><span style="color: #58d1eb; font-kerning: none;">let</span><span style="font-kerning: none;"> paths = </span><span style="color: #98e024; font-kerning: none;">FileManager</span><span style="font-kerning: none;">.</span><span style="color: #58d1eb; font-kerning: none;">default</span><span style="font-kerning: none;">.</span><span style="color: #e0d561; font-kerning: none;">urls</span><span style="font-kerning: none;">(</span><span style="color: #58d1eb; font-kerning: none;">for</span><span style="font-kerning: none;">: .documentDirectory, </span><span style="color: #58d1eb; font-kerning: none;">in</span><span style="font-kerning: none;">: .userDomainMask)</span></div>
<div style="background-color: black; color: #f6f6ef; font-family: monaco; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="font-kerning: none;"> </span><span style="color: #58d1eb; font-kerning: none;">return</span><span style="font-kerning: none;"> paths[</span><span style="color: #9d65ff; font-kerning: none;">0</span><span style="font-kerning: none;">]</span><br />
}</div>
<span style="color: #262626; font-family: "helvetica neue"; font-size: 12px;"></span></div>
<br />
The above is from <a href="https://www.hackingwithswift.com/read/30/7/wrap-up">Day 98</a> of Paul Hudson's excellent course: <a href="http://hackingwithswift.com/100/">100 Days of Swift</a>. It is Challenge #3 and there is even a "bonus" challenge inside the challenge! In approaching the solution--before coding--I wrote down my thoughts and then gathered snippets of code that I thought would help. My notes are below. I thought it might be helpful for others to share them without giving away the solution.<br />
<div style="color: #262626; font-family: "Helvetica Neue"; font-size: 12px; font-stretch: normal; line-height: normal;">
<br /></div>
First, I jotted down the four main things I was concerned with:<br />
<ol>
<li style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal; margin: 0px;">Read big images from bundle, see <span style="color: blue;">project 1</span>.</li>
<li style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal; margin: 0px;">Render a image into a rect using CoreGraphics like in <span style="color: blue;">project 30.</span> </li>
<li style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal; margin: 0px;">Read the thumbnails in like <span style="caret-color: rgb(0, 0, 255); color: blue;">project 10</span>. </li>
<li style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal; margin: 0px;">If a thumbnail does not exist then create it. Also like in <span style="color: blue;">project 10</span>.</li>
</ol>
<div>
Next, I gathered the corresponding snippets of the code:</div>
<div>
<br /></div>
<div style="color: blue; font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="color: black;"><i>From </i><i>project 1</i><i>:</i></span></div>
<div style="color: #39414a; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
DispatchQueue<span style="color: #0b2037;">.</span>global<span style="color: #0b2037;">(qos: .</span>userInitiated<span style="color: #0b2037;">).</span>async<span style="color: #0b2037;"> { [</span><span style="color: #aa0d91;">weak</span><span style="color: #0b2037;"> </span><span style="color: #aa0d91;">self</span><span style="color: #0b2037;">] </span><span style="color: #aa0d91;">in</span></div>
<div style="color: #999999; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #0b2037;"> </span><span style="color: #aa0d91;">let</span><span style="color: #0b2037;"> fm = </span><span style="color: #39414a;">FileManager</span><span style="color: #0b2037;">.</span><span style="color: #39414a;">default</span></div>
<div style="color: #999999; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #0b2037;"> </span><span style="color: #aa0d91;">let</span><span style="color: #0b2037;"> path = </span><span style="color: #39414a;">Bundle</span><span style="color: #0b2037;">.</span><span style="color: #39414a;">main</span><span style="color: #0b2037;">.</span><span style="color: #39414a;">resourcePath</span><span style="color: #0b2037;">!</span></div>
<div style="color: #999999; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #0b2037;"> </span><span style="color: #aa0d91;">let</span><span style="color: #0b2037;"> items = </span><span style="color: #aa0d91;">try</span><span style="color: #0b2037;">! fm.</span><span style="color: #39414a;">contentsOfDirectory</span><span style="color: #0b2037;">(atPath: path)</span></div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal; min-height: 11px;">
</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> pictureNames = items</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
.<span style="color: #39414a;">filter</span> { $0.<span style="color: #39414a;">hasPrefix</span>(<span style="color: #118040;">"nssl"</span>) }</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
.<span style="color: #39414a;">sorted</span> { $0 < $1 }</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal; min-height: 11px;">
</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">self</span>?.<span style="color: #3f6e74;"><b>storms</b></span> = pictureNames.<span style="color: #39414a;">map</span> {</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #1280b2;"><b>Storm</b></span>(name: $0, imageName: $0) }</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal; min-height: 11px;">
</div>
<div style="color: #39414a; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #0b2037;"> </span>DispatchQueue<span style="color: #0b2037;">.</span>main<span style="color: #0b2037;">.</span>async<span style="color: #0b2037;"> { [</span><span style="color: #aa0d91;">weak</span><span style="color: #0b2037;"> </span><span style="color: #aa0d91;">self</span><span style="color: #0b2037;">] </span><span style="color: #aa0d91;">in</span></div>
<div style="color: #39414a; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #0b2037;"> </span><span style="color: #aa0d91;">self</span><span style="color: #0b2037;">?.</span>collectionView<span style="color: #0b2037;">.</span>reloadData<span style="color: #0b2037;">()</span></div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
}</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
}</div>
<div style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 16px;">
<br /></div>
<div style="color: blue; font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal;">
<span style="color: black;"><i>From </i><i>project 30</i><i>:</i></span></div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> path = <span style="color: #39414a;">Bundle</span>.<span style="color: #39414a;">main</span>.<span style="color: #39414a;">path</span>(forResource: imageRootName, ofType: <span style="color: #aa0d91;">nil</span>)!</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> original = <span style="color: #39414a;">UIImage</span>(contentsOfFile: path)!</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal; min-height: 11px;">
<br /></div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> renderRect = <span style="color: #39414a;">CGRect</span>(origin: .<span style="color: #39414a;">zero</span>, size: <span style="color: #39414a;">CGSize</span>(width: <span style="color: #392a9c;">90</span>, height: <span style="color: #392a9c;">90</span>))</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> renderer = <span style="color: #39414a;">UIGraphicsImageRenderer</span>(size: renderRect.<span style="color: #39414a;">size</span>)</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal; min-height: 11px;">
</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> rounded = renderer.<span style="color: #39414a;">image</span> { ctx <span style="color: #aa0d91;">in</span></div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
ctx.<span style="color: #39414a;">cgContext</span>.<span style="color: #39414a;">addEllipse</span>(in: renderRect)</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
ctx.<span style="color: #39414a;">cgContext</span>.<span style="color: #39414a;">clip</span>()</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal; min-height: 11px;">
</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
original.<span style="color: #39414a;">draw</span>(in: renderRect)</div>
<div style="color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
}</div>
<div style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 16px;">
<br /></div>
<div style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal;">
<i>From </i><i>project 10</i><i>:</i></div>
<div style="font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal;">
<i><br /></i></div>
<div style="font-family: Palatino; font-size: 13px; font-stretch: normal; line-height: normal; text-indent: 18px;">
<i><span class="Apple-tab-span" style="white-space: pre;"> </span>Write:</i></div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> imageName = <span style="color: #39414a;">UUID</span>().<span style="color: #39414a;">uuidString</span></div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> imagePath = <span style="color: #800002;"><b>getDocumentsDirectory</b></span>().<span style="color: #39414a;">appendingPathComponent</span>(imageName)</div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">if</span> <span style="color: #aa0d91;">let</span> jpegData = image.<span style="color: #39414a;">jpegData</span>(compressionQuality: <span style="color: #392a9c;">0.8</span>) {</div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">try</span>? jpegData.<span style="color: #39414a;">write</span>(to: imagePath)</div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
}</div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<br /></div>
<div style="font-family: Palatino; font-size: 13px; font-stretch: normal; line-height: normal; text-indent: 18px;">
<i><span class="Apple-tab-span" style="white-space: pre;"> </span>Read:</i></div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
<span style="color: #aa0d91;">let</span> path = <span style="color: #800002;"><b>getDocumentsDirectory</b></span>().<span style="color: #39414a;">appendingPathComponent</span>(person.<span style="color: #3f6e74;"><b>imageName</b></span>)</div>
<div style="color: blue; font-family: Palatino; font-size: 12px; font-stretch: normal; line-height: normal;">
</div>
<div style="background-color: white; color: #0b2037; font-family: Menlo; font-size: 10px; font-stretch: normal; line-height: normal;">
cell.<span style="color: #3f6e74;"><b>imageView</b></span>.<span style="color: #39414a;">image</span> = <span style="color: #39414a;">UIImage</span>(contentsOfFile: path.<span style="color: #39414a;">path</span>)</div>
artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com1tag:blogger.com,1999:blog-32636428.post-88308544500176425422014-12-31T14:39:00.002-07:002014-12-31T14:39:52.386-07:00The Ash Entity Framework<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.ashframework.org/"><img border="0" src="http://www.ashframework.org/images/logo.png" /></a></div>
<div style="font-family: Helvetica; font-size: 12px;">
<br /></div>
<div style="font-family: Helvetica; font-size: 12px;">
I’ve been doing object-oriented programming for over 20 years. I’ve worked with many languages in that time. One can improve their ability to abstract the more they work with different languages. A more challenging exercise is to change your programming paradigm. </div>
<div style="font-family: Helvetica; font-size: 12px; min-height: 14px;">
<br /></div>
<div style="font-family: Helvetica; font-size: 12px;">
Lately, the paradigm I’ve been experimenting with is <a href="http://en.wikipedia.org/wiki/Entity_component_system">entity component systems</a> (ECS). ECS are touted for game programming. A common scenario in games is for things in the game to changes powers and abilities. To solve this issue in the past, I’ve relied heavily on composition over inheritance. In ECS, that idea is taken to the extreme.</div>
<div style="font-family: Helvetica; font-size: 12px; min-height: 14px;">
<br /></div>
<div style="font-family: Helvetica; font-size: 12px;">
The objects (entities) are made up of components (that are mostly value objects), the logic resides in the systems that operate on the entities. After reading an excellent post by Richard Lord, I decided to give his ECS micro framework a try, it’s call <a href="http://www.ashframework.org/">Ash</a>. </div>
<div style="font-family: Helvetica; font-size: 12px; min-height: 14px;">
<b></b><br /></div>
<div style="font-family: Helvetica; font-size: 12px;">
<b>The Ash Entity Framework</b></div>
<div style="font-family: Helvetica; font-size: 12px; min-height: 14px;">
<br /></div>
<div style="font-family: Helvetica; font-size: 12px;">
The Ash Entity Framework uses entity, components, systems, and nodes. Ash facilities the work of mapping the systems to the components they work on. Let me define these:</div>
<ul>
<li style="font-family: Helvetica; font-size: 12px; margin: 0px;"><b>Components</b> are (mostly) simple value objects. They contain little or no behavior.</li>
<li style="font-family: Helvetica; font-size: 12px; margin: 0px;"><b>Entities</b> hold components. <i>Entities only care about components. </i>By changing what components an entity has affects which systems affect the entity. This changing of entity composition is important as it impacts node creation as well as which systems execute on it. Entity names must be unique! </li>
<li style="font-family: Helvetica; font-size: 12px; margin: 0px;"><b>Systems</b> operate on lists of nodes. <i>Systems only care about nodes. </i>Systems contain the logic. </li>
<li style="font-family: Helvetica; font-size: 12px; margin: 0px;"><b>Nodes</b> are combinations of one or more components. Node classes are defined and at runtime, an entity that has components matching the definition gets a node created by the Ash engine. Ash also removes and destroys nodes when they are no longer applicable to the entity composition. Node lists use signals--not events--for adding and removing.</li>
</ul>
<div style="font-family: Helvetica; font-size: 12px;">
The <b>Engine</b> is part of the framework. It knows about entities and systems, both of which you add to the engine. It in turn watches entities and--as they change--adds and removes the components to node collections used by systems. The engine creates the node collections and passes them to the appropriate systems.</div>
<div style="font-family: Helvetica; font-size: 12px;">
<br /></div>
<div>
<br /></div>
artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-54439798851229175442014-02-12T11:44:00.003-07:002014-02-12T11:44:42.358-07:00ABGC On SaleMy course <a href="http://bit.ly/1aVq8EP">A Blender Game Character</a> is on sale at CartoonSmart thru Saturday, $25 (usually $39) #b3d<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5cGBcBv6pd2UPXsGVrHZcEofmTpXD_pJjwYPs86xWnOujwYQZPXyTWhOqITZABMd5nBrB7_v7ySHS597ELMmbAY4BbmbiCtN2U9zZ9i7aU0gfZQiCvNSxcONuYOTV_4nQBdRy1g/s1600/ABGC_box.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5cGBcBv6pd2UPXsGVrHZcEofmTpXD_pJjwYPs86xWnOujwYQZPXyTWhOqITZABMd5nBrB7_v7ySHS597ELMmbAY4BbmbiCtN2U9zZ9i7aU0gfZQiCvNSxcONuYOTV_4nQBdRy1g/s1600/ABGC_box.png" height="320" width="275" /></a></div>
<br />artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-58469460837527418922013-12-29T12:12:00.000-07:002013-12-29T12:12:22.470-07:00Bits of Blender #67 - Text BoxesDid you know you could use text boxes/frames in Blender? John and Richard show you how in this Bit.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/5PLSu31KzJc?rel=0" width="560"></iframe>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-59438108230817173612013-12-22T11:44:00.001-07:002013-12-22T11:44:41.125-07:00Bits of Blender #66 - Object FontsDo you know how to create your own fonts using Blender objects? This Bit shows you how.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/ZmOHNUr7FBc" width="560"></iframe>
<br />artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-12220231466650296162013-12-16T12:48:00.003-07:002013-12-16T12:49:08.493-07:00Bits of Blender #65 - Typography<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/yHyYXmROdhw" width="560"></iframe><br />
<br />
It's the Bits of Blender Christmas edition! In it we show you how to do some typographic tricks using nodes. artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-86444024911151865832013-12-08T13:14:00.001-07:002014-06-01T09:28:18.948-06:00How to play Astra Itinera<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/3k4w_ayAV18" width="420"></iframe>
</div>
<br />
I'm long overdue with this <a href="https://www.youtube.com/watch?v=3k4w_ayAV18">tutorial</a> on how to play my iPad game <a href="http://astraitinera.com/">Astra Itinera</a>. If you've questions you can post here, contact <a href="mailto:blender@nyquist.net">me</a> directly, or post in the <a href="https://www.facebook.com/AstraItinera">facebook</a> group.artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-8243484906094154082013-12-08T10:47:00.002-07:002013-12-08T10:47:12.185-07:00Bits of Blender #64 - Scene Linking Revisited<iframe width="560" height="315" src="//www.youtube.com/embed/FsPlK8nm21c" frameborder="0" allowfullscreen></iframe>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-79984413019481426792013-12-08T10:46:00.000-07:002013-12-08T10:46:04.281-07:00Bits of Blender #63 - Lists in 2.69<iframe width="560" height="315" src="//www.youtube.com/embed/dAvq46XYXAA?list=UUNHGoIRhV3Cl9ALSRIOcqdQ" frameborder="0" allowfullscreen></iframe>artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-32596600512401538682013-11-26T08:21:00.000-07:002013-11-26T08:21:11.902-07:00Procreate Cut/Copy/Paste Problem ResolvedI was excited when Procreate added a cut/copy/paste feature to their iPad app. It's one of my favorite apps and it is my favorite art app. To my dismay, the feature worked intermittently.<br />
<br />
Each update I would try it again to no avail. I have a 3rd Gen non-jailbroken 32GB iOS 6 & 7 iPad and with every version of Procreate that had the cut/copy/paste feature through version 2.0 this feature would not work consistently. I read all the posts on it trying the suggestions.<br />
<br />
This morning I figured it out. <b>Settings > General > Accessibility > Zoom</b> was enabled. Disabling it, now Procreate's cut/copy/paste works consistently.<br />
<br />
So it seems like the OS is absorbing the 3-finger drag gesture even though that functionality does not come into play until after the 3-finger double-tap zooms in. As I mentioned, when zoom is enabled, the cut/copy/paste only occasionally works. I don't use this feature in Procreate but I do use it sometimes with other apps.<br />
<br />
I don't want to clutter up Procreate's interface since it appears most folks don't have zoom enabled, but if there were a button that would invoke the cut/copy/paste dialog, that would be great. Maybe one that appeared when there was a selection above the + (plus sign) :-)<br />
<br />artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-80286615296909565862013-11-19T10:12:00.000-07:002013-12-08T10:43:22.507-07:00My first (written) Blender tutorial<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.raywenderlich.com/52804/beginning-blender-tutorial-animating-rendering-mushroom"><img border="0" height="27" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZeI7xAOSOhkQiBh-IiE60T9LTKlElqoVN5zzIwzy_ATIp62PIOns52a4ArrZl2HZJxafl__8gl-hV8z9kh4zwy_u7I4VJROFTwQ8PGysKBp4V2x06a9ycWEkPvIo_uIaklD-3g/s320/hop.png" width="320" /></a></div>
<a href="http://www.raywenderlich.com/52804/beginning-blender-tutorial-animating-rendering-mushroom"><br /></a>
<div class="separator" style="clear: both; text-align: center;">
<span style="margin-left: 1em; margin-right: 1em;"><a href="http://www.raywenderlich.com/52804/beginning-blender-tutorial-animating-rendering-mushroom"><img alt="http://www.raywenderlich.com/52804/beginning-blender-tutorial-animating-rendering-mushroom" border="0" height="61" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9aXLmYTzhEVyOp-rqVJH0kqrFRyG9FDT79mLaqwifLxEiZ1gPDzwo-r5iT07pu1kzz8FVDpbwBGipsgQuB8Ped2_MeoRl4Gi5-oh-wqdPSPjTkyDbS6rJfkfRQnXgsQILiO9h0A/s320/nod.png" width="320" /></a></span></div>
<br />
I've created 8 full-length Blender video tutorials, my most recent being <a href="http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194" style="font-style: italic;">A Blender Game Character</a>, and 62 episodes of <i><a href="http://bitsofblender.com/">Bits of Blender</a></i>. Now my first written (not video) Blender <a href="http://www.raywenderlich.com/52804/beginning-blender-tutorial-animating-rendering-mushroom">tutorial</a> is on RayWenderlich.com. The site features iOS and game tutorials.<br />
<div>
<br /></div>
<div>
My <a href="http://www.raywenderlich.com/52804/beginning-blender-tutorial-animating-rendering-mushroom">article</a> builds upon the introductory article by Vicki Wenderlich where she shows you the basics of modeling in Blender. In mine, I show how to rig, skin, animate, and render the mushroom. These articles are oriented at newcomers to Blender and take you step-by-step through the process. <a href="https://twitter.com/search?q=%23b3d">#b3d</a> </div>
artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-17858805649187132002013-11-18T13:24:00.001-07:002013-11-18T13:28:15.100-07:00Bits of Blender #62 - Stenciling<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/aE4eSgRoCz8" width="560"></iframe>
<br />
<br />
In this Bit, Richard and I show you how to use the stencil feature of Blender.artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-56264990770662231822013-11-10T15:17:00.001-07:002013-11-10T15:17:54.998-07:00Bits of Blender #61 - Extruding Along a Path with Tapering<iframe width="560" height="315" src="//www.youtube.com/embed/0rgVK9puTm4" frameborder="0" allowfullscreen></iframe>
<br />
<br />
Richard and I have a new Bit out. We show how to use tapering when extruding along a path and our technique of keeping the taper object in line with the path that has the extrusion.<br />
<br />
This is our first Bit in a long time. In this one you can tell we're having fun, especially towards the end. I hope you enjoy it!<br />
<br />artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-70274686511804980912013-11-10T14:42:00.001-07:002013-11-10T14:42:41.286-07:008 years of BlenderNovember 7th marked the 8th anniversary of downloading Blender with the following email to a friend of mine.<br />
<blockquote class="tr_bq">
<i>This is interesting:<br /><a href="http://www.blender.org/">http://www.blender.org/</a></i></blockquote>
<div>
Technically, I became aware of Blender a couple years earlier than that when I came across the first edition of the book <i><a href="http://www.amazon.com/Official-Blender-Gamekit-Interactive-Artists/dp/1593270046/ref=sr_1_3?s=books&ie=UTF8&qid=1384119470&sr=1-3&keywords=the+blender+gamekit">The Blender GameKit</a></i> at my local Barnes & Noble. This email was in response to finding it free to download (which I did). You might say the last 8 years has been a Ton of fun! </div>
artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-44948916473847842112013-11-05T19:09:00.000-07:002013-11-05T19:17:27.914-07:00A Blender Game Character<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/rqPf4wgrpuc?rel=0" width="560"></iframe><br />
<span style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 17px;"><br /></span>
<br />
On Wednesday, November 6th 2013 CartoonSmart.com is releasing a new course <i><b><a href="http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194">A Blender Game Character</a></b></i> by John R. Nyquist, BFCT (me!). The goal of this 7.5 hour course is to show you how to create an animated character and then render out sprites. In this course you'll model, texture, rig, animate, and render out images in an iterative fashion. The course is downloadable in Quicktime format and you'll also get a coupon to stream it via Udemy.com.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<i><b><a href="http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194">A Blender Game Character</a></b></i> is taught in real-time, no accelerated video (so a 10 minute lecture really is 10 minutes of work). You'll see my workflow as we develop this character from scratch and how Blender supports iterating over the creation of a character, even when in different phases of its development.<br />
<br />
This course is intended for folks with some Blender experience (not complete newcomers). If you are comfortable with my previous course <i><a href="https://www.udemy.com/a-blender-quickstart/">A Blender Quickstart</a></i> (free to stream from Udemy), you will be okay (but maybe challenged). As a bonus, it includes the downloadable files for the 1.5 hour <i><a href="https://www.udemy.com/a-blender-quickstart/">A Blender Quickstart</a></i>.<br />
<div>
<br /></div>
<div>
For the month of November you can get <i><b><a href="http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194">A Blender Game Character </a></b></i>for $20 (which is a 50% discount) at <a href="http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194&utm_campaign=email&utm_source=sendgrid.com&utm_medium=email">http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194</a><br />
<br />
Enjoy! :-)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.payloadz.com/go/jump?id=2398009&aff_id=3465194"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTmuJ3S8FygdBPri210RlDISE1lv6J_-8HmGvJ9qcf06yzgF2wuM4KTTZzPUPdaiFgFcpUP-WOZET5WoLp5LZg4RspZ7yrBN0jPQkejmuYroiH2xV7F9Y-trfUH_k3d2NSEZwiag/s320/ABGC_box.png" width="275" /></a></div>
</div>
<div>
<br /></div>
artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-46302607308330591362013-11-04T18:06:00.003-07:002013-11-04T18:06:47.676-07:00Over 1,000 Students<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.udemy.com/a-blender-quickstart/"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibh_6j5Sjm_AoLpIGtuLj6HEpSAXgkGyke6GX5Cs-F3EjCVzAS_TzopoWSZAFOJbKlcQxZAKc4Vera95BDFmFcSmw2fTeFPbCQutPtyRwY1THlrO7uq2eV80XmKMnUrCpoDjF8hg/s320/A-Blender-Quickstart.png" width="320" /></a><span id="goog_1530668493"></span><span id="goog_1530668494"></span><a href="http://www.blogger.com/"></a></div>
<br />
This weekend <i><a href="https://www.udemy.com/a-blender-quickstart/">A Blender Quickstart</a></i> passed the 1,000 student mark! <i>A Blender Quickstart</i> is my free course on Udemy that gives you a quick tour (about 1.5 hours) of some of Blender's major features by building an animated pencil (with bite marks).<br />
<br />
So far we've had one live session as well, it was great to meet some students in person (via Google Hangout). Many thanks to all the students who've taken this course!artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-61266874893873311502013-10-30T23:00:00.001-06:002013-10-30T23:03:01.550-06:00Weather won't stop Blenderheads<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzCa8x5ZdFq05Jwa_klDk1yazO-MtD61SUZf8DbUoq7nySMOmCptl7FJ3Qn7UGethlPUlZ-fwzzCCTUFYW7xbdJrpGtGIjibgXjFxhxvRwPbhyvOQmF5hkUbxwUWP-2Mhvs4l6Q/s1600/CBUG-October.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzCa8x5ZdFq05Jwa_klDk1yazO-MtD61SUZf8DbUoq7nySMOmCptl7FJ3Qn7UGethlPUlZ-fwzzCCTUFYW7xbdJrpGtGIjibgXjFxhxvRwPbhyvOQmF5hkUbxwUWP-2Mhvs4l6Q/s320/CBUG-October.jpg" width="320" /></a></div>
<br />
Seven Blenderheads braved some cold, wet Colorado weather to come out for some hot coffee at the CBUG meeting at the Fika Coffeehouse. Clockwise from the left: Ryan, Ben, Ben, Chris, Richard, and Harrison (with me behind the camera), thanks guys for coming out!artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com1tag:blogger.com,1999:blog-32636428.post-73375248872175207382013-10-30T08:21:00.001-06:002013-11-04T17:55:41.538-07:00Adobe Create Now TourTwo weeks ago I attended Adobe's <a href="http://www.adobeeventsonline.com/createevent/">Create Now Tour</a> event (use <a href="http://createattendee.adobeevents.com/#ihi/Home">this</a> if you're on a mobile device). I took notes and thought I'd share some of the things that caught my interest.<br />
<br />
<b>Behance/Prosite </b>looked like it might be a decent option for a portfolio site. I've been ignoring it for some time, partly because the name "Behance" kinda bugged me.<br />
<br />
<b>Photoshop</b><br />
The <i>Image Size</i> command has been updated. It does an amazing job of upsampling. The new algorithm is called Preserve Details. The default is Automatic, but who knows what that means?<br />
<br />
The <i>Patch</i> tool was another that struck me as immediately very useful. Worth checking out.<br />
<br />
<i>Vector shapes</i> can now have changes made to them (like rounding corners) live.<br />
<br />
<i>Camera Raw</i> is now a plug-in. The should increase its usage, I imagine. You can have multiple radial filters, non-destructive healing, and lens correction.<br />
<br />
You can copy the CSS from a type layer or folder. You can also generate Edge Reflow projects.<br />
<br />
And I almost (did) forgot the <i>Generator</i> plugin. I used it later the same day after hearing about it. Perfect for generating images of multiple sizes (like when you're doing iOS icon work).<br />
<br />
<b>Illustrator</b><br />
You can now paint with raster images. The guys on stage were pretty excited about this, but it seemed more like a feature for demoing. Reminded me of Painter's "image hose".<br />
<br />
The most exciting enhancement was the <i>Touch Type</i> tool. You can alter individual letters without breaking the text apart. Rotate, scale, etc. How many decades have I waited for that? (I started with Illustrator 1 in 1987).<br />
<br />
<b>InDesign</b><br />
The guys said something interesting about the dark interfaces with the Adobe apps, that dark means the app has been completely re-written. InDesign now has a dark UI. It is 64-bit, does background processing.<br />
<br />
I liked the new smarter search for fonts and the ability to favorite fonts.<br />
<br />
There is a feature for generating <i>QR codes</i>.<br />
<br />
You can also <i>output as an app</i> for iPad. That looked interesting in the demo, but I wonder what the real world experience is. App development is not trivial and performance is key.<br />
<br />
<b>Edge Reflow</b><br />
This is a tool for creating CSS. They showed creating a page from an open PSD. It also support CSS regions. An interesting menu was for "shiney" new features to use that are on the bleeding edge.<br />
<br />
<b>Muse</b><br />
Muse is for creating small HTML sites without coding. It looked pretty decent. They played up the similarities to InDesign. <i>TypeKit</i> is built-in with access to 400+ fonts. It does not support responsive design, but it does make it easy to create different sized versions of a site.<br />
<br />
<b>Edge Animate</b><br />
This tool has been percolating for a couple years now. It becomes more Flash-like all the time. <i>Now it has symbols. </i>You can bring the .OAM package into InDesign.<br />
<br />
<b>Kuler</b><br />
They have a Kuler <i>iPhone app</i>, which reminds me I should download it. It was very cool (no pun intended) when they took a picture and got a color set from it. It also has <i>Idea integration</i> (Idea is a very nice vector iPad drawing app).<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-12521228485678182522013-10-12T10:14:00.000-06:002013-10-12T10:20:36.594-06:00<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.udemy.com/a-blender-quickstart/"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT1xjuIcdUpguojF4SRcOqmNMW2j6ZBbbS1YSQpPtdOVg4FWblQIc-_HGNX_u4JFB3_uIJxlrQjaGyjed8qetHPX9xvCI2uQNZTcoJ-TPzFrFcqEVWSSO0N4LsnHNIsdaedrv6CA/s320/A-Blender-Quickstart.png" width="320" /></a><span id="goog_666248111"></span><span id="goog_666248112"></span><a href="http://www.blogger.com/"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<i><a href="https://www.udemy.com/a-blender-quickstart/">A Blender Quickstart</a> </i>is my first Udemy course (my 8th Blender course). It is available for free. This course is a quick tour of many Blender features, it is in real-time (only about 1.5 hours). It is not long on explanation, but it will give you an introduction to:<br />
<br />
<ul>
<li>Modeling</li>
<li>UV unwrapping</li>
<li>Texturing</li>
<li>Rigging</li>
<li>Animating</li>
<li>Rendering</li>
</ul>
<br />
All done in the form of a project. From scratch you'll build and animate a pencil. I hope you enjoy it.artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-90968143565282629772013-10-11T09:22:00.002-06:002014-06-01T08:54:22.627-06:00CBUG Meetup<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0QLOwruj2rVizOSZM4OsncqLb8fjwz656b5h5R-xsu03kr9kB823spEOMwL2iFCnuyOH5_usCd5TuPpJjp_ZN5_vOahc-wQ-kr4z9zILwFJosS1TfWDyfF2psUFKg826JZ1WfFQ/s1600/CBUG.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0QLOwruj2rVizOSZM4OsncqLb8fjwz656b5h5R-xsu03kr9kB823spEOMwL2iFCnuyOH5_usCd5TuPpJjp_ZN5_vOahc-wQ-kr4z9zILwFJosS1TfWDyfF2psUFKg826JZ1WfFQ/s1600/CBUG.png" /></a></div>
<br />
Join us:<br />
<br />
Colorado Blender User Group meetup.<br />
Oct 30th, 6:30-8pm.<br />
Fika Coffeehouse in Parker. <br />
<br />
https://www.facebook.com/events/590684804312404/?ref_dashboard_filter=upcoming&source=1artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0tag:blogger.com,1999:blog-32636428.post-13156751052912315272012-12-05T15:05:00.003-07:002021-03-27T08:15:42.971-06:00Four Rules for Recruiters<br />
I have four rules for recruiters, usually (but not always) I delete a recruiter email immediately if they violate any one.<br />
<br />
<ol>
<li>Address me by name (many recruiters do not bother such a simple courtesy).</li>
<li>Talk to <i>me</i> about the position (many recruiters say in their first contact "do you or someone you know..")</li>
<li>The position offered is actually inline with my current skill-set.</li>
<li>Recruiter is respectful in each contact.</li>
</ol>
<br />
<div>
Simple, aren't they? You'd be surprised at how few can meet this criteria. </div>
artandlogichttp://www.blogger.com/profile/13407011276341204827noreply@blogger.com0