<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Design on blog.iankulin.com</title><link>https://blog.iankulin.com/tags/design/</link><description>Recent content in Design on blog.iankulin.com</description><generator>Hugo</generator><language>en-AU</language><lastBuildDate>Tue, 11 Oct 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.iankulin.com/tags/design/index.xml" rel="self" type="application/rss+xml"/><item><title>Using AI to Generate Icons</title><link>https://blog.iankulin.com/using-ai-to-generate-icons/</link><pubDate>Tue, 11 Oct 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/using-ai-to-generate-icons/</guid><description>&lt;p&gt;Since I have minimal design skills, I went back to &lt;a href="https://www.fiverr.com/"&gt;Fiverr&lt;/a&gt; (the digital gig economy platform) to get some icons done for CodeTrimmer - explaining that I wanted something like a &amp;ldquo;pair of scissors floating over some computer code&amp;rdquo;. At the same time I&amp;rsquo;ve been playing with &lt;a href="https://github.com/divamgupta/diffusionbee-stable-diffusion-ui"&gt;DiffusionBee&lt;/a&gt; - a free Apple silicon version of the &lt;a href="https://stability.ai/blog/stable-diffusion-public-release"&gt;Stable Diffusion&lt;/a&gt; artifical intellligence that generates images from text prompts. The image above was created on an M1 Macbook using DiffusionBee.&lt;/p&gt;
&lt;p&gt;Since generating an image from a text prompt is exactly what I&amp;rsquo;d just done with Fiverr, I thought I&amp;rsquo;d give the AI a chance. Even if the results are not great, they will do for the toy applications I&amp;rsquo;m creating as I&amp;rsquo;m learning.&lt;/p&gt;
&lt;p&gt;The model in Stable Diffusion is trained on images scraped from the internet, so it&amp;rsquo;s strong on pop culture and painting styles. For instance &amp;ldquo;Jack Black as Aquaman&amp;rdquo; is likely to give good results, also &amp;ldquo;Kermit dressed as Yoda in front of a sunset landscape&amp;rdquo;. The license for the outputs of the AI is quite permissive, including for commercial purposes as long as it&amp;rsquo;s not used for evil (that&amp;rsquo;s my paraphrasing, the actual &lt;em&gt;CreativeML Open RAIL-M&lt;/em&gt; license is &lt;a href="https://github.com/CompVis/stable-diffusion/blob/main/LICENSE"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a couple of outputs for the different versions of the &amp;ldquo;scissors floating over code, macOS, icon&amp;rdquo; prompt.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-10-05-at-10.56.41-am.jpg" alt="screen cap of stable diffusion output"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-10-05-at-10.35.25-am.jpg" alt="screen cap of stable diffusion output"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/kermit-dressed-as-yoda-in-front-of-a-sunset-landscape.jpg" alt="Kermit dressed as Yoda - Stable Diffusion"&gt;&lt;/p&gt;
&lt;p&gt;Like any tool, there is a skill to using it well, and with image generation from text prompts, the skill is in creating the prompts, hence a sudden plethora of articles about this all over the internet, and even a &lt;a href="https://promptbase.com/"&gt;market&lt;/a&gt; for them. So perhaps with a bit more skill I&amp;rsquo;d get something closer to what I&amp;rsquo;d like, although if you are prepared to accept something a bit abstract a couple of these would be fine.&lt;/p&gt;
&lt;p&gt;If I had a small amount of design skills these images might serve as a great creative thinking starting point - for example I like the criss-crossy background of one to represent code. I like the drop shadow and flat green of the ipod shuffle one - so these ideas could be combined to make a pair of flat green handled scissors floating over the lined background.&lt;/p&gt;
&lt;p&gt;If you are not allowed to use AI&amp;rsquo;s for evil (I&amp;rsquo;m looking at you &lt;a href="https://en.wikipedia.org/wiki/Skynet_(Terminator)"&gt;Skynet&lt;/a&gt;), it seems like using them as a tool for creating okay images for apps and other digital content is likely to become a practical use for them.&lt;/p&gt;</description></item><item><title>Design Challenge</title><link>https://blog.iankulin.com/design-challenge/</link><pubDate>Wed, 05 Oct 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/design-challenge/</guid><description>&lt;p&gt;So, I&amp;rsquo;ve been working on translating the &lt;a href="https://blog.iankulin.com/design-help/"&gt;UI design&lt;/a&gt; created by the external designer into SwiftUI, and have done all of the easy bits:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-10-03-at-8.19.43-am.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The rounded rectangles for things like the question display/number input are just ZStacks of roundedrects filled, then stroked:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-swift" data-lang="swift"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ZStack &lt;span style="color:#eceff4"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RoundedRectangle&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;cornerRadius&lt;span style="color:#eceff4"&gt;:&lt;/span&gt; &lt;span style="color:#b48ead"&gt;10&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;fill&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;white&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;padding&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;horizontal&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RoundedRectangle&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;cornerRadius&lt;span style="color:#eceff4"&gt;:&lt;/span&gt; &lt;span style="color:#b48ead"&gt;10&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;stroke&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;black&lt;span style="color:#eceff4"&gt;,&lt;/span&gt; lineWidth&lt;span style="color:#eceff4"&gt;:&lt;/span&gt; &lt;span style="color:#b48ead"&gt;2&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;padding&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;horizontal&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; HStack &lt;span style="color:#eceff4"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Text&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;questionText&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;font&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;title&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;fontWeight&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;heavy&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Text&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;calculatorDisplay&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;font&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;title&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;fontWeight&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;heavy&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;.&lt;/span&gt;foregroundColor&lt;span style="color:#eceff4"&gt;(.&lt;/span&gt;blue&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#eceff4"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#eceff4"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#eceff4"&gt;.&lt;/span&gt;frame&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;maxWidth&lt;span style="color:#eceff4"&gt;:&lt;/span&gt; &lt;span style="color:#b48ead"&gt;350&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#eceff4"&gt;.&lt;/span&gt;offset&lt;span style="color:#eceff4"&gt;(&lt;/span&gt;y&lt;span style="color:#eceff4"&gt;:&lt;/span&gt; &lt;span style="color:#b48ead"&gt;15&lt;/span&gt;&lt;span style="color:#eceff4"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Something I have learned in the process is the .offset modifer. This is what&amp;rsquo;s used to move a view from where SwiftUI would have placed it, and is what I&amp;rsquo;ve done to create that overlapped style where the question display/number input is sitting halfway over the bottom of the blue rounded rectangle. This is in the last line of the code above: &lt;code&gt;.offset(y: 15)&lt;/code&gt; This is moving the whole ZStack down by 15. A trick to watch with this is that since you&amp;rsquo;ve messed with SwiftUI&amp;rsquo;s arrangement, it doesn&amp;rsquo;t then shuffle everything else around this - you need to manually deal with making some space below it.&lt;/p&gt;
&lt;p&gt;The jobs still to do on this view is the customisation of the picker, which I think is going to have to be writing a picker from scratch (or finding the source for the library picker and altering it), and the even more custom combined picker/progress indicator.&lt;/p&gt;</description></item><item><title>Color Picker (website)</title><link>https://blog.iankulin.com/color-picker-website/</link><pubDate>Tue, 04 Oct 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/color-picker-website/</guid><description>&lt;p&gt;I&amp;rsquo;ve started work on trying to recreate a &lt;a href="https://blog.iankulin.com/design-help/"&gt;UI provided by a designer&lt;/a&gt;, and in the process needed to identify some colours from a PNG image. I found this great website for this exact purpose.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-09-30-at-4.36.17-am.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The site is ImageColorPicker. To use it, you &amp;ldquo;upload&amp;rdquo; your image (actually the image is not going anywhere - it&amp;rsquo;s all done in-browser). Then click on any area you want to identify the colour of.&lt;/p&gt;
&lt;p&gt;It gives the RGB values out of 255, so I divide each one by 255 to get the CGFloat values that the SwiftUI Color() type will take - for example I used the colour above as &lt;code&gt;Color(red: 0.89, green: 0.96, blue: 1.0)&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Design Help</title><link>https://blog.iankulin.com/design-help/</link><pubDate>Mon, 03 Oct 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/design-help/</guid><description>&lt;p&gt;&lt;a href="https://blog.iankulin.com/images/screen-shot-2022-09-29-at-5.50.43-pm-1.png"&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-09-29-at-5.50.43-pm-1.png" width="253" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think I mentioned when I&amp;rsquo;d completed the &lt;a href="https://blog.iankulin.com/times-tables-day-35-challenge/"&gt;TimesTable app&lt;/a&gt;, that I was not happy with the design. It&amp;rsquo;s ugly, I don&amp;rsquo;t like the way the feedback about a wrong answer is shown at the same time as the next question, the number of questions setting would be rarely changed and looks uncomfortable where it is, I&amp;rsquo;m not sure the purpose of the picker for which times table would be clear, and it&amp;rsquo;s not appealing to children.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve used &lt;a href="https://www.fiverr.com/search/gigs?query=ux%20design&amp;amp;source=sorting_by&amp;amp;ref_ctx_id=ea3c1ec986bfad92b64b621e1b254729&amp;amp;search_in=everywhere&amp;amp;search-autocomplete-original-term=ux%20design&amp;amp;filter=new"&gt;Fiverr&lt;/a&gt; before to have various bits of graphic design done, so I thought I&amp;rsquo;d have a look, and sure enough there is a heap of people offering UI &amp;amp; UX design. Prices vary widely - from about $10 to $2000AUD. The lower end ones are generally newer entrants. There was a suspicious number of incredibly beautiful looking Ukrainian women wanting UX design gigs - I assumed they were fake and picked a couple of others.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the results so far (one guy is still making changes).&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/main-screen-copy.jpg" width="473" alt=""&gt;
&lt;p&gt;This one combined the number input with the question text - that&amp;rsquo;s smart. To change the number of questions you click on the circle at the top, then it shows you which question you are up to, plus the circle edge is indicating your progress. I love all of that, but do not like having &amp;ldquo;Question&amp;rdquo; written there. There&amp;rsquo;s no solution offered for showing you&amp;rsquo;ve got the question correct or wrong, but maybe I could do that in the sum area (with an animated tick, or a crossing out and re-writing). The picker for which table to practice is pretty similar in function. I didn&amp;rsquo;t like the backspace button - but the designer pushed back saying it met the brief of appealing to kids. I love the layered rounded rectangles, and the inset for the question progress. I&amp;rsquo;m not so keen on having &amp;ldquo;Times Tables&amp;rdquo; written at the top, ot the line underneath it. In my version, the title is animated a little to indicated right/wrong answers so perhaps that&amp;rsquo;s why this designer kept it.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/frame-36-copy.png" width="444" alt=""&gt;
&lt;p&gt;This designer&amp;rsquo;s first draft was black and white, so apart from moving the backspace (which I like) it was just a less ugly version of my UI. When I asked about how this was appealing to kids, he hit on these colours, which I think are great. The non-centred number of questions is driving me mental, but the designer is currently working on shrinking that somehow and moving it up to the light bulb in the top right. His idea for that was that it would give the user a hint when they clicked on it. That seemed like a change in functionality rather than a UX improvement to me. It turned out he was also a budding mobile developer, so he&amp;rsquo;d actually built the entire app - I&amp;rsquo;m not sure if in Flutter or Swift - either way, it looks like I could actually build it with my current skills (although perhaps not that picker). Unlike the first design with the inset and overlapping shapes that&amp;rsquo;s going to require some googling if it&amp;rsquo;s possible at all.&lt;/p&gt;
&lt;p&gt;So far, this has been a good experiment. Both designers quickly came up with something much prettier than I had, and although neither of them look perfect to me, now that I&amp;rsquo;ve seen them I have ideas to improve them.&lt;/p&gt;
&lt;p&gt;Now, the interesting challenge is to see how close I can get to implementing them!&lt;/p&gt;</description></item><item><title>Calculator</title><link>https://blog.iankulin.com/calculator/</link><pubDate>Thu, 29 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/calculator/</guid><description>&lt;p&gt;The app I&amp;rsquo;m working on currently (for multiplication tables practice) has a number type keypad and display a bit like a calculator - but for entering the answers. It&amp;rsquo;s been quite fun to think through all the little problems to make it work how you&amp;rsquo;d expect, so I was quite interested to watch an iOS Academy video where Afraz Siddiqui builds a partially finished SwiftUI version of the iOS Calculator app.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=cMde7jhQlZI"&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2022-09-25-at-2.42.34-pm.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is a great example for beginners to see the power of building views quickly in SwiftUI, but the most fun part for me was thinking of all the edge cases that would hadn&amp;rsquo;t been dealt with in his quick build out of the logic (which wasn&amp;rsquo;t the point of the video).&lt;/p&gt;
&lt;p&gt;A couple of times I&amp;rsquo;ve thought about building copies of existing Apple iOS apps. I think part of the appeal is that the design work is done for me, so I&amp;rsquo;m just thinking about under the hood. Long term, I need to know more about design and to be better at it - I bet there&amp;rsquo;s a &lt;a href="https://designcode.io/ui-design"&gt;Meng To&lt;/a&gt; course that would be a good starting point.&lt;/p&gt;</description></item><item><title>App Idea</title><link>https://blog.iankulin.com/app-idea/</link><pubDate>Tue, 05 Jul 2022 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/app-idea/</guid><description>&lt;p&gt;Here&amp;rsquo;s a rough plan for a &amp;ldquo;hello world&amp;rdquo; that&amp;rsquo;s simple enough to be achieved in the short term, but hopefully not too trivial to be accepted into the app store.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/img_2680.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;This is sketched out on GoodNotes 5. I started with the Apple Notes app, but was frustrated by not being able to mix text and drawing. Noteabilty looked great, but the once off purchase for GoodNotes was easier to swallow.&lt;/p&gt;
&lt;p&gt;Ignore the &amp;ldquo;Friday&amp;quot;s in the design above - they should be Sundays. Basically, the user selects a year, and the app says the day for the Easter Sunday that year. If the user needs the date for something, they click on it and it&amp;rsquo;s copied to the clipboard, or perhaps opens up in their calendar.&lt;/p&gt;
&lt;p&gt;I do have an accessibility concern about those scrolling number pickers - what&amp;rsquo;s the sight impaired experience? Maybe Apple&amp;rsquo;s already solved that since they seem like a common UI thing.&lt;/p&gt;</description></item></channel></rss>