The initial outputs predominantly featured white people in privileged settings and authoritative roles. Meanwhile, Black and POC characters were portrayed as impoverished or as those being taught. Additionally, I almost always had to specify the inclusion of female figures. Since my work serves diverse, underprivileged communities, I must represent them, particularly when presenting to these audiences. Educational opportunities must not discriminate, and it's crucial that we acknowledge these biases in AI outputs so we can consciously correct them and provide feedback to better reflect the diversity of the world around us.
Read MoreAI Mastery Journal // JAN 31 - Supercharge Your Presentations with AI ChatGPT & Dall E!
Welcome to the Learn by Doing Series, where designers and business owners can learn a useful tool quickly (less than 15 mins). We will explore industry best in class tools in AI, Productivity, Coding, Prototyping... and how they can help to propel our businesses forward.
This snappy 12 mins demo uses OpenAI ChatGPT and its image generator Dall E to create illustrations for presentations and pitch decks. Great for designer, entrepreneurs, product managers, strategists, and YOU!
This video is part of the Learn by Doing series by Thu Do on TAILORU Education. You can view more and subscribe to the channel here.
AI Mastery Journal // JAN 31 - Bolt.new Video Prototype for Pitching in under 15 Mins!
Welcome to the Learn by Doing Series, where designers and business owners can learn a useful tool quickly (less than 15 mins). We will explore industry best in class tools in AI, Productivity, Coding, Prototyping... and how they can help to propel our businesses forward.
This snappy 15 mins demo uses Bolt and its prompt to code generator to create prototypes for presentations and pitch decks. Great for designer, entrepreneurs, product managers, strategists, and YOU!
This video is part of the Learn by Doing series by Thu Do on TAILORU Education. You can view more and subscribe to the channel here.
AI Mastery Journal // JAN 14 - Bolt.new Prototype
ChatGPT + Zapier Interfaces Integration
Experiment: An Auntie Edna Etsy Description Writer Bot with ChatGPT and Zapier Interfaces
Experiment using the power of ChatGPT generative text and Zapier automation with the wit of Auntie Edna the character to write great Etsy descriptions, therefore saving time and building my brand at the Archaeologists!
Read MoreRock Paper Scissors - Shoot in Javascript!
const rps = (p1, p2) => {
// Check for draw
// Check if p1 wins
// Else p2 wins
if (p1 === p2) {
return "Draw!";
}
else if ((p1 === 'scissors' && p2 === 'paper') || (p1 === 'paper' && p2 === 'rock') || (p1 === 'rock' && p2 === 'scissors'))
{
return "Player 1 won!";
}
else {
return "Player 2 won!";
}
};
Counting sheep outloud in Javascript
Recently, I’ve decided that I need some ******** skillz so now I’ve gone through a process of doing some Kata right before bed time.
This one is for counting sheep. This is for my own development and journal so if you’re going at it own your own, BIG SPOILER ALERT below
When given a function(3), return a string of “1 sheep…2 sheep…3 sheep…”
var countSheep = function (num){
//start with a counter i = 1
// increment i
// stop until i == num
// "interpolation" to insert variables
// return joint array
let smallArr = "";
for (let x = 1; x <= num; x++)
{
smallArr += `${x} sheep...`
}
return smallArr;
};
Iron Mask Prototype - Face tracking filer in SparkAR
Imagine the man in the iron mask is stuck in a dungeon under water. This is what it would look like. Dark thoughts, I know but was the ‘mood’ at the time.
Created using SparkAR.
Assets
Blarney Castle
Black glowing lotus
Learnings
SparkAR is actually very intuitive to use. The Patch Editor needs a lot of UX work to make useful but the currently state is logical enough that after a new trials and errors, it’s possible to create (o stumble) upon some cool effects
Next steps: Create scaled animation and add materials to bubbles
Building a multi layers game using Unity and C#
Building a 2D game where the cube goes around the farm field to collect pieces of gold. It’s COVID time, every one needs to earn a bit of extra income, including once-upon-a-time in-animated objects.
The project goal was to get familiarized with the Unity and Visual Studio Code environments and begin to build a game scene with multiple layers and inter-activities.
The game object [box] should be able to:
Obey the rules of gravity and physics
Move with left, right, top, down by ADWS and by keyboard arrows
Jump with space bar
Stalked by the main camera object
Assets:
PBR Brack Material (free)
ADG_Textures (free)
Prototyping_Pack_Free
Settings: Getting the cube to obey the rules of gravity and physics
Code and assign a rigidbody to the cube (see code below) and makes sure Mesh Collider is enabled for planes and terrain
In progress #1
Grass material
In progress #2
In progress #3
Gif Demo
Code: Getting the cube to move with left, right, top, down by ADWS and by keyboard arrows + Jump with space bar
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cubeBehavior : MonoBehaviour
{
private Light myLight;
private new Rigidbody rigidbody;
// jump variables
public float jumpHeight;
// rotate variable
public Vector3 rotateAmount;
// Start is called before the first frame update
void Start()
{
print( message: "Hi from start method");
myLight = GetComponent<Light>();
rigidbody = GetComponent<Rigidbody>();
}
// declare the light variable
// grab the light variable
// Update is called once per frame
void Update()
{
// print( message: "Hi from update method");
// script to turn light on / off the light variable
if (Input.GetMouseButtonDown (0)) {
print ("The Left mouse button was pressed");
myLight.enabled = !myLight.enabled;
// rigidbody.MovePosition(transform.position + transform.forward);
rigidbody.transform.Rotate(new Vector3(0, -10, 0));
// rotate the cube wieh clicks rigidbody.transform.Rotate(new Vector3(3, 4, 1));
}
if (Input.GetMouseButtonDown (1)) {
print ("The Right mouse button was pressed");
myLight.enabled = !myLight.enabled;
// rigidbody.MovePosition(transform.position + transform.forward);
rigidbody.transform.Rotate(new Vector3(0, 10, 0));
// rotate the cube wieh clicks rigidbody.transform.Rotate(new Vector3(3, 4, 1));
}
// adding keyboard navigation
if (Input.GetKey (KeyCode.W)) {
transform.Translate (0.0f, 0f, 0.01f);
}
if (Input.GetKey (KeyCode.S)) {
transform.Translate (0.0f, 0f, -0.01f);
}
if (Input.GetKey (KeyCode.D)) {
transform.Translate (0.01f, 0f, 0f);
}
if (Input.GetKey (KeyCode.A)) {
transform.Translate (-0.01f, 0f, 0f);
}
// adding arrows navigation
if (Input.GetKey("up")) {
transform.Translate (0.0f, 0f, 0.01f);
}
if (Input.GetKey("down")) {
transform.Translate (0.0f, 0f, -0.01f);
}
if (Input.GetKey("right")) {
transform.Translate (0.01f, 0f, 0f);
}
if (Input.GetKey("left")) {
transform.Translate (-0.01f, 0f, 0f);
}
if (Input.GetKey("space")) {
print ("the space button was pressed");
rigidbody.AddForce(Vector3.up * jumpHeight);
}
}
}
Code: Getting the Main camera to stalk the cube
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cameraController : MonoBehaviour
{ public float turnSpeed = 4.0f;
//create a myCube variable
public Transform myCube;
// create offset camera
public Vector3 cameraOffset;
// Start is called before the first frame update
void Start()
{
cameraOffset = new Vector3(myCube.position.x, myCube.position.y + 4.0f, myCube.position.z + 3.0f);
}
// Update is called once per frame
void Update()
{
}
void LateUpdate()
{
cameraOffset = Quaternion.AngleAxis (Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * cameraOffset;
transform.position = myCube.position + cameraOffset;
transform.LookAt(myCube.position);
}
}
Learnings
I think that Unity and its integration with Visual Studio Code is a good smart relationship. What’s not as smooth is the constant drag and drop and assignment that needs to happen in Unity after the code is in VSC. How come Unity doesn’t allow for code editing in-app? Seems like a mis-opportunity to me.
What’s next:
Switching that cube into a farmer, because yes - I’m biased to the pre-conception that a farmer should be on a farm vs. a cube
Create a reward interactive whereas upon coming into contact, the gold would turn into dust with some magical animation that celebrates the user’s winning moment
Change the keyboard movement to reset based on current cube direction and not original orientation
How I rewire and mod up a Mid Century Modern spring loaded lamp with no prior experience. Insane? I think not!
Ingredients:
1 old lamp: $12
3 sockets: $12
1 cord with plug: $10
Tools:
Wire cutter: $6
Wire stripper: $10
Screw driver
Metal brush
Swiss army knife
Super glue
Time: 4 hrs
(No cost attached, especially not at a consultant’s hourly rates :P)
How did you end up rewiring a lamp, Thu? Isn’t there something else you should be doing instead?
Practice what you preach.
That old wisdom that makes doers do and makers make. I don’t claim to be an exceptional doer nor a gifted maker but my obsession with fine handcrafts is real. Craft is at the center of what I do: our startup, our consulting work, our clients, and how I spend my weekend. I also have a soft spot for anything well designed. Call it a professional hazard.
That’s why when I saw a virtual auction for all things Mid Century Modern (MCM), my head followed my heart and my heart followed my hands as I clicked away and watched item after item slipping away under my tight purse string. As a startup dreamer who recently went through a job transition, I can’t compete with what seemingly are the ‘bottomless’ wallets of Long Islanders. Tough competition where I am when it comes to collecting and preserving a piece of history.
When hope just started to dwindle, an item caught my eyes at the end of the auction— a spring loaded lamp, MCM, with original fiberglass and teak wood. I told you I’m slightly obsessed. No shame needed.
“Have got to be in the 50–60s"
> “must be expensive”
>> “but it’s so beautiful”
>>> “ok, fine. let me see the price. prepare for impact…”
>>>> “8 bucks?!?! That’s unreal. What’s wrong with it?”
That’s exactly my thought process and sure enough, the description read “Trio spring lamp for repairs. Condition as is.”
The wires were badly damage. The fiber glass — which is a staple design feature of the MCM area and a signifier of authentic pieces — was also cracked and dented.
What could be wrong? Maybe I can fix it. Imagine IF!
This is almost always how I start any project. By being attracted to the problem and not always knowing the solution😅.
Not all those who wander are lost?
I have never wired anything. I have no electrical tools and I’m pretty sure the investment up front to buy wire cutter, stripper, plus electrical wires, plugs, bulbs++ is fueled by the excitement to do. Imagine a world where I can wire a lamp!
If you’ve read this far and thought 'What is the point of this?’ Well, the point is I’m prepared to share How I wired a lamp. And the second point is that there is no point, no agenda. I just felt like I did something good today, and positivity is best shared in a time like this.
Sometimes we fall apart just so we can put ourselves back together
#1: Taking all of the pieces apart and trying to memorize where everything was.
#2: Clip away old damaged wires with the Wire Cutter. Hint: leave enough extra wires on everything you cut. I had to threw out a socket because I got excited using the cutter and cut too close (hence there was not enough wire to reattach.)
#3: Using the Wire Stripper, remove the wire from your new wires about 0.5 inches or .75 cm and replace the old damaged wires with the new ones. Hint: Be sure to find out for yourself which one is the Hot wire and which one is the Neutral wire. Don’t throw away the packaging like I did and had to Google for it.
What you’re seeing down here is the switch wires setup— the ability to turn on the switch and only certain lamp would lit up. I had to follow the wiring that was here so be sure to take note when you take things apart.
Usually, the Hot wire is black or have special marking and the Neutral wire is white. This is important for safety and to reduce over heating.
#4: Attaching the wires to the light sockets using a screw driver: the Hot wire to the Brass / Bronze color screw and the Neutral wire to the Silver / White color screw. Screw tight!
#5: Once you feel that the wires are secured onto the socket, attach the socket only the lamp itself. Depending on which lamp you have, the components may be different. For me, they come in brass screw and teak wood. MCM all the way!
#6: This lamp has some badly damaged fiber glass parts due to age and usage. (Also tbh I think the positioning of these original screws are not optimal for weight distribution since two out of the three lamps have damage in this way. Even the MCM design masters have something to improve.) Using super glue, I pieced them back together and Pi the Husky inspected along the way.
#7: To avoid further weight damage to the lamps, I invented a new way to keep the screws from damaging the wood and fiberglass. Cutting a simple clear padding and middle hole to allow for extra protection. Super excited for this trick.
#8: Holding my breath and turning on the lamp.
It is alive!
Now — a spring loaded lamp is cool because it can stand just by using the pressure made by the inner spring. Mr. Frankenstein will have something to have his tea by, and Pi agrees this is a good addition to our home.
'Yellowbook' Digital Area Code Search Ruby
'Yellowbook' Digital Area Code Search Ruby
# Set up the dataset - hash
dial_book = {"newyork" => "212",
"newbrunswick" => "732",
"edison" => "908",
"plainsboro" => "609",
"sanfrancisco" => "301",
"miami" => "305",
"paloalto" => "650",
"evanston" => "847",
"orlando" => "407",
"lancaster" => "717"}# Define the methods: Get city names from the hash
def get_city_names(dial_book)
puts "Which city do you want the area code for?"
dial_book.each {|key, value| puts key}
end
# Define the method: Get area code based on given hash and key
def get_area_code (dial_book)
puts "Enter your selection"
city_selection = gets.chomp
dial_book.each do |key, value|
if city_selection == key
puts "The area code for #{key} is #{value}"
end
end
end
# Loop flow
loop do
puts "Do you want to look up a city's area code? (Y/N)"
initiation_answer = gets.chomp.downcase
break if initiation_answer != "y"
get_city_names(dial_book)
get_area_code (dial_book)
end
Authenticator - Working with Username and Password in Ruby
users = [
{username: "mashrur", password: "password1"},
{username: "jack", password: "password2"},
{username: "arya", password: "password3"},
{username: "jonshow", password: "password4"},
{username: "heisenberg", password: "password5"}
]
def auth_user(username, password, users)
users.each do |user_record|
if user_record[:username] == username && user_record[:password] == password
return user_record
end
end
"Credentials were not correct"
end
puts "Welcome to the authenticator"
25.times {print "-"}
puts "This program will take the input from the user and compare password"
attempts = 1
while attempts < 4
print "Username:"
username = gets.chomp
print "Password:"
password = gets.chomp
authentication = auth_user(username, password, users)
puts authentication
puts "Press n to quit or any other key to continue"
input = gets.chomp.downcase
break if input == "n"
attempts +=1
end
puts "You have exceeded the number of attempts" if attempts == 4
Creating a simple calculator using branching concept in Ruby
Photo by Editors Keys on Unsplash
Preview
def multiply (num_1, num_2)
num_1.to_f * num_2.to_f
end
def divider (num_1, num_2)
num_1.to_f / num_2.to_f
end
def addition (num_1, num_2)
num_1.to_f + num_2.to_f
end
def subtraction (num_1, num_2)
num_1.to_f - num_2.to_f
end
def mod (num_1, num_2)
num_1.to_f % num_2.to_f
end
puts "Simple calculator"
25.times {print "-"}
puts "Enter the first number"
num_1 = gets.chomp
puts "Enter the second number"
num_2 = gets.chomp
puts "What do you want to do?"
puts "Enter 1 for multiply, 2 for division, 3 for addition, 4 for subtraction, 5 for mod"
user_entry = gets.chomp
if user_entry == "1"
puts "You've chosen to multiply"
puts "The multiplication is #{multiply(num_1, num_2)}"
elsif user_entry == "2"
puts "You've chosen to divide"
puts "The division is #{divider(num_1, num_2)}"
elsif user_entry == "3"
puts "You've chosen to addition"
puts "The addition is #{addition(num_1, num_2)}"
elsif user_entry == "4"
puts "You've chosen to subtract"
puts "The substraction is #{subtraction(num_1, num_2)}"
elsif user_entry == "5"
puts "You've chosen to mod"
puts "The mod is #{mod(num_1, num_2)}"
else
puts "Invalid"
end
Manipulate Strings in Ruby
puts "What's your first name?"first_name = gets.chompputs "What's your last name?"last_name = gets.chompfull_name = "#{first_name} #{last_name}"reverse_name = full_name.reverseputs "Your full name is #{full_name}."puts "Your full name is reverse is #{reverse_name}."puts "Your name has #{full_name.length - 1} characters in it."
What’s your first name?
Thu
What’s your last name?
Do
Your full name is Thu Do.
Your full name is reverse is oD uhT.
Your name has 5 characters in it.
An optimistic alliance in the time of change
We think of change as what’s happening around us, but maybe we are the ones who are changing.
Like a Planet which spins while orbiting around its Star, we too go through the Phases and Seasons in life.
The world and how it works does not fit us, and so as makers we have to make things to fill in the gap. But how do we know to make the right things? How do we know if the way we are approaching it is the only way, the right way?
Have you every wonder why there are so many words to describe the same thing, in different languages? Cup. Cốc. La taza. A word: like a circle, is made up with points of view—infinite. The more points that make up the circle, the closer to the 'true circle’. A moving target of truth. The more words and different languages to describe an object, the more accurate and complete the object in focus. Maybe one language isn’t enough to describe a ☕ or 🍵 or 🥤. Maybe we need to have different perspectives to make a more complete picture.
The strength of human creativity is what makes us unique and still further ahead than the machines.
In Design specifically, there has been a rise of production tools to shortcut process such as Principle in taking out the labor in keyframe animation or Figma in file versioning and sharing. When reading the threat of automation, we often exclude Design out of the danger zone — self-convinced that since it is a 'tech' and 'creative' field, the change will come last. This is wishy washy thinking, and that replacement and automation for parts is already here. Even Computer Science, the King of employable, is faced with tools, framework, and no-code movements that getting production closer to 'hit this button’.
Because of this, Designers are moving closer to Business Problem Solving and Ideation vs. Production. To problem solve, we need to enlist the help of others around us and not just ourselves. All we have is the collective human creativity power. I hope it is all we need.
This is a time of pandemic, economic uncertainty, and isolation. But maybe this is also a time when we can dig deeper to think introspectively of the words we would use to describe the world and listen to those around us on how they would describe the same world. Free from the noises and the distractions, maybe this is the time we can get closer to what is true to our values and passion — to know that we even have a passion.
Change is the only constant. Be the Change.
My love letter to you all. Stay strong and stay positive.
Product behaviors in Asia through current culture, economy, and society lens
I have always identified to the Beatles song ‘Nowhere Man’
He’s a real nowhere man
Sitting in his nowhere land
Making all his nowhere plans for nobodyDoesn’t have a point of view
Knows not where he’s going to
Isn’t he a bit like you and me?
I left my hometown Vietnam when I was 15. Although my entire childhood was filled with Eastern tradition and beliefs, my early adulthood is shaped entirely by Western ideology, conviction, and education. Inside me is a wealth of knowledge for someone who needs yet another artifact for the effects of Nature versus Nurture casework.
I have always felt a little bit like a Nowhere Woman, with feet in two different continents. And while this creates a lot of dilemma, hilarious misunderstandings, and a more than usual rate of enlightenment, I have never felt qualified to speak on behalf of one culture — I’m most often not entirely Vietnamese, and nowhere near enough American.
What I do feel enticing to talk about is the emerging pattern and behaviors as I hop between these two continents. After all, I live through these differences myself, and as a UX Designer whose job it is to observe, I have keenly been doing so in my last 15 years trying to blend in <> stand out.
“This year, let’s have a point of view to mark the half way point (15–15).”
Let’s talk about how the 3 ways that culture, the economy, and society affect the way Asia consumes her Product.
Aging vs. Booming
Credit vs. Cash
The Commodity that is Luxury Local Goods
Just to be clear, I’m not talking about the Hofstede’s Cultural Dimensions Theory, in which the world spins around 5 dimensions: power distance, collectivism vs. individualism, femininity vs. masculinity, uncertainty avoidance, and long vs. short-term orientation. While I admire and love this framework (classic!), many of them have been discussed to the core (cue collectivism vs. individualism) and they can lean on the side of theoretical. I’m also not speaking to some of the more obvious cultural examples that have an effect on Design such as written language directions and color significance. No, the examples I am sharing below are much more personal from my own real life experiences.
Fitting format for two age spectrums
From Facebook (text-based) to Instagram (image-based) to now Tik Tok (video-based), the moving image is moving faster everyday to catch up with our ADD tendency. By the time you read this message, we may have to use a device to help us slow down the image rate, to scavenger hunt the hidden message in between. Call it a glimpse into the future.
The aging population of the Western world can be explained by the increasing options that women gain and the rising cost in raising a child. On the other hand, relaxed population control and increased economical power exponentially boost the young population in Vietnam while still keeping a traditionally aging population on the two spectrums of the population.
When I go home to visit my parents, I am amazed at their super active engagement on Facebook. An entire generation mobilized by the ‘thumbs-up’ and ‘views’. Why Facebook and not Instagram or TikTok?
Platform like Facebook allows for long-form, deeper, and more diverse set of content
— hence allow for a more well-established technical behavior without having to learn yet another platform.
On the other hand, the increasingly young population in Vietnam drives product trial and adoption at a staggering rate.
Video content that plays into national pride and local culture attract Millions of views per month
— like this dance video using Vietnamese music, dance choreography, minority tribal traditional clothing, performed in the heart of Hanoi — my city. My sister, who by now should earn a YouTube scavenger expert badge (if there is ever one), convincingly told me that content which inherently retain a tie to Vietnamese culture (a folk melody perhaps) does much better than foreign-borrowed content. Acknowledging that we’re next to an entertainment powerhouse that is South Korea, I’m so proud every time I see the youth of my city owns up to their strength.
DUYÊN ÂM — HOÀNG THÙY LINH Dance Cover & Choreography by C.A.C
Cash is Queen
Being a design consultant, I have to travel a lot. When I travel in the US or in Europe, I make sure to have two types of card: a credit card and a debit card. Sure, I might exchange a few bucks into local currency — but as long as we have those cards, we’ll be ok. The Card Overlords will take care of us.
It’s a different story when I travel in Asia or other parts of the world — Cash is still Queen. My friends do not understand why I would carry thousands on the plane with me from US to Vietnam. ‘Because I need cash to spend over there.’ It seems natural to me.
One time, I stayed in the US for 3 years before going back to Vietnam. The moment I got home, armed with a sense of familiarity carried over from the US, I gingerly set up my Grab app (the equivalent of Uber). I ordered a car and naively sat there until I reached my grandparent house. The moment we hit the gate of my childhood home, it dawned on me that I have no Cash, and what follow was a quick exchange, a few side glances and watchful eyes as the driver watched me, a grown damn woman, walked into my grandpa home to ask if I can borrow 60,000 VND = $3 for my cab ride.
The cash economy in Asia is so strong, that people would choose to keep cash with them and only refill their debit card months at a time.
Source: Grab
The Commodity that is Luxury Local Goods
I remember a time when an acquaintance from Vietnam would ask me to buy a $150 Gucci belt on a trip back. I also remember a time when a co-worker in the US asked me to buy a Louis Vuitton knock-off purse from Vietnam. Sure, luxury brands such as Gucci and LV will always have a space in the luxury landscape.
However, there rises a few wave of local mid-market luxury goods from Vietnamese and Asian designers: Hanoi Silk House is such an example where 1 meter (~3.2 ft) of silk commands $20. To put in perspective, when we prototype the made to measure shirts for TAILORU, the silk materials alone is about 3 meters ($60) per shirt. Worth it, since the silk is organic, made by hand, and is machine washable. This material, once only accessible to the like of Kings and Queens, are now within reach of the commoner.
Hoi An, a small city of 150,000 people, is home to the best handmade shoes, bags, and tailored suits in Vietnam — and arguably (I think!) the top three in Asia. Here, luxury is defined by how fast you want the goods, because quality and price are both guaranteed. Westerners and Asians come from all around the world to enjoy the luxury in life. In a way, places like Hoi An has replaced the like of Florence (for leather goods) in terms of comparable quality and affordability.
In Asia — When labor is cheap and the materials are abundant, what is then the differentiating factor? It used to be that whoever can have access to the latest style from the West will attract the most intra-continental and oversea customers. However, there has been an oversaturated reach of Western culture in Eastern culture, resulting in a fighting, kicking reversed trend to embrace and explore the East.
Within a global landscape where every thing blends, the countries who successfully export culture win.
Designers need to find a way to express their local flavor with mass global appeal — resulting in a GLOCAL trend that ranks more highly to the elite and the middle class than global mass-produced luxury goods. In many ways, the luxury market in Asia is more fierce than anywhere in the world, having the production of the largest luxury brands in the world while growing young numerous hungry luxury local brands.
We’re the same, just slightly different.
I have always believed that both of my homes have something to offer and never before do I feel so much pride in seeing Asia finding her own voice. For brands and startups who want to enter this young and dynamic market, my advice is to pay close attention that not all the rules apply the same way as in the West. Sometimes, we just need to bring a little bit more Cash.
Read more at Medium
The principles of human craftsmanship design
As I was reading Don Norman’s Design of Everyday Things, I came across the quote “Why do we put the requirements of machines above those of people?”
This quote sparks a lot of thoughts in me. I am spending a significant amount of time in the last three years working on TAILORU — a tech platform to help artisans gain more income and do better work through modern technology, as well as a few other startups that focuses specifically on preserving the best of human craftsmanship through tech.
My journey with TAILORU started in my homeland Vietnam when I noticed that there is a disproportionate gap of income between the artisans doing the work and the amount of money the customers oversea pay. Such inequality is abhorrent in itself, seeing the beautiful silk or embroidery which took days to make, and the minuscule payment that comes back. All would be well if the artisans were being content with the amount that they get. But the fact of the matter is that they have many more different options for income. Sure, these factory jobs are not glamorous, but they pay.
The best of human craftsmanship is fading away into a thing of the past.
Immediately, my thoughts at that time is to use Technology to help modernize these thousand years old crafts. “It must be that Human are falling behind and we must catch up to Technology, to the MODERN WORLD.” I have thought.
My experience as a User Experience Designer gets me excited to solve this handmade problem the digital way.
THE CONVERSATIONS THAT UNLOCK THE PRINCIPLES OF DESIGN
Just today I had an interesting conversation with an Engineer, truly in a Design <> Code fury exchange of ideas. She shared “I’m always fascinated with the way artists think. They seem boundless and unbothered by guidelines.” We then ventured into a discussion on the role of Logic in Design vs. Programming process. Reflecting on my experience as a Designer / Instructor and current experience learning Ruby, I shared that:
Design uses Logic as a guide to unlock a more fluid Creativity process, exemplified in the Affinity Mapping method to arrive at Ideation, or the Grid to arrive at UI layouts
Whereas Code uses Logic is a must-have as the core step-by-step process in its entirety, as seen in the pseudocode or simply in if/else statements
Of course this is a simplified view of Design and Programming process, for no one in their sane mind would refute that Coding requires a different kind of abstract creativity that even the Designer envies. My point in the conversation rests in the Logic entry points and usage ratio each of these disciplines.
What is the balance between Logic and Creativity in the modernization human craftsmanship?
I believe Craft is closer to Design, so (I) Creativity supported by Logic
The second conversation I have today was with a student around the topic of Animal <> Human language. “How come that the bird can flap its wings a few times, chirps a few times, and be able to communicate better than Human?” For him, the Animals communicate while Human just talk.
As I ruminate on the question, thoughts come to mind that it’s not that the bird can communicate better, it is that the vocabulary that they are using is more limited, defined and hence is less prone to misunderstandings and errors. Human language, similar to handmade skills, are more quirky, diverse, and open to interpretation. the more complex and varied something is, the more it is likely to attracts errors. (II) Simplicity over Complexity
Lastly, my new conversation with Don sparks the question of Machine <> Human needs.
Recently, we are working on a UX / Dev project called TAILOAR which provide people a way to measure themselves at home, thus allowing tailors to get more customers and these crafters to earn more livings. As we’re prototyping this solution, we were asking the users to match the accuracy of the Machine requirement. “You captured 34.46 cm, which is outside of the range of 35 to 40 cm.” Ambitious, and totally irrelevant based on the following user testing and interviews that we did. This is putting the requirements and needs of the Machine first: Accuracy.
Instead, what we should do is to put the User needs first: help me achieve my goal of measure myself with ease. I already trust that you have the accuracy down if it seems easy to do. (III) Ease over Accuracy
Whether we are working on a Human problem or an inherent Technology problem, the end user / operator will be Human. As such, we need to be able to communicate in ways that bring together:
(I) Creativity supported by Logic
(II) Simplicity over Complexity
(III) Ease over Accuracy
This way, we will be able to preserve the best of Human abilities, what makes us different and (still) a leg up from our Machine counterparts.
As seen on Medium.
This article was originally written on TAILORU. You can see the full snapshot and more content here.
Sorting Algorithms Visualization
Found this visual and audible manifestation of the Sorting Algorithms from Timo Bingmann and it is MESMERIZING.
Prime time
In this exercise, the task is to determine whether a number is prime or not. To do so, first I have got to think about what makes a prime number, here are a few requirements in my mind:
Not negative
Not 0
Not 1
Can divide by 1 and itself
Can not divide by other numbers such as 2, 3, 5, etc
At first, i thought about whether or not i should go about dividing this number to every other prime that i can think of; but then what if i miss one?
Source: ImgFlip
SourceL ImgFlip
Ok, one thing first - I need to check to see if num is a positive > 1. Because no matter what people say, 1 is not a prime number. Sad but true.
To iterate through and harness the power of CPU, I need to go through each of the number from 2 to less than num integer to determine if num is divisible.
The code is then below. If you’re studying, this is the part where I tell you there is a spoiler alert.
[ ]
[ ]
[ ]
def prime?(num)
if num <= 1
return false
else
(2..(num-1)).each do |n|
return false if num % n == 0
n += 1
end
true
end
endThis exercise has been fun to do because I learned a new way to create a range of number for iteration (x..y). Onward!
The Deli Counter is counting down my patience!
Let’s just say I’m two months in the deli challenge with no way out. Let’s just say I see the sausage in front of me, just passing by on that sushi belt but with no way to reach it. Let’s just say it has been two months with no treats. I’m a cat too, I need to be treated like a cat!
OK, enough of this. Let me Google.
As I’m going through the Deli Counter challenge, it’s clear to me there are three main things to accomplish:
If there’s no one in line, say so.
If there’s a line, help people stay sane by telling them where they are in line.
If it’s someone’s turn, help them celebrate that small victory in their day, and swiftly send them on their way out of the line.
Supposedly simple, definitely not so.
One of the challenges that I met was with the mixing definitions of the number of people in a katz_deli, a queue, and the customer’s position in the queue. Quite helpful to make these distinction because then it helps with the strings later on.
SETTING UP katz_deli:
katz_deli = [] def line(katz_deli)
position = 1
queue = []DISPLAYING WHEN THE DELI IS EMPTY:
if katz_deli.length == 0
puts "The line is currently empty."
else
katz_deli.each do |customer|
queue.push("#. #")
position +=1
end
puts "The line is currently: #{queue.join(" ")}"
end
endMANAGING THE QUEUE STATUS:
I’ve found that the exercise (now simply) allows various use of :
.push - adding to the end of an array
.join - concatenate into an array
.shift - remove from the beginning of an array
.empty? - checking if an array is empty
def take_a_number(katz_deli, customer)
katz_deli.push(customer)
puts "Welcome, #. You are number # in line."
end
def now_serving(katz_deli)
if katz_deli.empty?
puts "There is nobody waiting to be served!"
else
puts "Currently serving #."
katz_deli.shift
end
endI’ve really struggle with coming up with a fresh-from-the-start solution, as if I’m Ada Lovelace inventing computer languages for the first time. It’s more clear to me now that in order to learn, I need to tread on the path that my fore friends have gone before me. Googling and learning from past solutions are not a crime, it’s the learning of English vocabulary from simple TV programs before I could mimic a sentence and talk like an American with a broken English accent. This experience has kept me humble and push me to keep going.
Until the next struggle, my friends.
