In this blog post I would like to discuss a prevalent issue that foreigners
experience in a country we often speak fondly of. Yes, this country is
Switzerland, and today I will explore how requirements to speak Swiss German
dialects can create structural barriers in the job market for both foreign and
domestic candidates.
If you have any experience applying for a job in Switzerland, you will
often get asked if you speak Swiss German. By Swiss German, employers
typically mean you are expected to speak a dialect of the German language.
In my field, I have encountered this frequently. Usually in software-related
positions, a level of internationally understood English is sufficient. We
often study Computer Science terms heavily in English. Even in German and
Swiss universities, introductory and advanced topics in Computer Science are
commonly taught in English, unlike courses in Mathematics or Business
Administration, which are typically in German. This is likely because Swiss
universities attract many international Master's students from diverse fields.
These students often speak only English as a foreign language alongside their
native tongues. For instance, a Biology student pursuing an M.Sc. in
Bioinformatics might need to take an Introduction to Python course. Such
courses are taught in English to accommodate a broad range of students.
This approach also benefits Swiss students by allowing them to learn Computer
Science in English, the field's dominant language, while improving their
English skills. Undergraduate students in Zurich are often predominantly of
Swiss or German origin. During my bachelor's studies at the University of
Zurich, I was the only foreign student, which reflects the C1 German
proficiency requirement for admission.
This use of English fosters collaboration between international and Swiss
students. In my experience, this led me to believe that German might not be
required in Swiss workplaces, especially in Computer Science. However, in
customer-facing roles like banking or retail, German proficiency is
understandable. Since I already speak German as a third language, I expected
this to give me an advantage. However, many positions require Swiss German
dialects, where standard German is insufficient.
Assumptions and Scope
Before exploring the barriers created by Swiss German requirements, I want
to clarify my assumptions. I fully agree that newcomers to a country should
learn the local language and cultural norms. However, in professional
settings, standard language proficiency at B1-B2 level is typically
sufficient, achievable with reasonable effort (about 10 hours/week for 12
months, costing around 6000 CHF, or 11% of basic annual income). This seems
feasible for standard German.
However, even with standard German proficiency, job applications are
frequently rejected due to Swiss German dialect requirements. This raises
questions about why dialect proficiency is demanded beyond standard German.
In the following sections, I'll analyze the linguistic context and practical
challenges this creates.
Linguistic Reality: Dialects vs. Standard German
To understand the barriers created by Swiss German requirements, it's
important to clarify the linguistic landscape. Swiss German refers to the
Alemannic dialects spoken in German-speaking Switzerland, not a single
standardized language.
Fig. 1: Dialect variations for
"apple core" in German-speaking Switzerland. Map 50 from the Kleiner
Sprachatlas der deutschen Schweiz (KSDS). Data based on the Sprachatlas der
deutschen Schweiz (SDS); Graphics by M. Renn.
Image Source
.
Key Linguistic Distinctions
To avoid confusion, let's clarify the key varieties of German in Switzerland:
Swiss German dialects: Spoken regional varieties, varying significantly across cantons and even towns. These are not standardized and can be mutually unintelligible in some cases.
Swiss Standard German: A written/formal variety used in education, media, and official contexts. It's similar to High German but with Swiss-specific features.
High German: The standardized German spoken in Germany and Austria.
Job requirements typically refer to spoken dialects, not the standard written form.
Mutual Intelligibility and Social Barriers
While some dialects are mutually intelligible, speaking a dialect from
another region can lead to ridicule or social friction. In my experience,
this creates barriers to unhindered communication, as normal speech can
trigger humor or correction.
Are the dialects mutually intelligable?
Some people would claim that they are. I would also somewhat agree, but not
fully. I think it is misleading to just say that without stating the
following: Speaking a dialect foreign to that region of Switzerland is
subject to ridicule. The mutual intelligibility would only be acceptable,
if, for example, people did not make fun of you in Bern for speaking with
Zurich dialect, or speaking Basel's dialect in Zurich. If saying something
completely normal triggers people's humour, that would set a barrier before
unhindered communication.
This social dynamic creates challenges for foreigners. Learning standard
German is already demanding, but mastering a specific regional dialect adds
another layer of complexity. In some regions, speaking a non-local dialect
can lead to social penalties, making the requirement disproportionately
difficult for outsiders.
Sources and Context
Based on my 8 years living in Switzerland and discussions with others:
Swissinfo.ch
article
on how it can even be hard for Swiss people to learn "Swiss German".
Another
Swissinfo.ch article
on interesting reasons of Swiss people's experiences with Swiss German and
High German.
Dialect stigma exists in many multilingual regions, but in Switzerland, it
can create additional barriers for job seekers.
Thus, a "Swiss German" requirement often implies mastering multiple dialects
to work across regions, significantly expanding the learning burden.
Education and Dialect Acquisition
Swiss children naturally acquire local dialects through neighborhood
interactions, often learning them better than their parents' varieties
†
.
However, at age 7, they begin formal education in Swiss Standard German,
which is essential for following textbooks and communicating across regions.
Swiss German dialects are spoken proudly in both rural and urban areas
(Wikipedia,
Swiss government).
This positive attitude toward dialects contrasts with situations in other
countries where they are stigmatized. As someone with a background in
Computational Linguistics, I support dialect preservation efforts, especially
since Central Alemannic is classified as "potentially vulnerable" by UNESCO
(UNESCO Atlas).
Practical Barriers to Learning Dialects
Beyond the linguistic complexity, several practical factors make dialect
learning particularly challenging for foreigners:
Lack of Standardization
Unlike standard German, Swiss German dialects have no codified grammar,
spelling, or formal teaching materials. Learning relies on immersion and
imitation, which is really difficult. There are some online materials created by individuals but you can't really take Swiss German classes like you take German classes.
Regional Fragmentation
You think you've learnt Swiss German after you catch up to the local language in Zurich? Good luck with that. With dozens of dialects, proficiency in one doesn't guarantee understanding in another region.
When employers require Swiss German, which dialect do they mean?
Social Stigma and Correction
Speaking an incorrect dialect can lead to ridicule or social exclusion,
creating a high-stakes learning environment. This is not only the case for a foreigner trying to master the dialect, but even domestically Swiss people will be exposed to this treatment when they are trying to communicate with the locals from a different region.
These barriers can make dialect requirements disproportionately burdensome
compared to standard language proficiency.
Counterarguments: Legitimate Reasons for Dialect Requirements
While dialect requirements can create barriers, employers may have valid
reasons for preferring them. Here are some common counterarguments:
Workplace Cohesion and Communication Efficiency
In team-oriented environments, shared dialect use can facilitate smoother
internal communication and build rapport among colleagues.
Customer Service and Local Market Understanding
For customer-facing roles, dialect proficiency may be necessary to
understand local nuances and provide authentic service.
Cultural Integration and Team Dynamics
Requiring dialects could be seen as ensuring candidates can fully integrate
into the local work culture and social dynamics.
Hiring Risk Reduction
Dialect skills might serve as a proxy for long-term commitment or local
ties, reducing perceived hiring risks.
These arguments have merit in certain contexts, but they don't fully
address why dialects are required in non-customer-facing technical roles
where standard German or English would suffice.
When Dialect Requirements Become Problematic
In many professional contexts, such as education and federal institutions,
Swiss Standard German is used. This suggests that standard German is
sufficient for formal communication. However, dialect requirements persist
in in-person job interviews, even in technical roles with limited customer
interaction.
When dialect requirements extend to roles where standard German would be
adequate, it can create unnecessary barriers. This may function as indirect
discrimination, particularly when alternatives like standard German aren't
accepted.
In summary, the combination of dialect diversity, social stigma, and lack of
standardization creates structural barriers that can disproportionately
affect foreigners. While local hiring preferences are understandable,
dialect requirements may go beyond legitimate business needs in some cases.
Practical Strategies for Job Seekers
While Switzerland sets its own employment standards, job seekers can take
practical steps to navigate these requirements:
Target International Companies
Focus on companies with global operations or international teams, where
English or standard German may be prioritized over local dialects.
Emphasize Communication Skills
Highlight passive dialect understanding or willingness to learn, alongside
strong standard German proficiency. Showing ability to understand Swiss German even at a basic level can go a long way.
Consider English-First Environments
Look for tech, research, or multinational firms where English is the primary
working language.
Network and Build Local Connections
Engage with local communities to gain informal dialect exposure and
demonstrate integration efforts. This might be by far the hardest, as Swiss people are a hard nut to crack when it comes to socializing (see the peach-coconut example.)
These strategies can help job seekers position themselves effectively in
the Swiss market while acknowledging local norms.
Conclusion
Swiss German dialect requirements can create structural barriers in the job
market, particularly for foreigners. While there are legitimate reasons for
such requirements in some contexts, they may exceed business needs in others.
Understanding these dynamics can help job seekers navigate the market more
effectively. Promoting greater use of Swiss Standard German could reduce
these barriers over time.
If you'd like to share this analysis, please copy the URL and share it on
social media. If you have JavaScript enabled, you can also click the copy
link icons next to section titles for direct links.
In
my previous blog post, I explained how to set up a website, completely free
and
secure. I don't use any
hosting service, any cloud provider, or let alone any blogging engine that
runs online. No, I have showed you how to set up a personal blog with
self-hosting, on your own server, using your own capacity. This way we could
deliver a refreshing feeling both to ourselves and to the internet. We need
more humble genuinity. We don't need bloatware that distances us from each
other and from our own selves.
I am against all kinds of bloatware. With that spirit, I showed you the
bare bones of setting up a website. It literally included nothing
but an HTML file.
It is however time for us to go to the next step and use a
templating engine.
In this blog post, I will explain you what a templating engine is, and why
you need one. We will use
Jekyll, as it is free and open source
and does exactly what we need, and nothing more (well it can do more, but we
will use basic features).
Jekyll
Jekyll is a static templating engine that helps us build a modular website.
Modular website means that, you can build common, repeating parts of a page
and use those parts in every page. This way, in case you wanted to make a
small change, say, in the footer of your page, which used in every page, you
won't have to make that small change in every single page that uses the
footer. You can just edit the "footer" template file and it will be
applied to all the pages that use it!
I use very simple HTML code in this blog. You probably already observed
that. That being said, there are actually a lot of cool HTML, CSS and JS
tricks as well as some Ruby magic sprinkled on top that makes my blog pretty
features rich. It has things like automatic glossary generation, footnotes,
automatic tag feed generation, tag cloud, style controls and more. I also
have small backend scripts which handle comments sections at the bottom.
Make sure to drop a comment!
However in this blog post I want to talk about basics of Jekyll, and leave
all else to future blog posts.
Why do we need
Jekyll?
Let's see real examples now.
Now take a look at the top of this blog post, as well as the very bottom of
it. You will see that on the top, I have things like:
Fig. 1: Top of the page.
A link to the 'archive'
A link to the footer of this page
author info
published on info
and so on.
Now look at the footer, and you will see, some common links that I want
people to visit, such as:
Fig. 2: Footer of my page.
again, a link to the archive
My art portfolio
etc
Now, especially while I was building this blog, I had to heavily edit this
footer section. At that time, I already had multiple pages, like about page,
license page, home page, some blog posts and so on. This meant that if I
wanted to change something in the footer, I had to make that change in every
single page.
This is a very cumbersome effort and a templating engine like Jekyll solves
exactly that.
Jekyll uses a templating language called Liquid[g][g], developed by Shopify. Liquid files look like normal HTML files except for the expressions that are wrapped in squigly braces. These files can have .liquid or .html extension. Actually Linux does not care what extension you give to files, or the rules you define. But let's keep things "conventional".
Fig. 3: The code of my footer.
Jekyll 'Includes' w?
Jekyll ‘includes’ are the small pieces of HTML code that you can stitch together in a layout, which allows you to ‘include’ that piece of code in any page that uses that layout. See official documentation of Jekyll includes.
As you can see in Fig. 3, this my
footer.htmlinclude [g][g]
file that defines every footer in my blog website.
As easy as that, you can simply edit this footer.html and see
the change in every page that uses it.
Jekyll Layout
Fig. 4: My post layout.
Jekyll Layout w?
Jekyll Layout is where you define the template of a page. Here you bring includes and/or just raw HTML code together to define templates, such as ‘main page’ or ‘post’. See official documentation of Jekyll layouts.
In Jekyll, you can also define layouts [g][g] of common pages. For instance in this blog, I only have two layouts, one for main pages like the archive (beginning of the blog), about page, license page etc, and one for the blog posts.
In Fig. 4, you can see my layout for the blog posts. It is just a normal HTML file with bunch of includes stitched together. There is also a special Jekyll thing called \{\{ content }} in it (the most nested thing, line 16), which will be replaced by the content of the file that uses this "post" layout as its layout. To refer it I had to put some random characters like backward slashes ('\') like \{\{ content }}, because without them, Jekyll takes it literally and replaces with some content.
That's kind of it.
This really all you need to know to get started with Jekyll. Head over to Jekyll's official documentation to learn how to install it and the details on its usage.
How does
Jekyll do it?
Since we are very anti-bloatware, it matters to talk about how Jekyll does it. Because we really don't want to introduce unneccessary crap to our simple, beautiful, basic HTML pages.
Jekyll has a build step. Once we set everything up like includes and layouts, we "build" the site, and Jekyll creates a folder named _site. In that folder the final files that make up the generated website live. In that folder, there will be nothing, not even a single line of extra code that you yourselves did not put in your includes and the layouts. There will be no extra dependencies, package files, weird API calls to external services that are compromised.
Later you can take those files in the _site and place them in your server, and that will be it. Just you and your pure HTML files. Maybe some CSS you sprinkled on top? And some maybe Javascript just to feel like a web developer? Well I did. Hehe. But seriously, make sure you build accessible websites. Make sure your core value is accessible even without javascript, unless if it is unavoidably necessary.
Where are all the freelancers? In this day and age, the freelancers are fragmented across many websites and platforms. Let's take a look at ecosystemin 2025
Show full content
Intro
In this day and age, despite the ubiquity of digital platforms, finding reliable freelancers can still be challenging.
The first idea that will pop in your mind is to go visit a number of web pages. You will hope that you will reach good talent there. These can be:
A lot of these websites were created with one goal in mind:
To connect clients with freelancers. And to solve this problem once and for all.
Enter the compulsory XKCD comic:
Fig. 1: Xkcd: standards.
A lot of these websites make it more difficult to find freelancer than not. Because while they create an ecosystem to make project owners meet the
freelancers, they also make it more expensive. I am not blaming them. These platforms have to make money somehow as well.
If you go to one of the more high end websites to find your freelancer, you should embrace yourself to pay up flat fees up to 120$ per hour. At this point,
I’d personally suggest hiring a professional consulting firm, as they might provide a more professional service at a lower price.
I cannot explain how much willpower it takes for me to avoid developing yet another platform that aims to solve this problem once and for all. But
why would I bother in the first place? Because I am working as a freelancer as well, and I know how hard it is to find clients, develop a network and
land projects.
This is the reason why I have written this blog post. If you have found this blog post online, this testifies for my SEO skills!
My Offer For You
So here is my offer for you. I have more than 10 years of experience on a number of fields. If you need a;
Web Developer
Software Engineer
Data Scientists
Visualization Engineer
3D Simulation Engineer
3D Generalist
Game Developer
Ghostwriter
Copywriter
Content Creator
Video Editor
Team Manager
... or a mix of the above
Then you have found your guy. I have a flat rate of 20$/hour. Let's discuss your project.
Freelancer Request
Name*
Email*
Describe your project*
Send request
document.getElementById('freelancerForm').addEventListener('submit', async (e) => {
e.preventDefault();
const form = e.target;
const status = document.getElementById('statusMsg');
const data = Object.fromEntries(new FormData(form).entries());
status.textContent = 'Sending...';
status.style.opacity = '1';
status.style.transition = 'opacity 0.5s ease';
status.style.color = 'inherit';
const btn = form.querySelector('button[type="submit"]');
btn.disabled = true;
try {
const res = await fetch('/submit-freelancer-request', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
if (res.ok) {
status.textContent = '✔ Message successfully sent.';
status.style.color = 'green';
form.reset();
} else {
throw new Error('Server error');
}
} catch (err) {
status.textContent = '✖ There was an error with submission, please try again later.';
status.style.color = 'red';
}
finally {
btn.disabled = false;
}
// Fade out after 3s
setTimeout(() => {
status.style.opacity = '0';
}, 3000);
// Clear text after fade
setTimeout(() => {
status.textContent = '';
status.style.opacity = '1';
}, 4000);
});
Footnotes
Throughout 2024 LinkedIn has intermittently restricted my account and provided to clear explanation.
Each time I was able unlock my account after going through a security check, identity verification and a period of waiting, usually up to 2 weeks.
This happened to me one last time around the beginning of 2025. At that point I have really given up using LinkedIn altogether due to this inconvenience. I
even used to have a link to my LinkedIn on my blog, which I removed because it was pointing to a dead page essentially.
These days I am trying to get more serious in my blogging, video and digital goods creation journey. Quite a few people and non-people (LLMs) have
suggested audiance growth through LinkedIn. I told them what I will be telling you in this blog post: LinkedIn hates me and I am unable solve this or even
understand why.
Perhaps not being on LinkedIn is a blessing considering that the platform has become more like Facebook with a touch of business-talk. Also the last thing
I remember about being on LinkedIn was bot accounts making me irresistible offers about AWS cost cutting servies. It was funny because they did not ask for
money, they only asked for AWS credentials.
Anyhow. I believe anyone who wishes to reach an audiance as large as possible cannot be choosers. So I am begging you LinkedIn: What have I done to piss
you off so much?
What Happened So Far
So after many months of LinkedIn closing my account, I was finally convinced to attempt to unlock my account yet again.
This time it was different. I've sent a security verification, I think even received a confirmation e-mail that it was submitted. However I waited quite a
long time and received no answer. I could not send another verification either, because it was showing me that it was already sent (Fig. 1).
So I have decided to submit an appeal. If you've gone through this process before, you might be familiar with the fact that it is really, really difficult
to find LinkedIn's appeal contact form. A lot of "contact LinkedIn" links point you to pages where you have to be a logged in user. So LinkedIn is basically
like, "aww, is your account restricted? Well just log in and reach out to us. Oh you can't login? Ahaha too bad, sucks to be you."
For all those lost time, for what it is worth, I will proudly paste the link to LinkedIn appeal form here (as of July 2025): Contact LinkedIn support .
So basically I've sent that form. And lo and behold, I did receive an answer (Fig. 2):
Fig. 2: Linkedin update on my appeal. 'After reviewing your account again, we found it doesn't comply with our Professional Community Policies or LinkedIn User Agreement. As a result, access to your account will remain restricted. '
This is really weird that my account does not comply with their rules. What could I have possibly done? I am as curious as you are.
I am aware that these faceless companies are really all so automated, that I should be happy even to have received this answer. But I think I deserve a more clear answer.
Fig. 3: LinkedIn says 'We're sorry. There was an error creating your case Please try again.'
So I reach them out again. I fill out the form and try to send it. And surprise surprise (Fig. 3):
We're sorry. There was an error creating your case Please try again.
Same result in other browsers. I guess I will just go fuck myself.
Or I can create another account under a different e-mail, only for that to be abused by LinkedIn for mysterious reasons too. I bet if I make another account, this time they will say:
you already seem to have an account under this verified ID. Since you attempt to create a duplicate account, we will send a drone to your house and restrict, erm, you.
Conclusion
I feel quite helpless against this restriction. It is really not a big deal that I am not on LinkedIn. But for me this was the most recent and personal epitome of how a giant company can simply remove you from their platform. And now real people in the business world think I am lazy or doing something wrong that I haven't yet activated my account again.
I have written this post as a cry of help. Honestly, on the Internet I have a faint hope that I might receive some form of help. So yeah, here we go. What do you guys think? Do you know human working at LinkedIn that might help me?
You can support my effort by purchasing the Blender assets shown in this article (and video) from my
Patreon.
I also offer free and paid add-ons for Blender. You can find them in my
Gumroad page.
I also offer private tutoring on any topic you encounter on this blog. Find more information about my skills and contact data: https://ideasofhakki.com/consulting.html
Intro
Fig. 1: Screenshot of what we did last in the previous article.
Fig. 2: A reference image of the steering column.
In this article, we pick up where we've left from the previous article and continue to model our
Chukudu. This time, the steering column and the handlebar.
As you can see in Fig. 2, streering column of Chukudu is basically a cylinder, with a fork shape at the end. So let's model it!
Preparing the Scene
Fig. 3: Rename the Cube to Deck
Fig. 4: Click the eye button and hide the deck
First, let's rename the Cube object that is our Deck to, well, Deck (Fig. 3). Then, let's click the eye button to hide it (Fig. 4). This way, our scene is well organized and we can start modeling our new object: Steering column.
Fig. 5: Add a Cylinder
Fig. 6: Make Cylinder have 8 vertices
Now let's hit SHIFT + A and add a Mesh -> Cylinder
As soon as the Cylinder is added, open that newly appeared pop up window on your bottom left corner of the screen. There, set the vertex count to 8. We
don't need 32 vertices.
Great, this cylinder will be our Steering Column.
Fig. 7: Look from right
Fig. 8: Move the cylinder to the reference image
Press Numpad 3 to look at the scene from right angle.
Then, move the cylinder to where the streering column is in the reference picture by pressing G and moving it.
Fig. 9: Rotate the Cylinder
Fig. 10: Scale the Cylinder down
Now press R and rotate the cylinder to match the refernce image.
Then, press S and scale it down to match the thickness of the steering column in the reference image.
Fig. 11: Select the top vertices
Fig. 12: Make sure all top vertices are selected.
Now we want to extend it up to match the steering column. For that, we first need to select the top vertices. Press tab to switch
to the Edit Mode and then switch to the X-ray view by pressing alt + z. Now with LMB, you can select the vertices as shown in Fig. 11.
It is important that we switched to the X-ray view by pressing alt + z. Why? Because this way, when we
selected the vertices, Blender selected the vertices that were falling behind our view as well. Simply look at the object from above to confirm that all the
vertices are selected from the top (Fig. 12).
Fig. 13: Extend the column.
Fig. 14: Align the rotation further.
Now with the top vertices selected, press g and z twice, to extend them along the normal Z axis
towards all the way up to where the steering wheel ends in the reference image.
After extending it, you may notice that the top part now does not aling perfectly with the steering column in the reference image. This is because when we
first brough our cylinder there and casually rotated it a bit, it may not have aligned perfectly.
This is not a problem at all. Simply switch back to Object Mode by pressing tab and then press R to
rotate it a bit to align the object with the reference image.
Fig. 15: Scale the top vertices to align with the shape of the reference image.
Fig. 16: Select the bottom vertices.
Now you can also scale the top vertices a bit to match the reference image. Press s to scale it down a bit (Fig.
15).
Now zoom out a bit and select the bottom vertices. We will now model the bottom part.
Fig. 17: Extend the bottom vertices down.
Fig. 18: Extrude the bottom vertices.
With the bottom vertices selected, press G and then z twice to extend it down along the normal Z axis
down to where that column starts to thicken (Fig. 17).
Now in order to model that thickening part, we need to extrude the vertices but not move them. Simply press e to extrude,
then immediately after press RMB to "reset the location", which means not moving the vertices at all.
Basically, you now extruded the vertices but did not move them.
Fig. 19: Scale the extruded vertices up.
Fig. 20: Observe the scaled up vertices.
Now with the extruded vertices still selected, press S and scale them up until they match the thickness of the bottom part in the
reference image.
In Fig. 20, you can observe how it looks like from another angle.
Fig. 21: Extrude down until wheel slot.
Fig. 22: Extrude until the bottom of the wheel slot.
Now extrude again until the wheel slot begins (Fig. 21).
Then, extude once more until the very bottom of the steering column (Fig. 22).
Fig. 23: The basic shape of the steering column.
The basic shape of the steering column is now finished (Fig. 23). We will now detail the bottom part of the column where there is a
slot for the wheel to fit into.
Detailing the Wheel Slot
In this section, we will cut a profile at the bottom to create the slot for the wheel to fit in.
Boolean Modifier performs set operation on the volume of meshed. This means that using it, you can extract the shape of a mesh from another mesh. You can also join them or intersect them.
To cut a profile, we can use a cube and Boolean Modifier [g][g].
First, let's create the cube. To make moving the cube easier, we can first move the cursor to the center of the bottom vertices and then create a cube.
Fig. 24: Move the cursor to the center of bottom vertices.
Fig. 25: Add a new cube at the bottom of the column.
Select the bottom vertices of the column, then hit shift + S and when the pie menu opens, select
Cursor to Selected (Fig. 24).
Now remember to switch to Object mode before adding a new cube. Then, hit shift + A to add a Cube.
Fig. 26: Cube added.
Fig. 27: Make the cube smaller.
The cube is too big as you can see in Fig. 26. Let's make is smaller by pressing S and scaling it down.
Fig. 28: Increase the cube's size in Y axis.
Fig. 29: Right side view of the cube.
We should now resize the cube in the shape of the profile that we want to cut out from the bottom of the column.
First increase it's size in Y axis by pressing S and Y and moving your mouse until you reach the desired
size.
We also want to increase it's size height-wise. Let's switch to right view for a better look by pressing numpad 3.
Fig. 30: Increase the height of the cube.
Fig. 31: Rotate the cube.
Hit S and then Z to increase it's size height-wise. Then rotate it to align with the steering column.
Fig. 32: Move the cube up a little bit.
Fig. 33: The cube is in the right place and size.
Let's move the cube up a little bit. At this point, the cube is in the right place and size for a successfuly boolean operation.
Fig. 34: Change display option.
Fig. 35: Cube is now transparent.
To see how the boolean modifier works, it is a good idea to make the cube transparent. Let's head over to the Object tab in Properties Window as shown in
Fig. 34.
There, open the Viewport Display panel and select 'Wire' as 'Display As'. The cube is now transparent (Fig. 35).
Fig. 36: Add a boolean modifier for the column.
Fig. 37: Select the cube as boolean object.
Now select the Steering Column and add a modifier. As shown in Fig. 36, select the wrench button and add a modifier. Choose
Generate -> Boolean to add a boolean modifier.
Then, select the picker icon in the Object field of the Boolean Modifier and select the transparent cube, as shown in Fig.
37.
Fig. 38: Boolean modifier is complete.
Fig. 39: The boolean operation in edit mode disappears.
Now would you look at that. Thanks to the boolean modifier, we cut out a cube profile shape out of the steering column object. And it looks beautiful
(should I give take a break from using Blender?).
Non-destructing editing refers to the idea that we can modify, edit and basically change a 3D model in a way that it can be reverted back easily. This allows for edits to be made on the fly, meaning that a new change is mathematically added upon the previous change. This allows for complex edits to be done parametrically. Using modifiers is a basic way of doing this. Blender added Geometry Nodes support for instance, which in itself is a feature rich non-destructive editing method.
If you swicth to Edit mode by pressing tab, you will see that the cut profile disappears. This is because a modifier modifies an
object actively. Another word for this is non-destructive editing [g][g].
We can now call it a day and our Steering Column is finished. However, in some cases, you want to apply your modifiers. Applying a modifier
"confirms" that operation in a way that it cannot be taken back (of course you can Ctrl + Z, you way out of
things, but this is not the point here). Most importantly, applying a modifier confirms that change in the Edit mode as well.
For our purposes, it does not really matter whether we apply this modifier now or never. But I just want you to learn what it does, so let's do it.
Fig. 40: Apply modifier.
Fig. 41: Boolean modifier is applied.
To apply, click the little arrow button in the modifier's panel and select Apply (Fig. 40).
Now if you switch to Edit mode, you will notice that the vertices are reflecting the shape of the cut profile. How beautiful.
Fig. 42: Delete the transparent cube.
Fig. 43: Rename the cylinder to steering column.
Since the modifier is applied, we also don't need that transparent cube anymore. Let's delete it.
And then, to keep things organized, let's rename the Cylinder to "Steering Column".
Fig. 44: Unhide the deck to behold your creation.
Let's unhide the Deck and observe our creation. Great progress! You have successfuly modeled the Deck and the Steering column of the Chukudu.
Modeling the Steering Handlebar
In this section, we will model the handle bar of the Chukudu.
Fig. 45: Chukudu handlebar.
Fig. 46: What finished handlebar is supposed to look like (roughly).
Fig. 47: Handlebar reference image.
The handlebar is Chukudu's most organic shape. By an organic shape, I mean that it has the least amount of "straight" or "hard edges" compared to other
parts of the Chukudu such as the Deck or the Steering Column, which are a rectangular block and a cylindrical object respectively.
The handle bar looks like the horns of a bull, with a hole in the middle for the steering wheel to fit through. The handle bars also resemble a 'wye pipe'
shape.
I could not find a very good reference picture for handlebars. By a good reference picture, I mean one that shows the subject exactly from the front, such
that we can trace the reference picture in order to model the handlebar as accurately as possible. Remember, for a good modeling outcome, you must always
use reference picture(s). Just for this instance we can make an exception. Since Chukudu's themselves are a work of art and craftsmanship, we will be
forgiven to model things by following our hearts and rough estimates.
In order to model this shape, we will start simple with a basic shape of the handle bars. Then we will do some edits to make it more organic, just like how
it looks in the reference photos.
Along the way, you will get a chance for a finer vertex editing experience that is the corner stone of organic modeling techniques.
Let's begin
Fig. 48: Hide other objects.
Fig. 49: Cursor to world origin.
Let's start by hiding other objects in the Outliner window, so our scene won't be cluttered (Fig. 46).
Let's also bring the cursor back to the origin of the world, so the new objects we create will spawn at the world center. Hit shift
+ S to open the pie menu and select Cursor to World Origin (Fig. 47).
Fig. 50: Add a cylinder for steering handlebar.
Fig. 51: Rotate the handlebar 90 degrees along y axis.
Add a new cylinder which will become the handlebar by pressing shift + A and choosing
Mesh -> Cylinder. Make sure that it has 8 vertices (Fig. 48).
Then, rotate it 90 degrees along Y axis by pressing r and then Y and then 90.
Fig. 52: Scale the handlebar down along z and y axises except x axis.
Fig. 53: Handlebar is nice and thin.
Now as it stands, the cylinder is "too thick" for a handle bar. We can easily make it thinner.
Go to Edit mode (tab) and with all the vertices selected, hit s and then shift +
X and move your mouse. You will see that the cylinder gets thinner. This is because shift + X tells Blender to execute the transform operation in all axises except the X axis. We are scaling, so it now changes its scale only
in Z and Y axises. You can do this with other transform operations like move and rotate as well. Pretty neat ha?
Fig. 54: Wye pipe shape.
Creating the 'wye pipe' shape
The shape of the Chukudu handle bar resembles of a 'wye pipe' shape, as shown in Fig. 52. Topologically speaking, it is not
exactly same as with a wye pipe, but as far as technicalities are concerned, this is not as important. I simply wanted to show you an example of what we are
trying to achieve.
Fig. 55: Add a loop cut in the middle.
Fig. 56: Bevel the loop cut.
Let's add a loop cut in the middle of the cylinder with ctrl + R.
Then, bevel the loop cut by pressing ctrl + B.
Fig. 57: Select the top faces on the handlebar.
Fig. 58: Make sure that the top faces are selected.
Now select the top faces from the beveled area. Remember to switch to Face Select mode to easily select the faces (Fig. 56).
In Fig. 57, you can see the selection from top view (press numpad 7 to view from top). Make sure that you
select these top faces.
Fig. 59: Extrude top faces up a little bit.
Fig. 60: Flatten the extruded faces.
Extrude the top faces up by pressing e.
Then, flatten the extruded faces by pressing s and then z and then 0. What this
does is, it makes the Z axis values of all selected vertices 0, which effectively flattens them in respect to each other.
Fig. 61: Select to sphere option.
Fig. 62: Move your mouse to make a sphere shape.
Now with the flattened faces/vertices still selected, search for 'To Sphere' option and select it. To search, hit spacebar.
You can also find 'To Sphere' option in Mesh -> Transform -> To Sphere.
Once you selected the 'To Sphere' option, mouse your mouse until you see that the vertexes are shaped into a circle (Fig. 61).
As you can see, it is not a perfect circle, this is because the flattened surface was not a perfect square with equal amount of vertices around. Let's do
that next.
Fig. 63: Add a loop cut in the middle of the joint.
Fig. 64: Reselect the vertices.
Add a loop cut in the middle by pressing ctrl + R.
Then, reselect the vertices around as shown in Fig. 63.
Fig. 65: Reapply the 'to sphere' option.
Now, reapply the 'To Sphere' option. You will see that the shape is more of a circle now.
Topologically speaking, our model is finished. We will now make finer adjustments to make it look like the finished model. This is where you will be
practicing some 'organic modeling'. As the name refers, this is the same technique that you use to model things like plants, humans etc.
Adjusting the handlebar
To make adjustments, first we will add a couple of modifiers which will help us in the process.
Let's add a subdivision surface modifier. Make Viewport and Render values in the modifier 1 (Fig. 66).
Now as you can see, the handlebar is more smoothed out. Subdivision surface modifier adds more detail to a model, while at the same time smoothing out the
newly added details, resulting in a smooother looking model.
So after we added the subdivision surface modifier, do you see that the number of surfaces are increased, but the rigid surface cuts are still visible as
shown in Fig. 67? We can actually visually smooth out those surfaces. Click RMB and select 'Shade Smooth'.
Shade smooth option is a visual smoothining of the surface without adding actually surfaces. This is distincty from Subdivision Surface because the
modifier actually adds real surfaces. More surfaces means more calculations for the computer and if you add enough surfaces, your computer will slow down.
This is the reason why in the earlier step, we made the levels of subdivision surface 1.
Fig. 70: Enable on cage option in subdivision surface modifier.
Fig. 71: Vertices now visible on edit mode as well.
Before we continue to edit our object, let's turn on "on cage" option in the subdivision surface modifier (Fig. 69).
Now you can see that, the subdivision surface modifier's effect on the model is visible even in the Edit Mode.
As we know, modifiers edit the object 'on the fly'. Some modifiers allow you to see the actual effect on the vertices with that button.
While you edit your object, you can always turn this option on and off to keep observing your model and make correct adjutments.
Mirror Modifier
Fig. 72: Select half of the handlebar.
Fig. 73: Delete selected half.
Now we are about to make finer adjustments to the model. And we want these adjustments to happen to both sides of the handlebar. So we are supposed to do
them twice on one side and then another? No, this is tedious and error-prone.
We want the edits on one end to be reflected on the other side automatically. For that, we are going to remove half of the model by deleting it , and then
add a mirror modifier, where Blender will symmetrically duplicate the model.
So go ahead and select half of the model (Fig. 71). Then remove that half (Fig. 72).
Add a Mirror Modifier. After you add it, you need to tell the modifier which symmetric half you want to complete. Turn on and off X, Y, or Z axises as
shown in Fig. 73 and observe when the missing half is completed. Based on the orientation of your model, this can be either one of the
axises. If the orientation of your model is somehow off, then neither of the options will complete the correct half of the model. If you followed the
article perfectly though, you should be getting the same result as me.
Also turn on 'Clipping' option in the Mirror Modifier. This way, the vertices that are exactly at the half point of the model will stay attached in their
position.
Now as shown in Fig. 74, observe how when I move the editable half of the model, the other half follows exactly. Don't actually do
the change in the Fig. 74, I was just showing the example.
Great.
Boolean Modifier
Now, let's add a hole in between the handlebar, where the steering column will fit into. For that, we will use the Boolean Modifier. We will create a
cylinder and use it to cut the whole through the handlebar.
Fig. 76: Add a cylinder for handlebar hole.
Fig. 77: Make the handlebar cylinder smaller.
Add a cylinder. Then, make this Cylinder smaller (Fig. 76).
You can hit S and then shift + Z to make it thinner, then press S and then Z to make it shorter. Basically make it small until it is small enough that it looks like a
cylinder passing through the handlebar.
Fig. 78: Make the cylinder transparent.
Fig. 79: Add a boolean modifier for the handlebar and choose the cylinder as object.
Let's make this cylinder transparent by choosing "Wire" option in Object Window -> Viewport Display Panel -> Display As (Fig. 77).
Then choose the handlebar again, add a Boolean Modifier and select the Cylinder as the target Object (Fig. 78).
Fig. 80: Successfully created a hole through the handlebar.
Observe that now there is a hole through the handle bar (Fig. 79).
Remember that the modifier stack's order is important. You can drag and drop the modifiers to change their order, and observe their effects. The logical
step of the modifiers is to first add more surfaces (subdivision surface), then complete the missing half (mirro modifier) and then to cut a hole (the
boolean modifier).
Fig. 81: Select both objects.
Fig. 82: Reverse the handlebar.
By the way, so far our handle bar is reversed. At least that's because the part in the middle that extends upwards is actually downwards in the reference
images.
Let's simply turn the model upside down. Select both the handlebar and its boolean cutter object as shown in Fig. 81.
Then press R and then Y and then 180. This way, the model will turn upside down
exactly 180 degrees.
Fig. 83: Go to front view for the handlebar.
Fig. 84: Move the handles up.
Now go to front view by pressing numpad 1.
Then, select the tip of the handlebar and move it up a little bit, as per seen in the reference images.
Great, the handlebar is coming into life more and more.
Fig. 85: The sharp end of the handlebar.
Fig. 86: Move the added loop cut and move it to the tip.
Do you see that the tip of the handlebar is so pointy (Fig. 84)? This is because of the subdivision surface smoothing out the tip. To
prevent this, we need to add more vertices there.
Add a loop cut at the middle of the handle, and move it waay up to the tip, but not exactly all the way (Fig. 85).
As you can see in Fig. 85, the tip is now more circular.
Fig. 87: Handlebar reference image.
Let's take a look at the real handlebar image again (Fig. 87). Do you see how the top surface of the handle is a bit flat, where the
drivers hands are supposed to grab?
Let's model that flatness.
Fig. 88: Select this 3 vertices from the top.
Fig. 89: Move the selected edge downwards.
Select the three vertices from the top surface as shown in Fig. 88. Then move them downwards until their height matches the
neighboring vertices (Fig. 89).
Fig. 90: Make the tip narrower.
While we are at it, also choose all the vertices at the tip and make them narrower by pressing S and then y.
Fig. 91: Lets focus to the center.
Let's focus to the center a bit. Currently the center parts are so smooth that it is a bit unnaturaly looking. Let's add some vertices there.
Fig. 92: Add a loop cut at the bottom.
Fig. 93: Add another loop cut upwards.
Add a loop at that bottom part and move it down, but not all the way down.
Then, add another loop cut at the same location and move it up, but not all the way up.
Fig. 94: The center part is now more clearly defined.
Now the bottom part is more defined.
Fig. 95: Select all the vertices in the middle.
Fig. 96: Make the center part a little wider.
Finally, let's make the middle part a little wider, as seen in the reference image (Fig. 87).
Then, make the selected vertices wider by pressing S and y as shown in Fig. 96.
Fig. 97: Add a loop cut to the handle.
Fig. 98: Bring the loop cut down near to the center and make it smaller.
Now, as we enlarged the center part, the handle got thick as well proportionally. Let's fix that.
Add a loop cut and bring it down near to the center. Then make is smaller, until its size reaches the tip of the handle bar (Fig.
98).
Fig. 99: Finished handlebar model.
Wow. This was one model that I modeled without the help of a good reference picture if I've ever modeled one. We could continue to adjust and make it more like how we see it in the reference pictures, eyeball estimate till the end of the day. Actually you can, if you want. But I think we can call it a day here. Let's put our models together.
Fig. 100: The models as they stand.
Fig. 101: Select the handlebar and its boolean cutter.
Let's start positioning the handlebar. Unhide all the other objects so we can see them.
Then, switch to the side view and select both the handlebar and its boolean cutter.
Fig. 102: Move and rotate the handlebar.
Fig. 103: Check the positions from front as well.
Then, move the handle bar up to the tip of the steering column and rotate it to align it.
Make sure everything looks good from the front as well. I hid the main reference image in the scene as well in this step so that we can see things clearer (Fig. 103).
Fig. 104: Resize the boolean cutter according the steering wheel.
Finally, select the boolean cutter and resize it to adjust it to the thickness of the steering column.
To correctly scale it while it is in a rotate state like that, hit S and then Shift + Z (hit z twice) to scale it along Normal X and Y and except the Z axis.
Fig. 105: Your chukudu is coming through.
Your Chukudu is really coming through, innit?
Fig. 106: Final outliner view.
Fig. 107: Set handlebar as parent to the boolean cutter.
See the final view of the outliner window. I renamed the objects accordingly (Fig. 106).
Now, let's also set the Handlebar as the parent of the boolean cutter. This means that, when and if we move the handle bar, the boolean cutter will follow it exactly. So if we move the handle bar again, we don't have to select both the Handlebar and its boolean cutter everytime.
To add the Handlebar as a parent, first select the boolean cutter, and then the Handlebar, then press CTLR + P, select Object in the opening menu (Fig. 107).
When we add an object as a parent to other objects, we select all the objects that are considered children, then we select the parent object as last. The last selected object in Blender is the active object, so it acts as the parent when we do the CTLR + P operation.
Fig. 108: Final outliner view after parenting.
Notice how the boolean cutter is now under the HandleBar in the hierarchy in the outlinder (Fig. 108).
Conclusion
In this article, you've learnt how to model with circle/cylinder shaped objects, extruding, boolean modifier and practiced a great deal of moving, rotating
and scaling objects.
You've also learnt some basics of organic modeling, by modeling something like a handcrafted wooden piece such as the handlebar. Then you practiced some modifier stack operations.
Tap yourself in the back. These are really important fundementals of any 3D creation app.
Personally for me, my blog is really fleshed out now and I am really happy where it is in terms of its internal code. I was able to focus solely on writing
this article, and believe it or not, it took me only a day to finish this article, compared to ~ 2 weeks for the previous article. I mean, the
previous article was also pretty long, but I really had to work on how my blog engine works in the background in order to create a smooth writing experience
for myself.
At the end, like I said, this blog engine is working really nice and I am really satisfied with the writing process. In fact, I am planning to write an
article & record a video just to show my writing process.
For you, this means that you will definitely see this tutorial series to come to an end. I feel motivated and encouraged to finish explaining this project.
You can support my effort by purchasing the Blender assets shown in this article (and video) from my
Patreon.
I also offer free and paid add-ons for Blender. You can find them in my
Gumroad page.
I also offer private tutoring on any topic you encounter on this blog. Find more information about my skills and contact data: https://ideasofhakki.com/consulting.html
Intro
Fig. 1: What you will achieve at the end of this article:
Welcome! w?
In my blog, you will often see ‘glossary terms’ such as this one. I usually reference a Glossary term for a new word introduced in a blog post, and one that deserves a seperate explanation, such that the flow of the main text is protected. If you click the small w? link, it will highlight the word that refered to this glossary item in the blog post. The referring word will be followed by a [g] symbol, which highlights this glossary box when clicked.
In this article [g][g], we will learn basics of modeling in Blender. Along the way, you will learn how to
work comfortably
with Blender and its interface. We will model the Deck of Chukudu. Final scene that you will achieve is shown on Fig.
1.
We will also learn how to effectively use reference images to help you achieve your goals in creating the artwork
that you dream of.
In later tutorials, we will learn how to texture, light and render your scenes in Blender.
In this series of tutorials/articles, we will be modeling and texturing a Chukudu, and render under different light and scene setups. I chose this model
because a Chukudu is a simple wooden scooter with very
low amount of parts. Each Chukudu is also a unique piece of personal craftsmanship. This flexibility also means we don't need the strict precision typically
required for more complex subjects like architectural models.
Modeling a Chukudu will give us a good foundational knowledge of Blender.
Sighting is a tool used generally by traditional painters that use a canvas. In this technique, they hold their thumb or more commonly a pencil towards their subject (a muse, a building), and measure dimensions and distances. With sighting, they convert proportions of their subject to a basic unit applicable to the painting on their canvas. As a result their paintings accurately reflect the proportions of the real world subject. See this blog post for more information.
You know this cliché image of a painter using his finger to look at the muse s/he is drawing? They use their finger
or pencil as a sighting [g][g] tool. This way, they can measure the distances, sizes
and perspective of
their objects and reflect this on their canvas.
You will often see painters looking at their subject almost every 3-4 seconds. That's because unless you are a
gifted person, or if you have been practicing the same drawing the hundredth time, you cannot
memorize your subject entirely. You need to keep looking at your references and make
constant observation.
Like the muse of a painter, the reference images give both an idea of the proportions and a source of inspiration to the 2D/3D digital ‘painter’. In your entire journey as a 2D/3D artists, beginning of every new project will include researching, finding, collecting and organizing your reference images. Heck, I even made a software for that!
The same goes for digital art. In Blender, we will always use reference images [g][g].
Especially during modeling phase.
Finding a solution to organize your Reference Images
Well, how do we do it? What we need is a place where we can collect all our reference images. This
way we can take a general look at our images. We can zoom into any of the images and look into details and so on.
Fig. 3: Screenshot of my folder where I keep bunch of reference images of Chukudus that I found on the Internet.
For example, we can use Blender itself to do this. I have a folder where I have bunch of images of Chukudus. You
can collect your own reference images from the internet. Or you can support me on my Patreon to get
access to all the content I show in my blog
posts and videos.
Once we have the reference images, we want to import these images to Blender. But don't worry about how to do that
in Blender now, because in a moment I will show you a better way to organize your reference images.
Fig. 4: Reference images collected in Blender viewport
In Fig. 4, you can see that I imported all the images to Blender viewport. This is just to show you how it would look like.
This sounds good at first, but actually this is not an optimal solution. For one thing, you will find it quite
annoying to change your viewport perspective in Blender between your model and your collection of reference images.
It would actually be better if they were on a separate window.
There are lot of shortcuts, key presses and key combinations in Blender. Most of the time, you can click on menus and buttons to get away with not learning all the shortcuts. However you only need to learn a few to get far. In my blog posts, I animated key buttons to describe the action you are supposed to do (hold, press, combine etc.). Just hover over them to see the animation.
Some tips: ‘Drag’ means moving your mouse, often by hold pressing a key or a combination of keys (LMB, SHIFT + MMB, etc.)
‘Press’ a combination: Sometimes you have to ‘press’ a combination of keys. A combination often describe 2 or more keys pressed together, which of course means that you need to ‘hold’ the first key while ‘pressing’ the second (or last) key in the combination. Key animations in my blog like SHIFT + A will describe this behavior: While the first key shows a ‘hold’ animation, the second key shows a ‘press’ animation (i.e. hit and release).
You can actually create a separated viewport window in Blender, so you only need to switch between the windows.
However, if you want to zoom into your images, or pan around to look at different images, you have to use Blender's
shortcuts [g][g]. To pan in 3D viewport without loosing perspective, you need to hold SHIFT and hold drag Middle Mouse Button (MMB).
You also want to add text to take notes around your reference images as things get more complex. Although collecting
your reference images right inside Blender is a solution by itself, there are actually software made specifically for
that purpose.
One of the most famous of these software is called PureRef. If
you visit their website, you will see why such a software is most neeed.
MyApps is an organization tool on the web that features infinite workspace, multiple apps, complete data privacy, data sync across devices, real-time collaboration, full offline functionality and cross browser/device support. It is in active development currently only by me.
So PureRef it is? Well, personally I don't use it. I prefer the Image Reference Board from MyApps [g][g].
Why? First of all I wrote MyApps. I did it because PureRef is actually not Free
Software. This means that for now, you can only download PureRef for personal use (i.e. hobbies, education), with no commercial
intent.
If you want to use it in a commercial project, you are expected to buy a license. There is no guarantee that 'the
personal use license' will remain free as well. One day the creator might make it that it costs money to use it at
all. So I don't want to rely on that software. I prefer FOSS (Free and Open
Source Software). I could not find a good open source image reference software, so
I wrote one.
Secondly, I had difficulties installing PureRef. It felt janky a bit to install it on my computer. That's why I've built MyApps on the web. You
don't need to install anything or create any account. Just visit MyApps and start using it. Once you connect
to it, it works even if you
are offline. It does not collect any data from you. What is on your computer stays on your computer.
Here is a quick comparison of PureRef and MyApps's Image Reference Board:
Software
PureRef
MyApps
Open Source
✗
✓
Does not require installation
✗
✓
Supports Web
✗
✓
Made by myself
✗
✓
I am constantly improving MyApps. It is not just a Reference Board, but a collection of many apps. At least it is
going to evolve into that. If you are also a programmer, you can help me
contribute.
Let's place our reference images to MyApps
Let's head over to the MyApps website. When it opens, hit
RMB on your mouse. Choose Application -> Image Reference Board.
Fig. 5: Screenshot of MyApps website, where Image Reference Board is opened
Workspace w?
A Workspace in MyApps is an infinite pannable/zoomable 2D space where you can open, use, organize, group and delete Apps. It is similar to Canva Whiteboard or Miro’s Workspace, except that you don’t draw or place images in there: You open fully functional apps or applets and get work done in these Apps instead.
Apps are small programs that you can open in MyApps, an organization tool on the web. In theory, there can be an App for everything. You can spawn as many Apps of any type as you want, turning MyApps into the perfect custom software go-to solution for your personal needs.
You should now see a small box in your screen. This is your Image Reference Board. Currently it is small, but we can make it larger. In MyApps, you can
zoom in and out of your Workspace [g][g], drag Apps [g][g] around and resize them as you wish.
So let's resize our Image Reference App to make it bigger. Hold drag
Left Mouse Button (LMB) on the App and move it to the top left corner of your screen. Now let's resize the app: Place your mouse on
the right bottom corner of the App. Hold it with LMB and scale it to cover large
part of your screen. Now our Image Reference Board is large and spacious ( Vid 1 ).
We now want to activate the board so we can use it. Double click LMB on it to activate. You should
now see that it has a green border around it. It is now activated. To deactivate, you can click outside the Board
app.
Vid. 1: This screen recording shows how the features work in action.
With the app activated, we can now start to drag and drop the reference images to the Board (Vid-2).
Please see the videos on either side of the article to see all the steps involved. You can maximize the videos. There is no audio.
Vid. 2: This screen recording shows how to add images to the board.
Adding images is very simple. Just open your folder of images. Then select and image and drop it on the reference board while
the board is activated. You can also select all the images and drag & drop them to the Image Reference App, and it will layout them for you. Watch
the video on the right to see how. You can also drag and drop random images from the web into this app (i.e. from google images). But it won't work for some
websites, because I could not find any meaningful data in the drag event data that comes from those websites. If you are a programmer, you can help me
improve MyApps.
Great! Now you have your reference images in place. We will use this board as a general place to stay inspired. We
will also use Blender itself to add reference images, where necessary, to help us with precise modeling. This way, we will
never be lost in the complicated process of 3D modeling.
Let's Get Started With Blender 3D
You are about to begin a magical process called 3D modeling. This process is complicated, but extremely
rewarding. Once you learn the basics, the ability to create a whole digital world will be within your
reach. There are different ways to model different things. But it all boils down to a few basic principles.
In my tutorials, I prefer teaching things by doing them. So there will be minimal boring theory or more just doing
things. Along the way, you will develop a certain level of practical skill. Upon that practice, you will be able to
build up theory as you need.
Blender’s Viewport shows you the 3D scene that you are working on. It is the place where you will spend most of your time in Blender. If I tried to explain everything about it, it would be a long and boring blog post. Instead, visit 3D viewport article group in official Blender documentation. Skim through the pages and familiarize yourself with it.
Select an object with LMB click. To look around in the 3D viewport [g][g],
hold click MMB and move your mouse.
Congratulations, the basics are out of the way.
Importing and adjusting the reference image
Fig. 6: Screenshot of newly opened Blender.
In order to model a Chukudu as "perfectly" as possible, we need, guess what, good reference
pictures. In this context, it is less about "inspiration" and more about "getting proportions right". In
this case, we want pictures of our model from exactly the sides, front, back, top and bottom. At least in the ideal
case. There are not many pictures of Chukudu's online. But I managed to find one that is sufficiently from the
side. You have seen this picture in the beginning of the post already. Since Chukudu's are fairly simple machines (get the pun, physics majors?), a
single image from the side will do just fine for us.
Fig. 7: Side view of Chukudu. You can right click and save this image.
We will now import this image into Blender as a reference for our modeling. We will do the following steps:
Import the reference image
Fix its rotation
Move it "back" a little bit such that it says behind our model.
Fig. 8: Add Reference Image in Blender
Import Reference Image
Press SHIFT + A to open the Add menu and add an
Image > Reference Image.
Fig. 9: Reference image is added to Blender viewport. It looks a little weird though.
You will see that the image is added. It is facing towards us and it seems that it is cutting the default cube in
the middle.
Fix its rotation
Fig. 10: Blender's Cursor. Say hi.
3D Cursor w?
Cursor is an important concept in Blender. It is this small circle with red/white strips and 4 black lines. It essentially describes as a location in 3D space. You can place it at a specific location. Then it can be used to create objects in that specific place or move things towards that specific place. Read this article from official Blender documentation to learn more.
Blender added the reference image facing towards us. It also added the image exactly at the location of the cursor [g][g]. Cursor is an
important thing in Blender. It is basically a small tool to define a location. For example, whenever you add something new in Blender, it
gets created exactly where the cursor is. You can also move the cursor around. You can move things to the Cursor. You get the idea.
Fig. 11: Reference image is now facing flat.
Fig. 12: Hit X handle in 3D viewport axis.
Fig. 13: Right Orthographic View
Now we want to reset the rotation of the reference image. Press ALT + R reset
its Rotation. Now it
will be facing flat. (Fig. 11)
Fig. 14: Rotating the Reference image 90 degrees in X axis. Notice how the red X axis was highlighted. Don't forget to hit
Enter to confirm rotation
Fig. 15: Looking at the Viewport from right angle.
Now let's rotate it horizontally. Hit R and then press X and
then press 90
in numbers. You must hit these keys one by one, not all at the same time. You will see that the reference image has now rotated 90 degrees along the "red axis" (Fig. 14). This axis is called the "X" axis in Blender. Hit
Enter to confirm the
rotation. If you mess up, you can always press alt + R to reset the rotation again and start over.
Fig. 16: Rotating the Reference image 90 degrees in Z axis. Notice how the blue Z axis was highlighted. Observe how the
front of the Chukudu towards the rear is aligned with the green Y axis.
We need to execute one more rotation. This time "vertical" rotation. We want to rotate it 90 degrees along Z axis. Hit R and then hit z and
then hit
90 in
numbers. Finally hit Enter to confirm this rotation.
Perfect, we have now rotated the reference image correctly (Fig. 16). It is now facing correctly towards
"left-right" direction. If you observe the
reference image itself, the front of the Chukudu is aligned in the Green Y axis.
These directions are crucial to understand what is happening in Blender. So I will show you what we achieved so far.
Hit Numpad 3 button on your keyboard. If you don't have
a Numpad
section
, then click on the X handle on the 3D
viewport axis. You will find this 3D viewport axis
on
the top right corner of your viewport. (Fig. 12)
You should now be looking at your viewport scene from right side. Observe the text on top right corner of the viewport. It will say
"Right Orthographic"(Fig. 13).
As you can observe in Figure 15, we are looking at our scene from the right angle, I even draw an amazing rendition of a beautiful
car to show you the example. If that car was actually in our 3D scene, we would be seeing the car from the right side (given that the car is aligned to our
scene).
Just like that car, we rotated the reference image of the Chukudu to match the directions of our scene. This will help us align things better along
the way
and keep track of things. Chukudu is a fairly simple thing to model. However for more complex models, such alignment initially will save you
headache later,
and you will thank yourself.
Move it back a little bit
Fig. 17: Reference image is now behind the cube.
We will continue to use the keyboard shortcuts to move the image back. Just make sure that the Chukudu is selected by choosing it with
lmb click.
Now let's move it back by 2 meters along the red
axis. First hit G and then X and
then - (minus symbol) and then 2 in numbers.
You can see now that the reference image is moved behind the cube (fig. 17).
With that, we can start modeling!
Let's Start Modeling in Blender
We will start by modeling the deck. The Chukudu deck is basically a thick wooden piece with cuts on either ends to make space for the
wheels. It is also thinner towards the front, thicker towards the end. We will model these features.
Hit Numpad 3 or the X in the 3D Viewport Axis to look at the scene from "right" angle.
Transformation refers to the fundemental operations that we can exert upon an object in 3D space. These are MOVE, ROTATE and SCALE. Within Blender we use these three operations frequently. For more information, refer to Blender documentation on basics of transformation.
While setting the reference image, you already learnt a little bit about Transformation [g][g] operations in Blender. These are move,
rotate, scale operations. We rotated and moved the reference image, so you already used those! There are shortcuts for each.
With an object selected, you can hit once on your keyboard the
G , R or S
keys to respectively
move, rotate or scale and object. Just hit one of these letters and move your mouse around. You will see that the object is moving,
rotating or scaling with your mouse. If you want to confirm the transformation, just click lmb. If you want to
cancel the transformation and revert the object back to its last position, click RMB. After hitting one of the
transform keys, you can hit X, Y or Z in order to lock the
transformation in either X, Y or Z axis (the red,
green or blue axis).
Fig. 18: Moving the deck down a little bit to align the with the Chukudu's deck on the reference image
After you hit one the Transform buttons (G, R or S), and then one the Axis buttons (X, Y, or Z), you can also enter a
Numeric value, like 3, -4.2, etc., then the transform operation will move, rotate or scale the object according to this
specific value. Using the mouse to move the objects around is a nice and easy method. But sometimes we want to have precision, where these numeric value
come in handy.
Fig. 19: Scaling the Deck down along Z axis.
Now with our default cube selected, let's hit G and then Z and move it down with our mouse. Do
you see the orange dot in
the center of the cube (Fig. 18)? We want it to be aligned with the deck of the Chukudu (rough alignment is more than enough).
Now let's scale it down a bit. Hit S and then Z and scale the cube down until it rougly aligns with
Chukudu's deck.
Fig. 20: Make the deck longer
Let's make the Deck long now. Hit S and then Y and move your mouse to extend it until it roughly aligns
with reference image.
Fig. 21: Rotate the deck.
Finally, let's rotate the deck to align with the reference image. Hit R and then X to rotate the deck.
Actually, we are looking
"towards" the X direction. If you don't specify an axis during rotation, Blender rotate the objects perpendicular to your view angle. Since we are looking
directly at the X axis, if you just hit R and start moving your mouse, you will notice that the object is already
rotating in the
direction that we want (that is, the X axis).
Fantastic, you are half way done to modeling the deck. At this point, if you want to make adjustments to the deck's proportions to match the reference
image better, you can still do so. For this, we need to view our model a little better. Let's make some shading adjustments.
Shading Improvements
Fig. 22: X-ray button.
First, we want to improve our viewing of the scene. For example I want to make the object a bit transparent, so I can see the reference image behind it
better. To do this, first toggle X-ray view by pressing alt + Z or the X-ray button on
top-right of your viewport. Now all the
objects in your scene will be conveniently transparent. This is not a final render setting. It is just for our viewing convenience.
Fig. 23: Steps to choose a MatCap for the viewport shading.
MatCap w?
MatCap stands for Material Capture. It is a ‘baked in’ material full with colors and reflections. It requires no lighting in your scene, as it is only a tool to help you view your models in the 3D Viewport.
I also want the color of the objects look more distinctive rather than boring gray. Let's apply a MatCap [g][g] color.
Fig. 24: MatCap Clay Brown color is applied.
Fig. 25: Front of the Deck is short.
Hit the little arrow down button on the right-most part of the shading options. Then choose MatCap. Finally, Hit the colored sphere. You
will see bunch of options to choose from. I prefer the clay brown color. ( Fig. 23 )
As you can see now that the deck object is both transparent and has a nice distinctive reddish color. We can now easily distinguish it against the
reference image in the background.
Make Small Adjustments to the Deck's size
We are now at a better position to make small adjustments to the deck. Let's zoom into its front part.
Zoom by rotating the MMB (basically "scroll action"). Then hold click SHIFT + Mouse Wheel (hold both) and move your
mouse to shift (pan) your view point.
We now zoomed into the front part of the deck and realize that it is a little short compared to the reference image ( Fig. 25). We
want to extend it along the Y axis further.
Fig. 26: Scale the deck to match the reference image.
Fig. 27: Scaling the deck down to match the reference image.
However we rotated the weird angle, and now if you hit S and then Y and try to scale it, you will see
that it gets
stretched along Y axis. We want to extend it along its own orientation. Luckly, Blender can calculate this. All we have to do is press
Y twice. So basically hit S and then hit Y twice. You will see that the scaling
line along the Y axis is now oriented
perfectly with the deck's rotation. Now you can safely extend it to match the reference image.
While you move your mouse to extend it, you can also hold press SHIFT button to make the transformation more
sensitive. Try
it and you will see what I mean. It makes the transformation go slower, such that you can have finer control.
The front of the deck look also very thick compared to the reference image. Let's hit S and then Z
twice to
correctly scale down the deck until it has same thickness with the reference image. ( Fig. 27 ). If you look closely at the deck, you
will notice that it is now a little bit off in terms of location. Now you can hit G and then Z
twice to move it
down a little bit such that it is really right on the reference image. Remember to hold press SHIFT to transform with more
sensitivity.
At this point you can keep doing small adjustments yourself. Your attempts will yield different results. So now you should be brave and comfortable with
the Grab (move), Rotate and Scale operation to make final adjustments.
Now let's address the elephant in the room. As we adjusted the front of the deck for the reference image, the middle and the rear part of the deck is now
completely out of alignment. We cannot fix this with basic transformations. We must now being real modeling: Vertex manipulation.
Blender features a few ‘modes’ that makes it logically easier to work with this complex 3D program. Each mode activates special features of Blender that are specialized for different things: Object mode makes it easy to select whole objects. Edit Mode allows you to edit individual vertices, edges and faces of models. Sculpt mode, well, helps you do 3D sculpting (similar to ZBrush). The most important 2 modes are Object Mode and Edit Mode.
Edit mode [g][g] is the single most important mode in Blender where you will spend most of your time when
you are doing modeling. With the deck
object selected, hit Tab key on your keyboard to switch to the Edit Mode. Alternatively, click the Object Mode button
on the
top-left corner of your viewport. A drop-down menu will open. You can see all the other modes in that menu. Choose Edit Mode.
You can now see all the individual vertices that make up the deck. You can choose individual vertices, edges or faces (or a mix of them) and transform them
with the shortcuts you've already learnt ( G, R and S keys).
Fig. 29: Select the rear end vertices of the deck.
Fig. 30: Enlarge the vertices at the rear end of the deck.
We want to choose all the 4 vertices at the rear end of the deck. Simply drag select with Left Mouse to draw a
box
. Make sure the box encapsulated the rear end of the deck, and only those vertices will be selected.
Click the Figure 29 to enlarge it. You will see the selection box in action. I have already selected the rear end vertices.
With the vertices selected, hit S and then Z twice to size up the vertices. I'll size
them up roughly the same
width as in the reference image. You can see in Figure 30 that I am enlarging it a bit larger than it is supposed to be according to
the reference image. But hey, there is not really rules for a precise Chukudu. So we don't do that here. This is a tutorial where you can follow your
heart's content.
Let's see where we are
Fig. 31: Corner angle.
Fig. 32: Scale the deck down X axis.
Before we continue, let's take a look at the deck from a corner angle. Oh, it looks way wider than it is supposed to be! ( Figure 31 ) That's because earlier on, we scaled down what was a Cube. Since we scaled down from only one direction, now the other
direction looks way wider.
Let's jump out of the Edit Mode by pressing Tab button. Now we are at Object Mode again. Let's also turn off the
X-ray view because for this step it will make things more confusing (hit X-ray button on top-right or ALT + Z key combo).
Then we can hit S and then X and scale the deck down until it looks satisfactory to our eyes ( Fig. 32 ) .
We don't really have a Chukudu image from exactly top angle. So we can't attempt to match the wideness to a reference image. But like I said, each Chukudu
is very unique and this makes them a very good candidate for a Blender tutorial. Just follow your heart.
Detailing the Deck
If you've made this far, congratulate yourself. You've learnt about 40% of Blender. I am serious. You've learnt how to add objects, how to navigate in 3D
scene, how to transform things (move, rotate and scale) and modeling by manipulating vertices (a.k.a polygonal
modeling ).
Another 20% is really all about getting comfortable with what you've learnt so far. That would bring you to about 60%. I would say things like materials &
texturing, lighting & rendering accounts for another 30%. Finally that last 10% is really all about practicising and learning other lesser used parts of
Blender.
To consolidate our knowledge so far, we will continue to detail the deck model further. We will drill a hole in front of it for the
steering
column to fit. Then we will create a cut-out or a recessed slot at the rear end for the rear wheel to fit.
Let's get on with it.
Drilling a hole
Fig. 33: A circle is added at cursor's location. Notice the 'Add Circle' panel that popped up at the bottom left corner.
Fig. 34: Change the 'Vertices' count to 8.
To drill the hole, first we will create a circle and then use this circle to cut "a hole profile" on the deck. Hit SHIFT + A
combo to open the add menu and choose Mesh -> Circle.
With the Circle added, do not click anywhere! You will notice that an "Add Circle" menu appeared at the bottom left corner of the viewport ( Fig. 33 ). We can use this
menu to customize our newly created Circle. If you click anywhere, this menu will disappear. If that happens, just delete the Circle (hit X to
delete something) and create a new one.
Expand 'Add Circle' menu. Change the Vertices count to 8. Now as you notice, the circle is no more a circle, but an 8-sided polygon (an
octagon).
Actually the previous version was also not a circle. It only had 32 sides. So it looked like a circle. The reason why we reduce the corner/side (vertices)
count is simply because we don't need that many. Reducing the count size will help us make the modeling easier.
Fig. 35: We are now looking at the circle from top view.
Fig. 36: Moving the circle down to the tip of the deck.
Now we want to bring the circle on the deck, exactly where we want the hole profile to be at.
I will hit Numpad 7 or the blue Z handle on the 3D viewport axis, in order to switch to 'top' view. Now I can
conveniently move
my circle "down" towards the tip of the deck. I can see that I need to move the circle on the green axis, which the Y axis ( Fig. 35 ). So I will hit G and then Y and then I will move my mouse until it is
somewhere down there ( Fig. 36 ). The circle is also too big, so let's reduce its size.
Fig. 37: Sizing the circle down.
Hit S and start sizing it down with your mouse. Make it
small until it is somewhere within the boundaries of the deck. ( Fig. 37 )
Fig. 38: The Circle is in front of the deck. Let's adjut it further
Good. Let's hit Numpad 3 or X handle of the 3D viewport axis to switch to the Right view (Fig.
38). Now we can see it better where the circle should be at. Actually it is already at a good spot. You can see that it is more or less aligned with
the steering column that goes through the deck.
Now we want to cut the hole through the deck. In order to get it right, we need two things to align:
The circle should face exactly towards the deck. Otherwise the hole will be skewed.
Our point of view should exactly face the deck (and hence the circle), otherwise the hole will be skewed.
Snapping
Fig. 39: Snapping tool settings.
Fig. 40: Circle is snapping to the side of the deck.
Fig. 41: Circle is NOT snapping to the top of the deck.
To align the circle on the deck, we will use Snapping, which is very important in Blender. Thanks to snapping, we can move and and align an object exactly
at the surface, corner, middle or other defining features of another object. In order to achieve our goal, we need to change the settings of the
Snapping tool first.
Look at the center top of your viewport. You will see a magnet icon ( Fig. 39 ) . Next to the magnet icon, you will see some sort of
a ruler. Click that ruler. Now you can change the settings of the snapping tool. Choose Center as Snap Base, Face as a Snap Target
and check
Align Rotation to Target checkbox.
That's it. To activate Snapping, click the magnet icon. Now at every movement things will try to snap to each other. I personally don't like clicking
Magnet button on and off. If you hold press CTRL on your keyboard while you move an object, the Snapping will be automatically
turned on. I
find that method more practical.
Go ahead and try, select the circle and move it around while you hold click the CTRL button.
So snapping works, but for some reason, it appears that the circle is not perfectly aligning on the top surface of the deck (Fig.
41), which is what we want. It
aligns nicely if you try on the sides, but not on the top.
This is happening because we edited the Deck object in Edit Mode. When you edit an object in the Edit Mode, you make a deep change in its
mathematical representation. This change is not immediately picked up by Blender, for various valid reasons. We need to tell Blender that this current form
of the Deck should be accepted at the real form. Only then can Blender make good calculations for Snapping to work. I am oversimplifying things here a lot.
But if you really want to understand what is happening under the hood, we need to talk about Graphics Programming, which is an advanced topic. So let's
leave it at that for now.
Normals refer to the orientation of the faces. Think of it like the covers of a book. A book has a front cover and a back cover. For a 3D object, say a cube, we expect the faces looking outside to be like a ‘front cover’, and the faces looking inside to be like a ‘back cover’. Sometimes in Blender, the orientation of all or some faces will be messed up. In such cases we need to recalculate normals. To do this, we select all or some faces, and hit SHIFT+N in Edit Mode to recalculate the Normals ‘outside’. To calculate them ‘inside’, we hit CTRL+SHIFT+N.
To fix the issue, simply select the Deck, hit CTRL + A to open Apply menu, and select
Apply Scale. Did you notice the
deck changed colours a bit? This shows that the Normals [g][g] are reversed. We need to make
sure that the Normals are corrected. For this, go to
Edit Mode by pressing TAB key on your keyboard. Make sure that every vertex of the Deck is select by pressing A. Then
hit shift + N shortcut to Recalculate the Normals. Now if you exit the Edit Mode by pressing TAB, you should see that the
color of the deck should go back to how it used to be so far.
Fig. 42: Circle IS perfectly snapping.
Now also go ahead and try to snap the circle. Select the circle, hit G to start moving it, then hold press CTRL to activate
snapping, and move the circle on the top surface of the Deck. You will see that it will snap perfectly (Fig. 42).
Circle is now aligned perfectly to the rotation of the deck. We should now align our point of view to the deck's top face. To do this, simply select the
Deck and hit shift + NUMPAD 7 . This is different from the pure NUMPAD 7. Now we are not looking
at our scene from the top, but we
are looking at the Deck from the top.
Using the Knife Projection Tool
We are very close to drilling the hole.
Fig. 43: The Deck and the Circle selected together.
Now with the Deck selected, go to Edit Mode by pressing TAB. Then hold CTRL and also left click on the
circle to select it as
well. If you did this correctly, the outline of the circle should be orange, because it is not active selection. Since the circle is a very thin object, it
might be difficult to select it. In that case, use the outliner on top right corner of Blender. Simply hold CTRL and left click on
the Circle
in the Outliner to select it. (Fig. 43)
It is important to understand what happened right now: We first selected the Deck, and then switched to Edit Mode. While we are in the Edit Mode
for the Deck object, we also selected the Circle, which itself was still in the Object mode. In order for the Knife Projection [g][g] to work, objects
must be selected in that manner. If you are afraid that you are getting this wrong, let me tell you the only two ways that you might be doing it wrong:
Selecting both objects together while in the Object mode, and then going into the Edit mode (wrong, because now Circle is also in Edit Mode).
Selecting first the Circle, going into Edit mode and then selecting the Deck (Active object will be the last selected object before going into the Edit
Mode, which is Circle, which is wrong. We want the Deck to be the active object )
Fig. 44: Circle has cut the Deck.
Great, with the Deck and the Circle correctly selected, go to menu Mesh -> Knife Project. A little menu will open on the bottom left the
viewport. Open it and also check "Cut through".
Great job? Well not really. Do you that the two edges that leave the circle and go all the way to the tip of the deck? I marked the tip of these edges in
blue ( Fig. 44). This is bad Topology. We want to a better job. Hit shift + Z to
revert the changes. No complaining! Rever
the changes now!
Fig. 45: Adding an Edge Loop
Fig. 46: Move the Edge Loop towards the center of the circle.
Edge Loop w?
An Edge Loop is a continous single line that you can follow on multiple vertices. It is a chain of edges basically. A single vertex might be connect to more then 2 vertices, thus there can be more than 2 Edge Loops running over a vertex. We usually add Edge Loops to add more detail to our models. They can be a hard concept to wrap your head around at first. You can read this official Blender documentation article which talks about ‘Selecting (Edge) Loops’, which can give you a good idea and foundation to work with Edge Loops. Also, here is the official Blender documentation article about ‘Loop Cuts’, which basically talks about adding new edge loops.
What we want to do is to encapsulate the circle topology on the deck between two edges. For this, we first need to add edges to the deck. With Deck
selected and while being the Edit Mode, hit CTRL + R and gently move your mouse towards the "middle" of the
Deck. You will notice a bright
yellow edge (Fig. 45). This is called an Edge Loop [g][g]. Click lmb on your mouse to confirm the Edge Loop. Now you
can
move your mouse around to move the edge loop around. I want you to bring it somewhere close to the middle of the circle.
Switch to the top view over the deck (SHIFT + NUMPAD 7) to adjust it further. If switching to the top view
alignment for the deck behaves
weirdly, first switch back to the Object mode, and then hit SHIFT + NUMPAD 7, and then it should work fine.
Switch back to the Edit Mode to
align the Edge Loop better (Fig. 46).
Fig. 47: Move the Edge Loop towards the center of the circle.
Fig. 48: Edge Bevel to cover the circle.
To align the Edge loop perfectly between the circle, you cannot use traditional G and a combination of X or Y axises to move the
edge. This is
because we want the edge to only move along the mesh (the deck) For that we have Edge Slide option (see Fig. 47 )
With the Edge Loop aligned to the middle of the Circle, hit CTrl + b to divide the edge loop into two
seperate Edge Loop and move your mouse
to add some distance between them. Make them comfortable large enough such that they encapsulate the circle. (Fig. 48). Hit left click
to confirm this.
Great. With this important addition done, please go ahead and apply the Knife Projection again. Do you remember how? I won't explain again. At this point,
doing it yourself (of course you can refer earlier to the article) will count as a real experience. You might run into small pitfalls. But I believe I
explained everything as good as possible above. I cannot explain you every single mouse click, every single viewpoint change. So now navigating yourself
will give you some real valuable knowledge that nobody can give you in a magic pill. This is experience.
Fig. 49: Better topology from Knife tool.
With the knife tool applied, you should now see something similar to Fig. 49. Do you see how the lines coming out of the circle are
stopped at the two edge loops that we added? This is better suited to make the topology better.
We want the surrounding area of the circle accomodate the circle shape: Do you see the two weirdly shaped faces, colored blue and red? This is a bad
topology coming out of a circle shape. Somehow we need to make the circle continue in its shape, and seamlessly blend in to the 'boxy' shape of the
rest of the deck.
We also want to create an actual hole, not just a circle shaped surface. We will now do these.
Fig. 50: Face Selection
Fig. 51: Select the two faces and delete them.
Fig. 52: Two weird faces deleted.
Let's switch to Face Select mode in Edit Mode (Fig. 50), on the top left of your viewport (or press 3 in number row, NOT
in the numpad). Now you can
select these weirdly shaped faces and delete them by pressing X to open the delete menu and select Face (Fig.
51). Now both faces around the
circle should be deleted (Fig. 52).
Fig. 53: Edge Loop 1
Fig. 54: Edge Loop 2
Fig. 55: Edge Loop 3
Fig. 56: All Edge Loops selected (also switched back to Vertex Select mode)
Now I want you to add Edge Loops on the 4 faces that surround this circle, right in the middle of them. Do you remember how to add Edge Loops? I will only
give you a pictures about where the edge loops should be at, and you can place them (Fig. 53, Fig. 54, Fig.
55, Fig. 56). Also switch back to Vertex Select mode in Edit mode, on the top left of your viewport (or press 1 in
number row, NOT in numpad).
Fig. 57: Bridge Edge Loops option.
Now, let's remember: How many vertices the circle had? 8, if you remember, we manually set the vertices. Now how many vertices there are surrounding the
circle right now, after we added four edge loops? Also 8! You know what this means? We can now "connect" the vertices on the circle with the vertices on the
deck, and thus join them in a nice geometry (or topology, both terms work in this context).
We could now select two corresponding vertices and press F to Fill between. Every time a 4 verticed empty space appears,
we could
choose those 4 vertices and also press F to fill a face between them. We could do this for all 8 pairs of vertices to fill the
geometry.
But don't do it yet! Read below, as there is a better way:
Since there are 8 vertices to connect to 8 other vertices, Blender can automatically do this for us. This is called "Bridge Edge
Loop" and you can find
it in the Edge -> Bridge Edge Loops menu (Fig. 57).
Fig. 58: Select 16 vertices.
Fig. 59: Edge Loop Select the circle's vertices.
Fig. 60: Geometry is filled beautifully.
So now go ahead and select all the 8+8 = 16 vertices shows in Fig. 58
If you want to select those vertices by hand. But there is also an easy way to select such vertices that are on a "path". It is called "Edge Loop Select"
[g][g].
As shown in Fig. 58, bring your mouse pointer exacty at the center of any two vertices of the first edge loop path (the "outer" 8
vertices). While your mouse pointer is there, hit combination of SHIFT + CTRL + LMB
. You will see that the outer 8 vertices are
now selected. Blender could automatically do this, because you have shown it the edge loop you wanted to select by placing your mouse on an edge of the Edge
Loop.
Go ahead and select the vertices of the Circle the same way (by edge loop selecting, Fig. 59). When all the 16 vertices are selected,
go ahead and click
Edge -> Bridge Edge Loops options as shown in Fig. 57. You will see that the geometry is now filled beautifully (Fig. 60).
Fig. 61: Delete the circle face.
Fig. 62: Delete the Surfaces below the deck.
Before moving on, sdssd select the circle shapes face and delete it (face delete) (Fig. 61).
Now go below the Deck and select the other 2 weirdly shapes faces, plus the circle in the middle, and delete them all (face delete) (Fig. 62).
Fig. 63: Edge Loop select the circle (Shift + CTRL + Left mouse click)
Fig. 64: Choose Snap target to Vertex and turn off 'Align Rotation to Target'
Select the circle shape that remained above the Deck. Now that we deleted the bottom part, I can even see the top from below (Fig.
63).
In the snap settings, change the Snap Target to Vertex and uncheck the 'Align Rotation to Target' option. (Fig. 64).
Fig. 65: Extrude the Circle to the bottom of the deck.
Fig. 66: Bridge Edge Loop below the Deck.
Extrude w?
Extruding a vertex, edge or face duplicated it but keeps it connected to the original vertex, edge or face. It is like ‘extending’ something to add a new vertex, edge or face. It is pretty useful and we will use it a lot when modeling in Blender. Here is official Blender documentation for ‘extruding’.
Now with your circle above the deck selected, hit E to extrude [g][g] these
vertices, then hit Z two
times to lock the extrude
direction on the Z-axis of the Decks orientation, and then hold press CTRL to activate snapping, and
move your
mouse over the one of the vertices of the bottom part of the Deck. (Fig. 65).
In this complex maneuver, you extended the circle above to the down part, in perfect alignment. Now you can select the outer rim (8 outer vertices) of the
bottom part of the deck (together with extended circle part, of course), and hit Edge -> Bridge Edge Loops option again (Fig.
66) .
Fig. 67: Steering Column Hole.
Congratulations. Switch back to Object Mode by pressing Tab and behold your creation: A perfect hole for the steering wheel column
(Fig. 67).
You can delete the circle that we used for Knife Projection now. We don't need it anymore. Well we could have deleted it right after we used it for knife
projection, but yeah. Sorry for all the screenshots that got contaminated by that circle. But you know what, it is good practice for you. When you deal with
a complex scene in Blender, you will often have to navigate your objects and model them while your screen is full random edges going into all kinds of
places. You can isolate object or even parts of objects by pressing the slash / key on your Numpad. This helps to some degree. But
yeah,
practicing these things are important in any case.
Creating the recessed slot at the rear end.
Fig. 68: Go to X-ray and select the vertices at the rear end.
Fig. 69: Focused view on the rear end.
Creating the recessed end is much easier than creating the hole part. You have already learnt quite a bit about modeling. There is a chance that you might
even create the shape yourself. There might be several ways to create that shape. I will show you one of them, which I believe is the simplest.
First let's bring our view to focus the rear end. Let's switch to Edit Mode again. Then, hit shift + Z to
toggle X-ray view, so we can select
all the vertices at the rear end. Now using box select, select all the vertices at the end.
Now press 'dot' . button at the Numpad. This will align your view to center the selected vertices. This button works for any
selected thing in
Blender. If you don't have a Numpad, you can click View -> Frame Selected as shown in Fig. 69
Fig. 70: Edge Loop in the middle of the deck.
Fig. 71: Bring the Edge Loop towards the end of the deck.
Now create an Edge Loop ( CTRL + R) in the middle of the Deck (Fig. 70), and bring
the edge loop towards the end (Fig. 71).
Fig. 72: Edge Slide to align with the reference image.
Fig. 73: Select three vertices in the rear middle of the deck, and delete them (shown in X-ray vision)
Hit Numpad 3 or the X handle in 3D viewport navigation in order to view the model from Right angle. From this angle,
you can
adjust the edge loop more perfectly on where the end of the recessed slot should be according to the reference picture: With the newly added edge loop
already selected, hit CTRL+E and select Edge Slide to adjust the edges according to the
reference picture (Fig.
72)
Select the 3 vertices as shown in Fig. 73. Then delete them.
Fig. 74: Bevel the Edge.
Fig. 75: Select 3 faces along the rear side of the deck and (face) delete them.
As shown in Fig. 74, hit CTRL+B to Bevel the selected edge. This one edge
is now divided in to two edges, kind of.
Adjust the distance between this newly created pair of edges in order to divide the rear face into 3 equal faces like this (rougly).
Select the 3 newly shaped faces in the middle and delete them (Fig. 75).
Fig. 76: Recessed slot opened but its faces are hollow.
Fig. 77: Select 4 vertices and hit F to make a face.
As you can see, the recessed slot is created, but its sides are hollow (Fig. 76). We need to fill those hollow areas with faces.
Select four vertices on the right side of the rear recessed slot and hit F to fill them with a face (Fig.
77)
Fig. 78: Fill middle face of the recessed slot.
Fig. 79: Fill left face of the recessed slot.
Do the same process for the middle face of the recessed slot (Fig. 78) and also for the left side (Fig. 79).
Final Words
Fig. 80: Recessed slot complete.
Fig. 81: Deck finished.
Time to congratulate yourself. You've successfully finished modeling the deck of Chukudu.
If this was your first ever model in Blender, I am really excited for you. Just know that what you have done is not easy. I explained every single step as
detailed as possible without being too theoretical and boring. However I want you to know that the things we did here were not beginner stuff.
Usually beginners play with adding objects and navigating the viewport and call it a day. You, however, not only did that but also learnt a fair amount of
modeling in Blender.
For the next articles and tutorials, I will assume that you already know the things explained in this article. If I tell you to, for example, Bevel an Edge
or extrude a face along Y axis, I will assume that you already know which buttons to press.
Like always, in the video version of my articles, I will always show which buttons I am pressing. This way, you can always orient yourself back to the
article by watching the video tutorial in parallel.
What is next?
I must admit that writing this article took me quite a while (whilst dealing with other life related stuff). I was expecting to finish explaining modeling
entirety of Chukudu in one article. However by the time I was half way finished with the Deck, I realized that everything won't fit into a single article.
So let's call this article "Chukudu Deck modeling" rather than "Chukudu Modeling". The whole thing must turn into a series otherwise I won't be able to get
through this undertaking.
And yet I am haunted by the task ahead of me. I might not create an article for each piece of Chukudu. However I am more than willing to create a video
tutorial for the rest of Chukudu. Creating a video is many folds easier than writing the article.
Personally I prefer article to video when it comes to learning. I believe there are a lot of people like me, this is why, for my content, I am trying to
provide article AND a video. However, like I said, I might skip writing the article for the rest of the Chukudu model. I believe videos will suffice for the
average learner. If you found this article helpful, I believe you are already equipped with basic knowledge of Blender to follow my videos
seamlessly.
So yeah, let's see. Maybe I get a rush of motivation and continue to produce articles as well. Maybe I write article for other topics, i.e. an
article for texturing, lighting etc.
For now, take care.
Footnotes
If you don't have a Numpad on your keyboard (laptop, etc.), then you can also emulate Numpad on your normal 'number row'. Go to
Edit -> Preferences. Then go to Input tab and select the checkbox Emulate Numpad. Alternatively see the next
footnote. ↩
If you can't find it, you must activate it in the Preferences. Go to Edit -> Preferences. Then go to
Viewport tab and select Interactive Navigation in the 3D Viewport Axis option. ↩
You can see that the "Rotation" and "Scale" operations have R and S shortcuts as keys. Why
does "Move" operation have G as a shortcut? Well it stands for the word "Grab" :) ... ↩
Fig. 82: Select Box mode.
When you drag-select with your LMB, if it is not creating a selection box, then maybe you accidentally
changed the selection mode. On the top-left corner of the viewport, there should be a menu of tools (Fig. 82). If you can't see this
menu, hit T. Then
hold drag with your LMB to open the options for selection modes. Select Select Box mode. Now if you hold drag
LMB, you should be seeing a selection box, which will select everything within itself.
↩
You can support my effort by purchasing the Blender assets shown in this article (and video) from my Patreon.
I also offer free and paid add-ons for Blender. You can find them in my
Gumroad page.
I also offer private tutoring on any topic you encounter on this blog. Find more information about my skills and contact data: https://ideasofhakki.com/consulting.html
Intro
In this article, I share with you my experiences to get the most out of your (old) computer in order to
make Blender as efficient as possible.
We will start by configuring default Blender setup in Blender's preferences. Then I will show you some of the
render settings which will in general give you a speed boost. Finally, I will show you some tricks while using
Blender which will help you get very efficient results.
Blender Information
This article uses Blender 4.2.8: Download link to latest
Blender 4.2.x. Supported until July 2026. The knowledge in this article should be applicable to future Blender versions.
How fast is my computer?
Fig. 1: My Thinkpad x230 - On the screen, Chukudu scene is visible.
Open Data Benchmark w?
Open Data Benchmark is a user contributed resource for all possible hardware on which Blender was tested. A certain metric tells us how performant a device is when we run Blender on it. This test is mostly render speed, which is an acceptable way to testing overall performance of the device in question.
I am using an old but legendary laptop called Thinkpad X230. My CPU onboard is
"Intel
i7-3520M (4) @ 3.600GHz". By the standards of 2025, this is a quite outdated CPU. In fact we can check this CPU's
performance against others in Blender
Open Data Benchmark.
For example, look at the screenshot on the right. You will see some of the best CPUs in the world on which
Blender was tested. It appears that the best CPU has a "median score" of 7099. The higher this score is, the better
that CPU is for using Blender.
Curious about my CPU's score? All we have to do is go to the 2nd page in this list. I mean, 2nd page from the
last.
Fig. 2: My CPU on Blender Benchmark - with a median score of 15.
As you can see, my laptop's CPU has a median score of 15. Basically, the best benchmark record on this list is
about 473 times better than my laptop.
As for the GPU, my laptop does have a GPU, but it is a so called "built-in" GPU. In other words, my laptop does
not really have a dedicated GPU seperate from the CPU. This means that, as far as Blender is concerned, my laptop
does not really have a GPU.
"I need a better computer to learn Blender"
No, not really. In this post, I will show you how you can get most out of your old hardware. And yet, needless to
say, you probably already have a better rig than mine. So you really have nothing to worry about. Until I get rich
doing tutorials, I'll continue to use this laptop for all my upcoming tutorials.
I would like to challenge this idea that you need the newest and strongest computers to do anything in Blender.
This is simply not true. Also, a big advantage of having a slower computer is that, you will end up learning a lot
ways to optimize your projects. Having known these ways to work efficiently with Blender will pay off in orders
of magnitude once you work with a powerful computer.
Let's get started, shall we?
Blender Preferences
Fig. 3: Open Blender Preferences
Let's go ahead and open Blender's preferences. Here we will tune down some of the settings of Blender. This will
help Blender consume as little resources as possible.
If you just opened Blender now and are changing the preferences, the settings will be automatically
saved
.
In the preferences, you will see bunch of tabs on the left. Not all of them are relevant for us. I will walk
through the important ones now.
Interface Tab
Fig. 4: The relevant sections in 'Blender Preferences: Interface' bar are highlighted.
In interface settings, turn off the following options:
Region Overlap
Navigation Controls
Anti-Aliasing
Fig. 5: Left: Without Region Overlap Right: With Region Overlap. Notice how on the right side, behind the toolbar is greyed out. This is all the
are that we save from calculating.
Region Overlap
This is going to block out parts of the viewport that are usually hard to see. This way your computer will not
have
to draw these parts of the viewport. Hence, it will save us some performance.
Navigation Controls
I am a fan of using Blender mostly by shortcuts. The Navigation Controls that you see on the top right of your
view
is mostly unnecessary, at least for me. So we will turn it off.
Fig. 6: Navigation controls on the top right of the viewport.
Text Anti-Aliasing
This setting makes the overall text of Blender look "better". Turning this off can give you a small performance
boost. So why not? Besides, I think it makes Blender look retro. I like retro.
Viewport Tab
Fig. 7: Navigation controls on the top right of the viewport.
Now onto the next tab in Blender Preferences. Here we have a quite a bit of stuff to optimize. As the name of the
tab suggests, ("Viewport"), these settings are relevant for where you spent 90% of your time in Blender: The 3D
Viewport. We will turn off every setting that we really don't need, without giving ourselves a "visual
punishment". That is, you will still see your models, textures etc. in original quality. We will only turn down,
what I would call, "cosmetic" quality settings in order to save from performance.
3D Viewport Axes
Fig. 8: 3D viewport axes on the top right of the viewport.
This is yet another navigation tool that we don't really need. Anyways we should be comfortable using the mouse
and keyboard shortcuts. Using a mouse and a keyboard will save you a lot more time and give you a lot more
control. The performance gains for turning is off is probably neglible, but here you go.
Viewport Anti-Aliasing
This is a similar setting to the "text Anti-aliasing" we turned off before. This option smoothes off jagged edges
in the viewport. You can really notice this if you really zoom into your viewport. For little cosmetic gains, this
will actually slow down your viewport. So it is a very good idea to turn off anti-aliasing completely.
Overlay & Edit Mode
This two options is similar to the anti-aliasing, but for wireframe overlays in the viewport. Just turn them off.
Anisotropic Filtering
This is a setting that improves appearance of textures at odd angles, like very low angles. Imagine loooking at a
plate not face on but from the side. This is a performance needy function and I'd advice you to turn it off. Just
remember that these settings are relevant to the viewport. They will not effect how your final renders will look
like.
Fig. 9: Notice how the textures look blurry on the left without the Anisotropic filtering. Source: Cobblestones.JPG: CC BY-SA 3.0
Image Display Method
There are two options: 2D Texture and GLSL. They basically achieve the same thing, except that the former is
solely calculated on the CPU, whereas the latter is calculated using a GPU. GPU calculation is faster for such
things, but my laptop does not really have a dedicated GPU. So my only option is to choose 2D Texture anyways.
If you choose Automatic, Blender will automatically choose the correct option for your computer. So yeah, you may
want to leave it on Automatic. But it is good to know what these options mean.
System Tab
Fig. 10: 3D viewport axes on the top right of the viewport.
Good! We've made so far. This is the final option we need to toggle in Blender Preferences.
It called Max Shader Compilation Subprocesses, and it will tell Blender how many CPU cores it
can use in order to compile the shaders. This is relevant to both when EEVEE is compiling your shaders in the
viewport and when Cycles is compiling the shaders in the viewport and before rendering.
It is a good idea to learn now how many CPU cores there are in your computer. If you recall, my CPU was "Intel
i7-3520M (4) @ 3.600GHz". The number "4" in paranthesis there is how many cores I have.
I have personally set "Max Shader Compilation Subprocesses" to 3, because during shader compilation, I want at
least 1 CPU core to available for other tasks. For example, when I am recording the video tutorial, which by
itself is a heavy task for the computer, I want the resulting video to be as smooth as possible. If you have a
high end computing, it may be hard to imagine what I mean here. But yes, if you are doing a video recording at the
same time when your computer is running a heavy computation, then the video encoder can get overwhelmed and the
resulting recording will sounds like as if you were having a phone call in a tunnel.
If you watch the video version of this blog post, you will actually notice one such instance where my voice is
unintelligible due to the encoder overload. It happens at timestamp 28.34. It is
happening because
rendering process overwhelms the CPU and there is no resource left to capture my voice and encode it.
Was not the magic of computers more noticable when they were a little slower? These days they are so damn fast
that we forget to appreciate all that is happening under the hood. Don't take it for granted.
Awesome, we are now done with the Blender Preferences part. We will continue to review the render settings for
EEVEE and Cycles to get the best results in rendering as fast as possible. We will later review some tips and
tricks that can help you use Blender more efficiently.
Remember to take a break for now.
Fig. 11: A screenshot of Javier removing stickers from a white board. Javier agrees that we should radically remove anything unnecessary... in Blender.
EEVEE & Cycles Render settings
Fig. 12: Properties 'area' is highlighted in Blender window.
In this section of the article, we will review the render settings for EEVEE & Cycles. See the image to see where
the 'properties area' is at. This 'properties' area is the 2nd place where you will spent most of your time in
Blender, right after the 3D viewport.
Fig. 13: Panels in Area Window are highlighted which are important to us.
Notice the symbols on the Properties area stacked on top of each other. These are called 'tabs'. Look at the 2nd
symbol from top, it looks like a camera. This is the render settings tab. If you hover your mouse pointer over
camera symbol, the popup text will read "Render".
Now on the right, you will see bunch of "panels", some of which I highlighted. The highlighted ones are relevant
for us in this article.
Just to recap: The main areas in Blender's interface are called "areas" . Properties Area
has bunch of "tabs", which hold
settings for specific contexts. Each Tab has bunch of "Panels", which organize these settings.
Optimized EEVEE Settings
Let's begin discussing optimum settings for EEVEE then. On the top, make sure that "Render Engine" is EEVEE. Now
the Render tab will show settings for EEVEE.
Now let's go over the highlighted panels one by one:
Sampling
Clamping
Raytracing
Volumes
Simplify
Film
Performance
Please keep in mind that we can write technical books about some of the terms in these panels. I want to explain
the settings for a non-technical artist who would like to use this digital tool (Blender) as efficiently as
possible, without frying their brain.
Sampling
Fig. 14: EEVEE Sampling Panel
Viewport
The higher the "Samples" count is, the less noisy your renders will be. This is more true for Cycles. I found it to
be less relevant for EEVEE.
Temporal Reprojection & Jittered Shadows
Fig. 15: Select the light, go to Object Data for light objects (green light bulb symbol), enable shadows, enable Jitter. Don't do it though, it is not good
for performance.
I personally haven't found much difference either in Performance or appearance when I turn on or off
Temporal Reprojection.
Jittered shadows is a quality option to smooth the appearance of shadows in EEVEE. This has a high
performance impact. Leave it turned off.
In order to see how your shadows look with this option, you also have to select your light object, go to "Object
Data Properties" tab for the light object (green bulb symbol on the tabs stack), and turn on "Jitter" under the
Shadow Panel.
Clamping
Fig. 16: EEVEE Clamping Panel
Clamping is a setting to have a "max" and "min" amount of light intensity and light bouncing for your renders. To
understand this better, imagine this: I am trying to make my room brighter. For that I use one bulb. But it is not
enough. So I keep adding another bulb. It is still not enough, so I end up adding 1000 bulbs to light my room and
now I am satisfied.
However now the Universe has to calculate the light dynamics for a 1000 light sources just for my room. Each like
source shoot photons which has to bounce off from 6 sides of the cube shaped room, which exponentially increase the
calculations. Too much work for the good old Universe.
Clamping helps us put a limit over this insanity. For example, a value of 10 for Surface: Direct
Light setting will "clamp" down the amount of light bounces no matter how many light sources you add.
I'd suggest you to set all the 4 options here to "10". Keep in mind that, you renders might get less noisy for some
complex scenes, and yet the lighting of your scenes may look "odd". For example it may look "dull" with less realism
than you expect, or it may look darker than you expect. In this case, in order to get the most possible quality back
again, you should set Surface: Direct Light setting back to 0, which allows maximum number of light
sources and light bounces.
In short, clamping does not have a direct but an indirect effect on the performance: It will reduce noise
of your scenes in exchange for realism. Since it reduces noise, you can keep your Samples count in the above
settings for a lower value and thus finish renders faster.
Raytracing
Fig. 17: EEVEE Raytracing Panel
We are here to talk about performance and efficiency right? THEN STAY AWAY FROM THIS PANEL. LEAVE THIS BEAST OFF.
But seriously though. This Raytracing options for EEVEE will make your renders in EEVEE almost as realistic as in
Cycles. If you remember, Cycles is a raytracing engine. EEVEE cuts corners in the name of speed and give us
real-time performance. By turning this raytracing panel on, you will sacrifice performance in the name of really
realistic renders in EEVEE.
Volumes
Fig. 18: EEVEE Volumes Panel
Don't do real volume simulations or materials in Blender unless you have a really good computer. You need to fake
smoke instead, if you want to have it in your scenes. This can be a compositing effect or simply a smoke image, or a
smoke "sprite".
We are not doing scientific simulation, we are trying to do Art. So don't be afraid to fake things.
If you really want to use volumes, smoke etc. , then:
Keep Resolution as low as possible: 1:16
Play with the Custom Range to avoid calculating unnecessary distances. Keep the metric range withing where your
smoke is relative to the center point of 3D space.
Simplify
Fig. 19: EEVEE Simplify Panel
Simplify is a good way to, well, simplify your scenes. This is mostly useful when you want to do "bulk
simplifications" in your scenes.
Imagine that you have 10 objects with 6 levels of surface subdivision. You will have millions if not trillions of
triangles under such circumstances. Not good for our poor old laptop with a humble CPU.
Now your computer freezes and you want to turn down the subdivisions, only to turn them back on during rendering,
since you want full quality with trillions of triangles (because you are insane). This means you have to turn down 6
levels of subdivisions for 10 objects, and same steps to turn them back on. Tedious.
This is where Simplify panel comes to rescue. For example you can set Viewport: Max Subdivision to
1, in which case all your existing subdivision modifiers will be set to 1 in bulk. And if you keep Render:
Max Subdivision to 6, then when you render, the subdivisions will automatically be set to as high as you
have set them.
Other options are kind of self explanatory. But for now I will not get into the simulation or Grease Pencil
territory.
Film
Fig. 20: EEVEE Film Panel
Turn Transparency on. This way, in the viewport, the "sky" will be "alpha channelled out", i.e. invisible. Usually
we use this option to make the background transparent. Then we can add a custom background in the compositor.
However, this actually gives us a good performance gain, because once the sky becomes transparent, this is all less
area to get calculated by our poor CPU.
If your sky has a light, i.e. a HDRI, atmospheric effects, or a simply single color light emission, it will still
shine on your scene and have the same exact effect. When you render and you want to see the sky, simply turn this
option off again.
Performance
Fig. 21: EEVEE Performance Panel
Turn off High Quality Normals.
Viewport: Pixel Size is the single most important thing that will absolutely speed up your scenes
in the viewport. Remember to switch to "Material Shading" or "Rendered" Viewport Shading options to see the effect
of this option. They are in the top right corner of your 3D viewport. See the small image on the right for a
screenshot.
Fig. 22: Top right corner of the 3D viewport: Viewport Shading options.
If you set the pixel size to anything lower than 1 (well, think of 2x, 4x and 8x options as a division, not
multiplication), then you will have less pixels to calculate on your viewport. Go ahead and try it. You will see
that your viewport has gotten extremely fast already. The tradeoff? Now everything looks pixelated.
You know, this option can be really useful while you are doing modeling for instance. It may not be very plausible
when you are doing texturing or lighting, since you'd kind of want to see your textures in the best quality as
possible. But yes, now you know this option exists.
At the end of this article, I will show you a trick to render in the viewport really fast. Both for EEVEE and
Cycles. This trick is very much related to theory behind this Viewport: Pixel Size option.
We will now go over the efficient render settings for Cycles. On the top of the area, choose Cycles as the render
engine.
Some of the options are really similar if not the same for EEVEE and Cycles. I will mention them very shortly for
brevity.
Now let's go over the highlighted panels one by one:
Sampling
Clamping
Raytracing
Volumes
Simplify
Film
Performance
Sampling
Fig. 24: Cycles Sampling Panel
As you can see, Sampling panel is way more complex in Cycles than in EEVEE. But don't be afraid, we will change
only one settings. The settings you see on the screenshot to the right are default settings. They are mostly
optimized for performance already. Except for one.
Both the in the Viewport: Max Samples and Render: Max Samples options, there is
an insanely large number, i.e. 1024 and 4096 respectively. This number is how many samples will be calculated in the
Viewport and in the final Renders to finish the rendering. Remember that the more the sample count is, the less
noisy your renders will be. And of course, the more the sample count is, the more time it will take to finish the
calculation.
This insanity is kind of remedied by yet another option: Noise Threshold. You will see that this
option is turned on by default both for the Viewport and the Render panels. Basically, Blender can understand how
much noise is left in an ongoing render, whether in the viewport or in the final render, and then terminate the
rendering process if the noise has been reduced to an acceptable level. This level is the Noise
Threshold, and the default settings is 0.1, as you can observe.
Personally I like having more control over what is going on during my renders. Thus I turn of the Noise Threshold
option altogether. And for a good sample count, believe it or not, I set it to something like 10. Yes, about 10
sample calculations are often more than enough to get an acceptable image. There will be some noise and fireflies
left, but they can be addressed with the Denoiser easily.
Denoisers are a gift to 3D artists in this day and age of Machine Learning (i.e. "AI"). Thanks to denoisers, we can
heuristically calculate how an image is supposed to look like without all the noise. Personally, when I am doing
work in Blender, I turn off denoisers as well. Only when I would like to see how the final renders would look like,
I turn on the denoisers.
When using Denoisers, I also set the Start Sample setting under the Denoiser tabs. This settings
tells Blender when to start Denoising your renders. Remember that in the Viewport, denoising happens after each
sample calculation. Which, of course, slows down each sample calculation noticably. This is why, if I am calculating
10 samples in the viewport, I also set Viewport Denoiser Start Sample to 10. So basically I let
Blender calculate all the samples, and then do the denoising.
When you are ready for final renders, always experiment with the right amount of Sample count + denoiser option
turned on and off. Do not calculate more samples than necessary. For your final renders, this is a crucial option if
you want to save time.
Light Paths
Fig. 25: Cycles Light Paths Panel
As the term "Max Bounces" suggests, this panel is where you can finely tune how many light bounces you want to
calculate for your renders. This is a very good place to speed up your Cycles renders dramatically. Instead
of going over each settings one by one, we can simply use default templates Blender already gives us.
Click to the top right hamburber menu. I highlighted it in the screenshot. For fastest renders, choose "Direct
Light". This results in dimmer scenes, sharper and less complicated shadows. But you will get huge performance
gains.
For a little higher quality renders, choose "Fast Global Illumination". Now you see that the numbers are higher:
There will be more light bounces to calculate. Make sense, no?
For the best quality, as you can guess, you should choose "Full Global Illumination". Personally the differences
are hard to notice between fast and full global illumination. To deliver professional work, you may want to opt in
for Full Global Illumination for your final renders.
Volumes
What was our motto for this blog post?
Stay away from Volumes.
Simplify
Same thing as in EEVEE.
Film
Same thing as in EEVEE.
In the Transparent option, you will also see an additional "Transparent Glass" option. This setting is basically
making the sky transparent, even when you look at it from behind a glass material. I'd suggest you to turn it on as
well.
Performance
Fig. 26: Cycles Light Performance
Here you can also choose from one of the default options by clicking the hamburger menu on top right corner of the
panel. I also highlighted it in the screenshot. Of course I usually go with "Faster Render".
If you want to have fast renders but also want to save from memory (RAM) usage a little bit, then turn on
Acceleration Structure: Use Compact BVH option.
Notice that here we also have the Viewport: Pixel Size option. If you are fine with a little
"pixelated" appearance in the viewport, you will get huge performance gains.
Final Tips & Tricks to speed up render time in the
viewport
Great. You've made it this far. We have set Blender up for the most efficient way possible. Now let's talk about a
quick final tip that can take things to the next level.
Spoiler: Remember the Pixel Size setting? This trick I am going to show you have something to do with the pixel
size setting indirectly. If you can understand the theory behind this trick, you will have a Euroka about
how to use Blender efficiently.
It is very simple actually. Take a look at this screenshot of Blender again:
Fig. 27: Screenshot of Blender with my skateboard project opened.
This screenshot above is how a default area/workspace layout in Blender looks like. The highlighted area is called
"Outliner" and it shows a list of all objects in the scene.
We will change this area to yet another 3D viewport area.
Open the area list menu by clicking the button on the top left corner of the Outliner area. Then select '3D
Viewport' in the menu.
Fig. 28: Select 3D viewport.
Now that area is also another 3D viewport.
Fig. 29: Shading options. The right most option is 'rendered' view.
We will now switch to rendered view in this small area. To do this, you need to select the rendered view button on
the most right end of the green highlighted strip. Since this area is so small, parts of this green strip will be
unvisible. You need to place your mouse cursor on it and scroll, like you scroll on a page. Then the strip will
scroll to let you see other parts of it. Scroll till the right end in order to see the rendered view button.
Fig. 30: Now this area is also a 3D viewport.
We are now rendering in the small area as you can see in the screenshot below. Do it on your computer and tell me
the first thing you notice. Yes, it is rendering really, really fast.
Fig. 31: Rendering in the small area.
How is this possible?
The answer is simple. The smaller the area, the less pixels to calculate. This simple understanding can be applied
in a lot of contexts in Blender. Want to get faster final renders? Render in HD (1280 x 720 pixels) rather than in
4K (3440 x 2160 pixels). Want to preview your new car paint material as quickly as possible? Apply it on a simple
sphere rather than your finished car model.
The idea is all about simplifying things. Simplify things at first while you develop things. Gradually crank up the
quality as you wish to deliver your final work. Until then, work in small windows, preview efficiently with simpler
models and you will save a lot of time.
Do you now understand better the gimmick with the Pixel Size option? Basically when you reduce the
pixel size, you are doing the exact same thing as in rendering in a small window: Reducing the amount of pixels to
calculate!
Final Words
In this blog post we laid out the groundwork in order to work with Blender as efficiently as possible. These tips
are especially relevant if you have a low end computer. But if you have a good computer and you forget the tips and
tricks explained in this blog post, you can choke down even the most powerful commercially available computer.
My next Blender related tutorials will be about actually using Blender. Together we will model, texture and light a
very peculiar wooden scooter from Congo called Chukudu.
If you liked this blog post, you can support me by purchasing assets from my Gumroad or Patreon. Links at the top
of the page. You can also buy private lessons from me. I teach a wide range of subjects from Math & Science to
Western Philosophy, from basic & advanced computer knowledge to Blender. Please contact me to if you are interested.
Bye for now.
Footnotes
It is still a good idea to save the settings to be sure. On the bottom left corner of the
Preferences window, you should see a button named "Save Preferences*". If you don't see it, you should definetely
see a hamburger menu (3 horizontal lines stacked on top of each other), on the same location (bottom left corner).
If you click the hamburger menu, you should see a "Save Preferences" button for sure.↩
Discover a 3D model of the Chukudu, a traditional wooden scooter from Congo. Explore its history, design, and cultural significance.
Show full content
(This page requires Javascript to run properly).
In this article you can find some information about Chukudu and also download a 3D model of it. You can visualize
the 3D model here as well.
This rather primitive looking device can help you support a family by working as a goods carrier. A large Chukudu
can carry up to 1000 kilograms of weight. In a country damaged by one of the most cruel examples of colonial
exploitation in its history, plus modern day wars, sometimes such a vehicle becomes your only option for an honest
work. It is not too expensive that it might be a target for theft, but it is sturdy enough to work as a goods
carrier. It is not an
example of primitiveness but of tenacity and struggle.
Its design and make reminds us of evolution at work: Survival to the fittest selection applied to a vehicle in
Central African socioeconomic sphere.
You might look at this vehicle and think; I can import bunch of motorcyles in this
country and get rich. Well, if you import enough, a badly aligned actor will utilize the vehicles to wage their next
war. In such an equation, sometimes all you can do is produce a vehicle that is good enough for transportation of
goods, but not good enough that you can war with it.
This is what brings us this ingenious vehicle, the Chukudu. I
want to use this vehicle as a subject of my first Blender tutorial on this blog, while at the same time providing
some basic facts about it. I have come across some nasty comments on the Internet about this vehicle, particularly
focusing on comparing it to the stigma that Africa is a primitive place. Not only could this point of view be
farther
from the truth, but it is straight up ignorant and shows that people have no idea what African countries struggle
with, and what they achieve the best. Instead of arguing with random strangers in the Internet, I decided to write
this blog post. This way I could both explain my opinion as detailed as possible, while at the same time showing my
support and solidarity with Congolose people, and those particularly living in Goma, Congo (Democratic Republic of
the Congo).
How does a Chukudu work?
A Chukudu is powered by its human operator. The rider pushes the ground to propel the Chukudu forward, much like any other scooter. When the Chukudu is empty, i.e., when it is not carrying any load, the operator can put their knee in the middle and use their other leg to push forward. To support the operator's knee, there is usually something nailed in the middle of the deck. This can be something as simple as the bottom of a shoe. At the back wheel, there is a piece of thick plastic which functions as a break.
Contrary to popular belief, the suspension spring in the front is actually functional. The top part of the suspension spring can be attached to a nail. This way, the Chukudu actually gains shock absorption capacity when it is heavily loaded.
Fig. 2: A close up image of the shock absorption attachment on the Chukudu. The light orange outline shows the nail on which the suspension spring is attached. The dark orange outline shows the suspension spring itself.
This part of the suspension is thus attached to the steering column. The bottom part of the spring is attached to the deck. Thanks to this basic mechanism, the spring can lift the deck up with its tension. When the Chukudu is heavily loaded, the spring dampens and the deck will be lowered. When the Chukudu moves over rough terrain, bumpy surface etc., the spring will absorb part of the shock and move the deck to correct its movement for the terrain.
A typical heavy load Chukudu will be seen with strings (rubber bands etc.) wrapped all around it. The operator uses these strings to secure their payload. Chukudus can also have a hole drilled in the middle of the their deck. The operator can insert a stick in this hole for extra attachment and to further secure and stabilize payload.
"Africa is living in the stone age"
I was fascinated when I saw this wooden scooter online. I went out to watch every video I could find on the topic. Along the way, I have come across quite a lot of nasty comments on the state of Africa. People often argued that Chukudus' are a perfect example to symbolize not only how poor Africa is, but also how primitive is.
It was very disturbing to read these comments. Why are people making fun of people who work very hard to survive? Chukudu is, without a doubt, a symbol of hard work and tenacity. It is a symbol of perseverance of people who know how to navigate hard times.
We can talk about why someone is poor or why a country is poor all day long. But looking at the life of these poor people and then making fun of their situation simply reflects the poor personality of the commentors. They go on to justify their comments that even if Africa did not have a colonial past of exploitation, they would still be poor and underdeveloped, because of their culture or lack of thereof. They even cite published academic studies (by the colonizers) to justify their claims. Ah, yes. Age old attempt by the colonizers to justify their past and current day exploitations.
If we specifically talk about Congo, I would like to remind everyone that Patrice Lumumba walked this wretched world. He wanted to create an independent Congo whose riches would be put to use to develop the livelihood of Congolese people. What would you guess that happened to him? Assasinated, of course. By hands of the Belgian mercenaries, following the kill order from their Belgian masters. Ah yes. Civilized Europeans doing everything they can to help poor African nations develop. But alas, African culture is preventing that, right? Well, HOW ABOUT you stop murdering African leaders who wishes to rid their nation from the scars of their colonial past? Nope, I guess that is too much to ask for.
Since we are talking about Chukudu's, I would like to tell you when was Chukudu's invented. Let's read from Wikipedia:
"Chukudus first appeared in the 1970s in North Kivu, during the difficult economic times under Mobutu Sese Seko."
Mobutu Sese Seko... Hmm... Where do I remember this name from? Oh, yeah, now I remember. He was the Belgian backed dictator who illegally ended the term of the democratically elected Lumumba and then helped carry out his assasination.
Does not everything become very, very clear once we read the history a little bit? The primitive looking device that is Chukudu was invented because of the hardships brought upon Congolese people by a dictator supported by Belgium and its allies! And now to read on the Internet the clueless comments from westerners who make fun of Congolese people, using their electronic devices whose crucial components were mined in Congo. Let's exploit Africans as hard as we can and then let's make fun of their poverty. I applause this level of absolute moral bankruptcy on my feet.
The Lie that a European invented the Chukudu
Reading a lot of comments on the Internet on Chukudus, I have come across several times the claim that the Chukudu was invented by a European living in Congo. All the people who spread that misinformation cited the Wikipedia article for Chukudus. Of course I went over to Wikipedia to read it myself.
Much to my suprise, I simply could not locate that claim on Wikipedia. So I went to the revision history. And check out what I found out:
Fig. 3: The image shows a screenshot from the revision history of the Chukudu Wikipedia article. The highlighted text reads: 'I removed a claim which appears baseless and had no credible references nor citations. This is most likely a hoax invented by someone with racist sentiments'.
So basically this person edited out the claim that Chukudu was invented by a European. Indeed, there was no citation or a reference of any kind for that claim. This false claim stayed in Wikipedia for up to 2 years. Unfortunately unbothered journalists who use Wikipedia as their main source of information already did the damage and included this misinformation in their articles. For example this article from African Leadership falsely uses this claim. In fact, the magazine's article uses the exact wording from the false claim that once existed on Wikipedia. Great, hard working journalism at work there, lads.
I got more curious. I wanted to find out who in the first place added that claim to Wikipedia. After browsing through the revisions, I found that the false claim was added on 8 March, 2022 by a user whose only contribution to Wikipedia was adding this lie. The person basically opened their mobile phone, registered to Wikipedia, typed out their lie, and never visited Wikipedia again to contribute something. I guess that's a blessing.
That lie basically claims that Chukudus was invented by a Portuguese national who was living in Congo. The Wikipedia username of the person who added that claim is "Lisboa59". I am not saying anything here, just stating the facts that I observed.
Final Words
So this is basically it. In this blog post I wanted to clarify some of the issues revolving around this wooden scooter. It looks simple, but it symbolizes everything wrong about this world. It symbolizes every wrong that we commit against Africa. More importantly, it symbolizes the enduring spirit of African people.
I will use this amazing device as the subject of my first Blender tutorial. The simple shape and low amount of parts of Chukudus make them a perfect and fun candidate to learn and practice Blender. So, we will do exactly that.
Is it possible or worth to learn Blender 2025? Yes, it is worth learning Blender.
Show full content
In this article I will convince you that you can, and that you should learn Blender in 2025.
I will continue to provide Blender content and tutorials on this blog and various other platforms. But first,
let's cast away some doubts about learning Blender.
Perhaps if you are already aware of the possibilities of 3D creation, you won't need any convincing that
learning
3D art and design is so rewarding and fun. When you learn Blender, you can create all sorts of things—from video
game assets to animated films, and from 3D printable models to assets for scientific research and development.
You can model your house with actual dimensions and move around digital furniture to test your house layout,
without
even lifting your finger (well, you only need to lift your finger). You can even use Blender for video and photo
editing.
Here is a non-exhaustive list of professions and tasks that can make use of Blender: 3D Modeling, Sculpting,
3D/2D
Animator, Visual Effects Artist, Game Designer/Developer, Game Asset Creator, Automobile Designer, Architectural
Visualizer, Virtual Reality (VR)/Augmented Reality (AR) Developer, Film and Video production, Physics
Simulation,
Educator or Trainer, Graphic Designer, Concept Artist, Story Board Artist, Advertising and Marketing, Technical
Artist, Programmer, Scientists and Researches from a wide range of studies, Medical Professionals... This list
could
literally go on for a long time.
If you have an interest in bringing your imagination into life in the digital realm, Blender is both an extremely
powerful and cheap - no, excuse me, free - way of doing so.
I heard other 3D software are more powerful
than Blender...
What about other 3D software, and those which cost money?
Aren't they simply better than Blender? To that I would answer: No, not really. There are certain
powerful
features that exist in paid software. But I don't think those features justify the price. These paid
software
programs used to be expensive. Today they are really expensive because most of them have switched
to
subscription models. This means that you can't even buy these software programs. You must pay
monthly
or yearly subscription fees for a program that you won't even be making money off of, or for a program
that
you
won't even be using that often.
If it costs money, it must be good
Another point to consider is the following: You will never hear people who pay for these programs say that
Blender is
actually better. They will defend their paid software harshly, and they have a good reason to do so: They
paid
money
for them. Nobody who pays money for something would admit that their purchase is not worth it. Don't
listen
to people who talk negatively of Blender. Blender is a very capable program. You only need to learn how to
make it work for you.
Remember that Blender is just a tool, like any other 3D software. It is pretty much capable of doing
anything. At
this point in time, it is loaded with a wide range of features. And if a certain feature is missing, you can
extend
its functionality by programming that feature into it. You might say, I am an average Joe, I can't
possibly
code
a new feature to Blender. Yes you can. And it can be a very rewarding experience. We will talk about that in
a
different blog post
as well.
Knowledge is transferrable between programs
Finally, here is another strong argument for why I think learning Blender is worth it: The knowledge you will
learn
in Blender is transferable to other digital creation software. The other way around is also correct. If you
already
know a 3D modeling software, you can transfer a lot of your knowledge to Blender. This is because,
fundamentally,
all 3D modeling software involve some level of vertex, edge and surface manipulation. This is called polygon
modeling. Another type of modeling is sculpting, which Blender supports as well. If you come from another
sculpting
software, then you can use your existing knowledge to use Blender effectively as well.
So choosing Blender is a free and fun way of learning 3D digital creation. Blender shines among
other programs as the most perfect candidate in case you intend to begin your journey
into the 3D world.
In this part, I explained some of my main opinions on why learning Blender is worthwhile. In this next section we will discuss if you need a technical background to learn Blender.
Is it even
possible to learn Blender if I don't have a background in [insert a shiny background]?
Short answer is Yes.
All you need to learn Blender is a passion for it and the ambition to push forward. Let me
tell
you my personal story: I learned English by watching Blender tutorials. My desire to learn Blender was so strong
that not knowing the language in which it was taught did not stop me. I learned the language too. I was
like, 12 or something. Tutorials and lessons in my language at the time were almost non-existent. Even today it
is
very difficult to find up-to-date Blender tutorials in my language. So if you already speak English, you will
find
more tutorials online than you will ever need (even then I am on a mission to create Blender tutorials in
English).
All you need to do is find good tutorials that show you how to create similar things to what you dream of
creating. Follow
these
tutorials and apply them. You will learn along the way. There are good tutorials and then there are bad
tutorials.
The only way to distinguish between them is to just push forward. Along the way you will also develop a good
sense
of which tutorials are good for you and which tutorials don't work for you.
Personally I learnt a lot from early Blender Guru tutorials. Andrew
Price's videos were absolutely amazing.
He
would just show you how to do something step by step. He would not loose much time explaining the theory behind,
because he would not know them himself. This way, in my opinion, he created one of the best tutorials online.
Just
show me how it is done. Show me step by step, without skipping anything. This way after having finished watching
and
applying your tutorial, I will have created the exact scene/model/whatever that you showed in the beginning.
Such
style of tutorials were what clicked for me.
Unfortunately these days Blender Guru and also most tutorials online are more about summarizing how they created
this
or that, without showing every single thing step by step. In these new concept tutorials, a lot of steps are
just
"mentioned" or skipped through quickly. Such tutorials are full of good insight. But in my opinion,
they
are intimidating for the beginners and they do not really help the beginners take off.
Personally, I am planning to create tutorials that speak to the new beginners, as well as seasoned players in the
game. I want to skip over the boring parts like, this button does this, this slider does this, and just jump
straight into creating a scene/model/whatever. I will show every single click that I do, every thought
process
behind a creation. I also want to teach the theory behind things. This way, you will be able to follow my
tutorials step by step, and after having watched a
tutorial and applied everything I did, you will (more or less) get the same exact result. And along the way,
this
should teach you how to use Blender.
At least for me, this was how I learned Blender. Let's discuss the next topic.
Do you need an expensive, powerful
computer/laptop to learn Blender?
No, you don't need a powerful computer to learn blender. Here is my current setup, and the setup
with
which I am planning to write and record all my tutorials:
Laptop: ThinkPad X230
CPU: Intel i7-3520M (4) @ 3.600GHz
GPU: Intel 3rd Gen Core processor Graphics Controller
Memory: 8 GB
Hard-Drive space: 512 GB
Laptop resolution: 1366x768
External monitor: 1920x1080
OS: Archlinux
This laptop is from 2012. Now if you are reading this from your RTX 4090 equipped new desktop computer, you might
cringe over my setup. Can I really compete with your setup?
Well, I cannot, and I don't need to. The point is that, if you want to learn Blender, if you have any setup
similar to mine or better, you can absolutely learn Blender. Along the way, I will not only teach you Blender,
but I
will teach you ways to optimize your Blender scenes to such a degree that it will either make RTX 4080 look like
an
overkill, or it will make such a powerful GPU akin to a
render farm
in
your eyes. Having a strong computer
will
most of the time save you time during the rendering process. This means that when you finish creating a scene or
an
animation, you will have to render out your result. Rendering is a compute intensive step and having a
strong computer can dramatically reduce render times.
Back in the days, I had a desktop that was more or less as powerful as my current laptop listed above. I remember
when I would leave my computer on for the night, or sometimes leave it on for a day or two, to finish out a
single
render.
Well, today I still have a mediocre setup. However, we live in the age of technological wonders. Today, for
example,
we have a renderer in Blender called EEVEE, which takes advantage of real time rendering. Back in the day,
real-time
rendering meant a render quality similar to that of a game like Half-Life (1998). Today,
thanks to EEVEE, you can render in real-time quite realistic scenes with dynamic lighting, realistic materials
and
compositing effects.
Fig. 1: The image shows a screenshot from my gameplay of the Half-Life (1998). Notice the graphics quality compared to a render in EEVEE shown in the
next image.
Fig. 2:“Tiger” by Daniel Bystedt — The image shows a tiger rendered in real-time using
Blender's EEVEE rendering engine.
It is worth noting here that Blender has 2 main renderers. One is EEVEE, which allows you to render things in
real-time. EEVEE works by a bunch of optimizations that allow you to create realistic scenes in real-time. Due
to
these optimizations, the resulting render will not look as realistic as real life. The other rendering engine,
called Cycles, on the other hand, uses real-life physical rules to render your scenes. Cycles is much more
compute
intensive, meaning that it works slower than EEVEE. It won't allow you to have real-time speeds, but it will
give you pretty realistic results. However with the newest hardware like RTX graphics cards, you can also get
pretty
fast renders in Cycles. I have used RTX 2080 Ti for a long time. In that graphics card, I could get
almost
real-time rendering speeds with Cycles (of course that also depends on the complexity of your scene). We will
only
have to wait to see what technological wonders and novelties await for us in the future.
Do not block your progress by fooling yourself into believing that you can't learn Blender unless you have a
strong computer setup. If you think like this, the following will happen to you: You will buy a strong computer,
thinking that you will be able to run any scene in Blender no matter the complexity. Since you won't learn
how
to optimize your scene, you will end up creating horribly complex scenes that will slow down even the strongest
commercial computers. You will be left wondering whether you should have bought something even better. Meanwhile
I
will be chilling with my Thinkpad X230.
Next topic.
Before learning Blender
3D, should you start learning 2D drawing/painting instead?
This one will be a shorter section. This is a question that I have come across quite a few times, including
myself.
Before I explain what I think, please remember that this is solely my personal experience. Everybody might have
a
different experience on this topic.
I think that learning 2D art is absolutely not necessary if you want to learn 3D digital art.
Here
is a confession: I really suck at 2D art and I want to learn it myself. Not that I ever though that if I knew 2D
art, I would be better at 3D art as well. However, I am slowly realizing the power and efficiency that comes
with 2D
art, and I am starting to appreciate its merits. Personally, I am starting to think that knowing 2D art
could potentially help you in your 3D endeavors as well.
Having said that, if you plan to learn 2D art before 3D, I would rather suggest you to learn both at the same
time.
Learning 2D and 3D art does not have to be sequential. One does not come after another. And I must add: Apart
from
the most basic theory, like coloring and lighting, 2D and 3D art are very different from each
other. Having learned both will give you super powers in the art world. However not knowing one or the other is
not
really going to hinder you either.
The reason why I suggest you to learn both at the same time is the following: If you focus on 2D art for a whole
year
and not even open Blender, you will have lost the opportunity of having tinkered around with Blender for a whole
year. In other words: Our brains perform passive learning. Even if you just open Blender and tinker around here
and
there occasionally, meanwhile dedicating most of your time to 2D art, at the end of a year, you will have
learned a
tremendous amount of 3D as well. Opening Blender for the first time can be intimidating. But opening it the 10th
time will not be as intimidating. So don't wait to have opened it the 10th time.
Finally: Blender has a very strong 2D suite built-in as well! It is called grease pencil. If you are interested
in 2D
and 3D art, Blender is the right tool to take you the next level by combining 2D art itself into a 3D scene. It
is
quite mind-blowing, but I must stop here. Otherwise this topic will turn into a long read.
Finally, is it worth
learning any skill at all in the age of 'Artificial Intelligence' (AI)?
I will try to keep this section as short as possible. In another blog post, I would like to discuss this section
more
in depth.
This final question must be bothering all of us. AI news are everywhere all the time and it became unavoidable to
talk about it. If you haven't heard about it, you must be living under a rock. Actually, if you do live
under a
rock, don't come out here because honestly it is getting stressful.
AI, or more specifically Generative AI (GenAI) has been dominating our attention in the last 3-4 years by now.
One of
the most shocking applications of this new technology has bothered artists quite a bit, and for a good reason:
Real
human artists' hard-work, their art pieces has been stolen from the Internet and used to create these GenAI
tools. Perhaps you could say, what is on the internet is free to grab. Surely, but what bothers most people is
that
these GenAI tools are commercialized, and the people behind these new technologies act as if
these
artists' hard work was really created so that they could make these GenAI tools. They act as if the real
artists' work was nothing more than a stepping stone to create this new piece of technology. Furthermore,
they
go on to claim that these image generators can now replace human artists. Big claim. Finally, we have a horde of
people who can't even draw a stick figure go around and claim that they are now "artists", because
they write a prompt and the image generators give them an art piece. These people are indeed an artist as much
as a
customer who orders a burger is a cook.
All these political and bothersome attitudes from people outside of the art world aside, I would like to discuss
technical aspects of this new technology to set your minds at ease.
Because here is what I think:
Generative AI tools do not work AND will never work as good as they are marketed to be,
They cannot replace humans,
And in fact they are going to make human artists' work even more valuable than before.
Finally, I will share my opinion on another crucial point:
What position should artists take against AI, and against intellectual theft that they are exposed to?
Let's talk about each and every claim of mine one by one. Before I begin, here is my disclaimer: You
don't
have to trust my words on this topic. But I feel obliged to tell you that I am a Computer Science major. I know
quite a bit about machine learning (the field of study behind current day "AI"). I have also worked
quite
a bit with linguistic applications and transformers (the tech behind LLMs, aka ChatGPT, Claude, Gemini etc...).
I
also studied western philosophy and pondered on human language, intelligence and consciousness quite a bit.
I am not an expert, and I am surely not trying to sell hope. The following opinions are not my own; I did not
come up
with them, but I support them.
1. "AI" does not work, and will never work as good as it is marketed
All GenAI tools are based on a field of study in Computer Science called "Machine Learning", which
itself is based on Statistics. This is the same technology that has brought us innovations such as Google
Translate, visual recognition systems, speech recognition systems, and even self driving cars, albeit non of
these
technologies are perfect.
These systems "learn" from vast amounts of data, or by getting trained in a simulated environment
which
generates them the data they need, and they end up becoming useful tools. For example, after they are
trained on
some data, they can be used to classify further new data that looks like their training data. Or they can
generate
more data that looks like their training data.
Let's give a practical example on how they work. Imagine that we want to build a machine learning model
that
can tell apart a cat from a dog. In order to build such a magic model, first we need to get plenty of images
of
cats and dogs, and manuall label these images as such. Let's say that now we have 100 labeled
images
for cats and dogs each.
We can now feed these images to a machine learning model. Now it can magically "learn" to associate
the
word "cat" with cat images, and the word "dog" for dog images.
Great! Now we have an "AI" that can tell cats from dogs. But here is the catch: If I show this
"AI" an image of a crocodile, the AI will either guess for a cat or dog! Why? Because it
was
trained to tell you only that. During the training, we did not show the AI what a crocodile looks
like.
So it simply cannot answer you correctly.
This is the reason "AI" does not work as intended and never will. Currently, gigantic and very
sophisticated AI models like ChatGPT are trained on all the text data that exists on the Internet. This is
surely
a great achievement. Now ChatGPT can recycle and spit out the information that already existed in the
Internet.
However, if you ask ChatGPT a question that does not already exist in the Internet, it will simply fail to
give
you the answer you are looking for. ChatGPT sounds smart, but it really is a parrot that is spitting out
what it
already heard.
So these Generative Artificial Intelligence models cannot really come up with something that is
"new".
They cannot come up with "something new", because they do not have the cognitive faculties to do
so.
Machine Learning is based on statistics at the very bottom of it, and we are well aware of the strengths and
limitations of statistics. A statistical model can generalize, can converge and it can extrapolate. But it
cannot
get out of the box in which it was created.
The same goes for AI models that generate "art". Such models will only recycle and generate the
swath of
human Art which was utilized to create the AI. Any new artistic expression remains to be a human endeavour.
2. AI cannot replace humans
This point is already explained above. But I can further explain why.
We still don't know how humans work. We don't know how human intelligence work. We can't even
define
it.
When we say that AI is not intelligent, AI advocates often answer that we must first define intelligence.
Since we
cannot define intelligence, we cannot call AI not intelligent.
However, since we cannot define intelligence, we surely cannot claim that AI has any intelligence at all, or
that
it will continue to improve from its current state, and somehow become more "intelligent".
Honestly I
think it did not age well to keep saying "just wait for the next AI model release" or "just
imagine
what AI can do in 10 years from now".
I do not believe that AI in its current form will exceed humans any time soon. Maybe in some near or far
future we
will invent a new paradigm that will allow us to create human level machine intelligence. But this
is as
hypothetical as it gets. Such hypothetical scenarios are not worth considering. We can start talking about
them
once somebody shows a promising paradigm that would actually help us create human level machine
intelligence. Such
an invention would, in my opinion, create more good than bad. Unfortunately we are nowhere near such a
creation.
I am confident about this. I am confident that the current paradigms (statistical learning) won't exceed
or
even reach human intelligence, because we have seen this before. The promise of inventing AI has been around
before. Since Second World War and the invention of modern computing devices, this AI hype has happened at
least 2
times. You can read this Wikipedia page to learn about the history of "AI Winter".
I am confident that AI in its current form won't exceed humans, because the technical foundation of the
current cutting edge AI tools is nothing new—it is still based on statistics.
There are indications that human brain also uses statistics to think. But I think that we can all agree that
there
is more to it in the human brain. All current AI tools are based solely on statistics. I think this just
won't
be enough to create something that is as good as human, let alone something that is better than humans.
After all, why the hell did we think in the first place that some machine, trained on data generated by
humans
could ever become better than humans?
3. AI will make work done by humans more valuable
In my opinion, as the AI hype will die out and when people realize its limitations, it will make human
artists
even more valuable. When junk art becomes available for everybody, human art will become more in demand.
Without a
doubt, AI art will also find its community and fan base, but it won't affect human artists—if anything,
it may
make them more valuable.
I think a large portion of people will continue to consume AI generated art. I truly feel sorry for these
people
as their eyes and souls will be limited to the local maxima of a soulless machine learning algorithm. They
will
see what they prompted, what they wished to see. I think Art forces the artists to create itself. It is the
Art
that manifests. The artist, who is the messenger, delivers Art through faculties of a human brain.
Those who mistaken machine generated "art" for real Art will therefore move away from the
unpredictability of human ingenuity and venture into the yet early stages of mechanical art. Just as we
observe
that those who consume only junk food develop heart and artery problems, we will also observe that those who
consume only machine-generated art develop problems in their artistic "veins."
Overtime, I believe this will place Art from human hands into a superior position, as it deserves.
What position should artists take against AI, and against intellectual theft that they are exposed to?
If you are following news, you might have heard about the legal battles between artists and AI companies who
stole
their digital paintings to train their commercial AI products.
I absolutely stand with artists. Their work is being used without their participation, consent or even
payment on
their behalf in order to train a machine that generates art similar to the art of human artists. The same
thing
happens with ChatGPT and other chat-based AI models when they looted the entirety of human generated
Internet,
including copyrighted content that humans created. Without even giving original creators any credit, these
large
corporations act as if it is within their right to such things. And then when another company uses their AI
models
to trained the next AI model for a cheaper price, they cry out that their intellectual property has been
stolen.
What a shit show.
If it is within your power, and if your copyrighted content has been violated, by all means, take a fight
against
these looters and take your stance in the correct side of the history.
If not, there are still certain things that you can do to "make it right". First of all, for all
your
work, even if it is for free, i.e. licensed with Creative Common Licenses, do make it compulsory to give
attribution to you. An example of such a license is Attribution 4.0 International.
If you
license
your work under this, anybody can use your work, however they have to give credit to you. Now the
thing
is that, AI models generate text in such an unreliable way, that they fail to give attribute to their
sources.
This means that AI models, if they used your work, will fail to give attribute to your work. This
could
make such AI models illegal to be served to public. I am saying "it could", because whether
something is
illegal or not depends on what the jurisdiction and specific copyright laws say. The important point here is
that
these matters are still being hotly debated. So if you believe this is illegal, then take your position and
defend
your point.
That being said, in order to follow proper rules of conduct, one must always give credit for a work
if
they were not the original creator, even if the license does not require it. If you use somebody's work
without giving them credit, you are essentially committing to plagiarism. I only wish if big corporations
had the
same level of moral code that we individuals have.
Finally, a US court ruled that AI generated content cannot be copyrighted. This means that no "prompt
artist" can really claim that an AI generated art is "theirs". However this still does not
stop
them to put AI generated art on social platforms and try to sell them. What is happening is really ugly and
tasteless, to put it mildly. However, it is happening, and the leechers will continue to leech. As we cannot
change their nature, we must adapt ourselves, at least our stance against these new developments to protect
our
value.
So well yeah. Here it is. I guess there is not much we can do, ha... I will just repeat myself here. There is
really nothing to be afraid of when it comes to machines creating art. People who has never looked at an art
piece
or paid for art are suddenly becoming connoisseurs. If you are an artist, these people would never really
become
part of your network. So in either way, you will still not loose your real network. In fact, you, your work
and
your network will only get more distinguished.
Summary
I believe Blender is a great tool to create 2D/3D digital art.
You don't really need a good computer to get started with Blender.
You can learn 2D art and 3D art together.
Finally, I don't believe that we should be worried about machines replacing humans in the field of Art.
This
will remain to be a human practice. Therefore perhaps there are more reasons to try to be artists today.
Today it
is more important to learn a new skill. Today it is more important to self improve.
So let's learn Blender in 2025.
Footnotes
a render farm is a
collection
of many computers that can render a scene very, very quickly↩
This question arises from a misconception which we will try to clear away in this blog post.
Show full content
This
Physics Stack question poses an interestion question that popped up in my mind as well: in
F
=
m
a
equation, if acceleration is zero, then so is the force? This brings up funny images to the mind: A car moving at high
speed but at constant speed, that weighs 4 tons, would carry no force on it. So.... is it safe to get in
contact with it?
Stack question is also an interesting imagination. To quote directly:
I was just pushing a huge rock which I couldn't move at all. Given that the acceleration was zero as a result of
my efforts, since
F
=
m
a
, doesn't this mean that the force must also have been zero?
This is an interesting question for two reasons. First it points at a common misconception about our daily
understanding of physics. Second, it still does not have an accepted answer on Stack Physics! So I decided to
use this topic for my next blog post :-) ... Let's begin.
It is the Force that matters, not your Mass!
Let's start from a totally different perspective. Say you are looking to buy a machine lifter crane. You need to
move an object weighing about 1.5 tonnes.
So you naturally open the catalogue of your favorite machine lifter supplier. They write, such an such machine
lifter has a load bearing capacity of 2 tonnes. "That's more than 500 kg than my target!" you exclaim
and decide to buy that product.
Fig. 1: Swing it! No actually, please don't.
Now your machine lifter has arrived. You connect your load to your brand new machine lifter and start lifting
the load in the air. When the load is half way up in the air, hanging at the tip of the crane, a rather fun
idea strucks you: What would happen if I start swinging that load in the air? After all, the crane can bear
a load of 500 kg more than your load. What could go wrong?
And you start swinging the 1.5 tonnes of object in the air, hanging at the tip of your crane. By the time the
object swings at about 1.34 m/s2 acceleration, it violently detaches from the crane and falls on the
ground with a big thump.
So what went wrong?
Well, your machine lifter provider lied to you, first of all. Saying that a machine has a load bearing capacity
of "x kg" does not mean anything. What matters is the Newtonian force, the F in
F
=
m
a
that matter. So if you
start swinging a 1500 KG object at about 1.34 m/s2, you reach at about 2000 N force and surpass it
slightly. Assuming that your supplier actually meant that the load bearing capacity was 2000 N, the crane would
fail under more force (consider that this imaginary world is very literal: if they said the crane can hold a
load of 2000 kg, then it will fail at 2001 kg ).
This is a common point that we miss about the perceived mass of an object. We say for example, I weigh
60 kg. But I actually weigh 60 kg x Gravitional constant of Earth, i.e. 9.8 m/s2. Which means I apply
nearly 600 N force onto this chair as I sit on chair. It is my mass that is 60 kg. But my butt will have a
different
pressure on my chair if I am sitting on the chair on the moon. On Earth, as I sit on this chair, I
apply a force of 600 N downwards, because Earth is applying a force on me that pulls me down. And yet I am
stationary relative to my chair because the chair is holding me up.
The fact that a (massive) object is not moving even though we apply force on it means that the net
force on
this object is zero. Since it is zero, the object is not changing its velocity. Since the velocity is not
changing, the
aceleration must be zero. Since there is no acceleration, there is no single Force that prevails over
other acting Forces.
Fig. 2: Skylab space station as it orbits the globe, moving at great speeds with no slowdown. With no
apparent force applied on it, how does it continue its flight at great speeds? The answer is in the question.
Image Credit: NASA (Public Domain via Wikimedia Commons)
This climbing rope can bear a load of 60 kg 💀
Hopefully you now understand why you should NOT go climbing with such a rope! While industrial machine
lifters describe their load bearing capacity in terms of kilograms, the climbing equipment measure their load
bearing capacity in Newtons. The reason for this is that if the climber falls about 10 meters before their rope
stops them, by that time they will already be reaching at a speed of 14.14 m/s. This means the rope has to stop
the climber at the speed of 14 meters per second! This means the rope now has to bear a much larger
Force than when the climber was static.
This is the reason why we should not swing an industrial machine at the tip of a crane! And for the same
reason, you should not go climbing with a rope that is initially designed to hold static loads. Either scenario
can go horribly wrong.
So it is not really a lie that your machine lifter provider describes the load bearing capacity in terms of
kilograms. As they know that you are dealing with static loads, it suffices to describe the capacity in
terms of the weight of the object you will carry. Since these machine operate rather slowly, the
acceleration in those circumstances are negligible.
When you go climbing, you might fall down from the rock before the rope stops you. In that circumstance, Earth's
acceleration constant will have full effect on you and you will speed up considerably. It won't be your
speed that applies a great
force on the rope once it tries to stop your fall. It will be the reaction force that will attempt to
stop your fall suddenly. For example, imagine a very weak but very elastic rope. Say this rope would
break down even if you applied a little force on it. However it is very elastic, and it stretches comfortably when
you pull it. So when you are attached to that rope and you are falling, it will slowly stop your fall,
in such a way that you don't even feel a change in your speed as your fall comes to a halt. Maybe you will be
falling for a few hundred meters as the rope stretches and slowly slows you down. This means that the
negative acceleration with which the elastic rope stops you is very, very low. In such a situtation,
the elastic rope, even though it is weak, will not fail. That being said, DO NOT test my claims...
This post is the short version where I explain how to start a blog for free. The previous long version can be found in the archive of my blog https://ideasofhakki.com/
Show full content
This is the shorter, only instructions based version of the
previous blog post. Please see that blog post if you
want an in depth explanation of the steps below.
This short version is intended for a quick overview for people who already know the details, but needs a quick
reference/refresher of the steps.
Prerequisite knowledge/inventory: An old/retired/unused computer with internet connection with any Linux
distribution installed on it.
Here is a rough overview of the steps:
Create a folder for your website
Install Nginx.
Set up Nginx server configuration for your domain name.
Configure Cloudflare
Configure Cloudflare to securely manage your domain name
Set up Cloudflare Zero Trust Tunnel on your server.
SEO, Remote File Transfer, Blogging
Please see the long post for these steps.
1. Create a folder for your website
Create a folder somewhere in your server computer. Then create a file named index.html in that
folder. Write some simple HTML in it.
Fig. 1: The image shows a very simple html document and how it would look like when viewed on a browser.
2. Install Nginx
Check installation for your specific distribution.
ArchLinux:
sudo pacman -Syu
sudo pacman -S nginx
Ubuntu/Debian:
sudo apt update
sudo apt install nginx -y
2.1. Set up Nginx server configuration for your domain name
Now let's write our server block file for Nginx. This file must be written in
/etc/nginx/sites-available/ folder. You must create a new file in this folder. You can give it the
same name of your domain name (for me, it is named ideasofhakki.com)
Below I will share the final version of this Nginx file in its entirety. However keep it mind that you need to
change some lines for your own specific configuration (obviously). I highlighted these lines. We will download
ssl_certificate and ssl_certificate_key from Cloudflare. You can also get them from
other providers, such as Let's Encrypt.
When we update the server block file, we must check its syntax for correctness and restart the Nginx service.
Check the syntax correctness by:
sudo nginx -t
If everything is OK, restart the Nginx service by:
sudo systemctl restart nginx
We haven't installed the Certificates yet! So the SSL setup listening on port 443 is not going to work! Just
keep following the steps below, and when you are done, remember to restart Nginx. Well, I will remind you again.
3. Set up Cloudflare
3.1. Configure Cloudflare to securely manage your domain name
Add your domain name to Cloudflare
Create a Cloudflare account. Then hit "Add Site" button to add your first website in Cloudflare. You will have
the option to add there an existing Domain Name you bought somewhere else, or buy a new domain name directly
from Cloudflare.
Fig. 2: The image shows a screenshot of Cloudflare's 'add a site' page.
Fig. 3: The image shows a screenshot of Cloudflare's website overview page.
Configure some Cloudflare settings
Go to SSL/TLS tab on the right. In the Overview subtab, you should see below image.
For encryption mode, choose Full (strict).
Fig. 4: The image shows a screenshot of Cloudflare's SSL/TLS overview page.
Next, go to Edge Certificates subtab. Scroll down there and enable Always Use HTTPS
option.
Fig. 5: The image shows a screenshot of Cloudflare's 'Always Use HTTPS' option.
Download Cloudflare Origin Certificates on your server.
Now go to SSL/TLS -> Origin Server subtab. There hit the button Create Certificate.
Generate your Origin Certificates. When you are presented with the so called Private Key, copy it
immediately and save somewhere. This is the only time you will be able to see it.
Fig. 6: The image shows a screenshot of Cloudflare's 'SSL/TLS' > 'Origin Server' page.
Now that you have your Certificate and Private Key, you must place them in the appropriate place in your
server. Usually, this is /etc/ssl/ folder. Inside this folder, you should see certs
and private folder, where your Certificate and Private Key should go respectively. However you can
also just place them inside /etc/ssl/ main folder. Linux does not care. This is what I did to make
it simple, so I can write this tutorial. You can name the files anything you want. I named them
ideasofhakki.com.crt and ideasofhakki.com.key respectively for the Certificate and the
Private Key.
Fig. 7: The image shows a screenshot of my file browser at "/etc/ssl/" folder path, with the Certificate and Private Key placed inside.
Now you should set correct ownership and permission for these two files. Run
Remember to make sure that your Nginx server file we edited earlier matches the certificate and private key
path. Also check your Nginx file syntax validity by:
sudo nginx -t
If everything is OK, then restart the Nginx service and check its status as well:
sudo systemctl restart nginx
sudo systemctl status nginx
3.4 Set up Cloudflare Zero Trust Tunnel on your server.
Install cloudflared on your server. Here are installation
instructions for various operating systems from official Cloudflare docs.
Now launch Zero Trust service from Cloudflare. There, create a
new Tunnel. Choose recommended Cloudflared connector. Now Cloudflare should give you a command that
looks like this:
sudo cloudflared service install eyJhIjoiMT.... # (redacted)
Copy yours and run it. Now your tunnel should be established already.
This also activates the cloudflared service. You should check it, and also enable it (so it starts
automatically if you reboot the server):
sudo systemctl status cloudflared
sudo systemctl enable cloudflared
In Cloudflare, you should now also see this 'Route Traffic' page:
Fig. 8: The image shows a Cloudflare's Zero Trust 'Route Traffic' Rule page.
For Domain field, write your domain. Choose "HTTP" for type. For URL, type "localhost". Save tunnel. If
everything went fine, you should see that your tunnel is "Healthy":
Fig. 9: The image shows a Cloudflare's Tunnels overview from Zero Trust page.
I have two tunnels, one is Down, shown in red. The Healthy tunnel is shown in Green.
The End
This is it! Go to your URL on your browser. Your website should load now.
Please check the long version of this post for extra
steps, such SEO, remote file transfer and blogging instructions.
How to set up a website with nginx, Cloudflare and Linux you will learn. Nginx configuration, Cloudflare Zero Trust Tunnel for Reverse Proxy you will get your hands on. Simple HTML static website blog you will build. Minimum setup for good SEO you will find out. Beauty of Simplicity over Redundant Complexity you will learn to love.
Show full content
Well, this domain name costs me ~10$ per year. The rest of
technologies and services I will talk about are really free.
Prerequisite knowledge/inventory: An old/retired/unused computer with
internet connection with any Linux distribution installed on it.
What you will learn: How to set up nginx for your website or blog,
with SSL security included. How to set up and configure Cloudflare for
your website or blog. How to set up Reverse Proxy with Cloudflare Zero
Trust Tunnel service. And finally, some quick tips on how to get
started on blogging, such as: Search Engine Optimization (SEO) and
organizing your website's code.
In short, I use an old laptop with Archlinux installed on it. It runs
an nginx (read 'engine x') web server. The laptop broadcasts to the
internet via Cloudflare Zero Tunnel, which provides free reverse
proxy, among some other crucial security features. For the blog
itself, I use nothing but plain HTML files. No SSR rendering, no
wordpress, no front-end frameworks or any other bloatware. I never
been happier. Do you want to view this page with better user
interface? Just turn on reader view from your browser. Thanks modern
HTML.
If you know what above terms mean, then you probably already know how
this all works. Still you might find this post enjoyable to read. If
you don't understand what any of the terms above mean, then do not be
afraid. I will explain them as plainly as possible. Also even I don't
know how some of the stuff works! So in some cases I will only give
surface level explanation that won't melt your brain (and mine).
For an actually short version of this long blog post,
see this other post
of mine, where I only go over the steps with no deep explanation
(approximately 10 minutes to read).
Before we talk about how-to part of this post, let's take a step back
and talk about why not wordpress, why no substack? Why not a medium
account? Hell I could make a notion account and get all these blogging
features for free. It even supports AI so I don't even have to blog
myself! Well this post is for people who want to blog
themselves. It is for those people who yearn the old web and
who wants to be a part of a time that is long past. It is for those
people who know the feeling of putting their hand on an old
crusty laptop, feeling the vibrations of this trustworthy machine
which is serving the world the words they have written. Straight out
of their closet. My server is in my bedroom.
Fig. 1: The image shows me holding my server in my hand. It used to be my laptop during student years, hence the if found caption. Otherwise I was afraid it
would get donated to a Museum of Nostalgic Computers.
This above image may be alluring for some people. If you are one of
them, this blog post is for you. The fact that you can hold your
server in your hand. Try to do that for your Azure web services? I can
already hear you say "try to run a machine learning pipeline that
serves millions of people in a fraction of a second, using the server
in your hand?". Well there is nothing special about doing that after
you send buckets of money to Mr Microsoft. But we will talk about
running distributed machine learning pipelines over WebRTC, where each
participant can join a network with a machine that they (can) hold in
their hands. Completely for free (so long you don't charge
them). But thats for another topic. (Go check out
GunDB, which is where I learnt that
idea from!)
So why build your blog from scratch instead of getting any other free
services? Not even Wordpress? Which is open source? There may be many
answers to this question. For me it is simple: Because I can. In 2024,
this undertaking has become surprisingly simple. Alongside this, so
many free/paid alternatives have also made their way into the market.
Do you see a connection there?
At the end this is a question you must answer yourself. Do you want to
be sole owner of your files or are you okay to hand over
your work to someone else's computer? Are you okay that this
someone is a corporation whose sole aim is to make profit,
where you are nothing but a number to them? You can say, who cares?
They give me so many nice features for free. If you think that way, it
may be the case that you don't know that
99% of these cool features are already free. User Interface
is an illusion. It is the selling point of many such companies. They
just build a cool user interface over existing technologies, and
pretend they solve something. Perhaps they do. They solve away the
intriguing curiosity that drives people to learn new things and
improve themselves. They make people go "Oh, look at that new shiny
thing company X is giving us, now I can just use that instead of
learning Y".
Take for example the features of notion:
Fig. 2: The image shows the popup box from notion. By selecting one of these options, you can start adding a specially formatted text. Scrolling down that
list, you can see options to add image, video, audio, tables and so on. Recently they added 'write with AI' option. Of course they did.
What you see above is a nice set of formatted text options. If you
think this is an awesome feature that notion invented, you should
learn HTML now. After that, all that facade will
melt away and the beauty of
simplicity will reveal itself to you. Hell I am writing this
post in pure HTML now. I can add italic text, I can add
bold text, you name it. Audio, images, videos, gifs,
table, they are all native HTML features in 2024 (some of those have
always been).
Fig. 3: The image gif shows me writing the above paragraph in pure, raw, beautiful HTML.
I made a quick gif above so you can see what it looks like. Notice how
instead of typing the full <em> or
<strong> tags, I just type a few letters and hit
enter, and the code editor takes care of the rest. For me, this
reduces notion and all websites alike to bloatware.
But you can collaborate with notion... Yes I know. You can
collaborate in many ways. Unfortunately we are letting these other
websites define how we collaborate.
But notion also connects to all my favorite apps.... You mean
all the other bloatware that you think you need? I will talk about
these topics, but first I want to be able to finish this blog post. So
let's jump right in to the how-to part.
The How-To Part
The steps we will follow for the rest of the post is as follows:
FAQ: Writing a blog post on this huge topic is a
difficult undertaking. I hope to keep this post as short as
possible. This FAQ section should provide you with some extra
information for some topics on which I will only skim through
throughout the post.
I tried to write the above list in some sort of a logical/easiness
order of doing things. However you can follow in any order you want.
Your blog will be up and running under the domain name you bought
once all the steps are complete. The addendum steps are not
required to have your blog up and running per se, but nice to have.
Create a folder where your blog's files will reside in
Done already? No? Just create an empty folder and name it something.
You can name it anything you want, but I suggest that you give it the
same name your domain name is, to keep things simple. My folder is
named ideasofhakki.com. While you are at it, just create
a file named index.html in the folder. You can create a
<p> tag and write 'Hello World' in it. At this
point actually, you can open this file in your favorite browser and
already view how it will look like. This is the flesh of your
website/blog.
Fig. 4: The image shows a very simple html document and how it would look like when viewed on a browser.
Install nginx
Nginx w?
nginx (“engine x”) is an HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server, and mail proxy server.
What is nginx [g][g] and why we need it? Shortly: It is what makes your
server a server. To explain this further, first let's see what happens
when somebody tries to visit our website. At this point we have a
folder with the files of our amazing blog, right? Our good old crusty
computer will serve those folder's contents to the internet.
Let's call this computer our server from now on. The server
will serve the website, if and only if somebody opens their browser,
and types your website's domain name in the URL address box. Well,
maybe they will find your blog from a search engine. But when the user
clicks on that search result, the search engine will automatically
write your website's domain name in the URL address box. At this
point, the browser will request your website's files from the
server. Now comes the point where nginx is useful. In order for your
server to find the relevant files on the hard drive and serve them to
the requested user, it needs a so called HTTP server.
Nginx does exactly that, and a lot
more. But we only need its HTTP server functionalities. This is a very
simple set up. Let's start by making sure that it is installed on our
Linux distribution.
Find how to install nginx on your distribution. Here I list commands
for some popular distributions:
Install nginx on ArchLinux:
sudo pacman -Syu
sudo pacman -S nginx
Install nginx on Ubuntu/Debian:
sudo apt update
sudo apt install nginx -y
Importantly we also need to 'activate' or 'start' nginx. This
activation needs to be done every time you boot your computer. Pretty
much like any program you would open and use. Since this is your
server, hopefully you won't be shutting it down ever or not even
restarting it. However if you do, you don't want to forget to activate
nginx every time. So we can also 'enable' it such that it
activates/starts automatically when the computer starts. Run the
following commands:
You should see something similar to below image. Notice the green
'active (running)' text. If you see this, then you successfully
completed the first part of this step.
Fig. 5: The image shows a screenshot of the terminal window from my server computer, which indicates that nginx is up and running.
Create and configure an nginx server block
Now that we installed nginx, we will tell it where to find the folder
which holds our blog's files and to which domain name to serve it to.
This is accomplished with a so called server block. It is
basically a file that we must create inside nginx's configuration
folder. Then we will type some words in it. Nothing scary, nothing
complicated. We will simply write in this file what is our domain name
and the path to our website's files. That's all. You can do all sorts
of sorcery with nginx. But accomplishing what we want is fairly
simple. So let's do it.
Here is a million dollar visualization of what we need to achieve in this
step. We want to establish the following connection:
Files of your
Website <-> nginx <-> Your domain
name <-> The Internet
In most Linux distributions, nginx configuration folder is in
/etc/nginx/ path. This folder will be protected from any
manipulation (so called write permissions) by the normal user. So you
need to run the commands as a sudo, like when we installed nginx. The
reason I explain this is because, since I told above that all we need
to do is create a file and write some stuff in it, you might be
inclined to do it via your file browser's comfortable GUI. You can
still go to the /etc/nginx/ folder via your file browser
and observe the changes there as you go. However I suggest that we run
commands in the terminal. When you will be writing things in the file,
you also need sudo permission. The most straightforward way to write
files while you are inside the terminal is vi or vim editor (they are
two different editors, your distro probably already has the former
installed). However if you never used it, you will have
troublesexitingit. If you already have a favorite
editor installed on your distro, such as mousepad or visual studio
code, you should be able to open these editors with
sudo command preceding them. Do what you are comfortable
with. I will use mousepad in below examples.
Let's observe below how a typical /etc/nginx/ folder
looks like:
Fig. 6: The image shows a screenshot of the thunar file browser window from my server computer, showing '/etc/nginx' folder.
If you don't already see the folders sites-available and sites-enabled, then also create
them. We will put individual configuration files of our websites inside the sites-available folder.
After you create the sites-available folder, go ahead and open the /etc/nginx/nginx.conf
file. This is the main configuration file of Nginx. In this file, we need to tell Nginx that we are placing individual
site configurations in sites-enabled. Why are we putting the configuration files inside
sites-available but telling Nginx to look at sites-enabled folder? Well if the folder names
are not self-explanatory by themselves, just keep on reading after the image below.
To tell Nginx where our blog's configuration file is, type:
include /etc/nginx/sites-enabled/*;
inside the http block of the main Nginx configuration file, which should be at
/etc/nginx/nginx.conf.
Fig. 7: The image shows a screenshot of the mousepad editor from my server. As you can see we added an 'include' directive inside the 'http' block. Now
Nginx knows that it must include a certain folder which will hold configuration file of our kick-ass blog.
Now we will create our server block file (the configuration file) in the sites-available
folder. After we are done, we will 'link' that file into the
sites-enabled folder. Thanks to this process, nginx allows you to
create server block files in sites-available folder without the fear
of breaking something. When we are ready, we link that file into
sites-enabled folder, which will then be, well, enabled.
Now let's create the file with our sudo command. I will use 'mousepad'
editor:
In the above example I am naming my server block file
'ideasofhakki.com'. Like other things, you can name this file whatever
you want. What matters is its contents. When you run the command with
sudo priviliges, you should see the red warning line in your mousepad
editor. This indicates that you indeed opened the editor with sudo
priviliges.
Fig. 8: The image shows a screenshot of my server block file for 'ideasofhakki.com'. Below you can find copy-pastable text of its contents.
Try to read the contents of the file above and understand yourself.
Below is an explanation of the most important parts. I highlighted the
parts that are a 'block', i.e. they belong together.
listen 80; -> Port 80 is the default network port for
web servers using HTTP. server_name ideasofhakki.com; -> This line tells nginx
the domain name for this server. root /home/hakki/ideasofhakki; -> This line tells
nginx the location of our website's contents.
index index.html; -> This line tells nginx the main
entry point of your website. See next example too. location / {
try_files $uri $uri/ /index.html =404;
}
-> This block describes the entry point of our website.
This is the first page that your users are expected to see when they
first visit your website. By convention we name this file
index.html. We created this file in the first step.
Basically nginx interprets this as such: When users visit the
root address of the website (hence the 'location /' expression), serve them the
index.html file. location = /rss.xml {
add_header Content-Type application/rss+xml;
}
-> This block describes the location of the RSS file. RSS is a
special file that allows users to 'subscribe' to the new posts of your
website. You thought you needed a fancy commercial blog
engine/platform/mailing list service to get your readers subscribed to
you? No you don't need that. Thanks to the RSS file, your users can
get updates when you make a new post. When you write a new post, you
also add a simple entry to the RSS file with the name and the URL of
your post. Your users simply need to connect your website to their
favorite RSS reader. This RSS reader will find your RSS file thanks to
this block. This is it! This way you also can't spam your users. We
haven't yet created an RSS file. I will show you how to do that in
Addendum A.
This is basically it for the server block file. Find below the full
content so you can copy paste and edit it for your needs. You only
need to add your own domain name and path to your website's folder. I
highlighted the relevant parts that you need to change.
Good. Now make sure to save your file. Make sure that this file is in
'/etc/nginx/sites-available' folder. Now we need to link
this file to '/etc/nginx/sites-enabled' folder. Run the
following command:
I highlighted the name of my server block file. Don't copy the code
blindly.
Make sure to write the absolute paths to avoid any mistakes. For
example, in the terminal, you might already be inside the
/etc/nginx/sites-available folder. In this case you might
be inclined to run the following wrong command:
ln -s ideasofhakki.com ../sites-enabled/
This so called 'linking' is actually called a symlink, or
a 'symbolic link'. For a detailed explanation, see
this stackoverflow answer.
So far we created a server block file and we created a symlink in the
/etc/nginx/sites-enabled folder. Now we need to restart
nginx. Before we do that, it is a good practice to ask nginx if
everything is OK. If not, and if you try to restart anyways, it will
throw an error and it will shut down. This means your
server will be shut down. Under such state, all your websites that are
served from this computer will be inaccessible to the users. So run
the following command to see if everything is OK:
sudo nginx -t
You should see the following. Notice the final two lines that says
'syntax is ok' and 'test is successful'. I also get some warnings from
my other files. They are OK. If you see something else other than
'syntax is ok' and 'test is successful', then revise the above steps.
Fig. 9: The image shows a screenshot of my terminal showing that nginx configuration is OK.
Now restart nginx:
sudo systemctl restart nginx
Make sure to check the status of nginx via
systemctl command again:
sudo systemctl status nginx
If you made this far, you can already call yourself a sysadmin.
Or not
. First you need to experience the pain of destroying your servers.
If you do your research well and follow best practices, you will
reduce your chances of experiencing it. Your chances will never be 0.
In the next steps, we will be connecting our domain name to
Cloudflare, implementing security measures with Cloudflare and finally
connect our server to the Cloudflare's Zero Trust Tunnel. While we
implement the security measures, we will modify our server block from
nginx further as well. We are not quite done with configuring nginx.
But if you did the above steps, you should already be more
comfortable. A quick note here: Cloudflare calls our server the
origin server. I will occasionally use that from now
on as well.
Configure Cloudflare to manage your domain name
Thanks to Cloudflare, all the traffic between your server and the
users will be secure and encrypted. Cloudflare will sit between your
server computer and the users (or the attackers) who visit your
website. Cloudflare takes away a huge complexity thanks to this.
In this step we will simply add our domain name to Cloudflare. I will
not go into much details here. The information in this step can change
in the future when Cloudflare user interface changes. This is why it
is best if you refer to Cloudflare's own documentation. Here is a link
to their documentation for
adding a site
(June 2024).
Just open a free account with Cloudflare. Then you should see
somewhere an "add site" button. There you should see a page similar to
this:
Fig. 10: The image shows a screenshot of Cloudflare's 'add a site' page.
Follow the steps there. As you see above, you can enter an existing
domain name or you can buy a new domain name from Cloudflare. Once it
is complete, you should be able to see your domain name's overview
page.
Fig. 11: The image shows a screenshot of Cloudflare's website overview page.
At this point we have two settings to play with. First is that we want
to make sure all traffic is encrypted. Second is that we want to make
sure that when users go to your website via HTTP, they get
automatically redirected to HTTPS (the HTTP Secure).
Once we finish with these settings, we must also place SSL
certificates in our server, or the origin server, as Cloudflare calls
it.
For the first setting, on the left panel, go to
'SSL/TLS'>'Overview' option. There you should see 4 options. Choose
'Full (strict)'. Below is a screenshot of how it should look like.
Keep in mind that without SSL Certificate measures in place,
you will not have a secure setup, regardless of whether you
chose 'Full (strict)' option. So make sure to follow the next steps
with extreme prejudice.
Fig. 12: The image shows a screenshot of Cloudflare's SSL/TLS overview page.
For the second option, under the same 'SSL/TLS' tab, you should see
'Edge Certificates' option. Go there, scroll a bit down. You should
see 'Always Use HTTPS' option. Turn in on. Done. Below is a
screenshot:
Fig. 13: The image shows a screenshot of Cloudflare's 'Always Use HTTPS' option.
Good! We are done with setting up our site specific settings for
Cloudflare. Now we must obtain SSL Certificates from Cloudflare and
place them in our server/origin server.
Remember to take a break.
Download and Install Cloudflare Origin (SSL) Certificates to your Server
In this step we will obtain and place so called SSL Certificates on
our server. These certificates will allow our server and our users to
communicate securely. Without this step, your server and especially
the connection between your server and your users will be susceptible
to a large array of nasty attacks.
An explanation on security: With the above setup,
your users can be sure that they can securely access your website. As
SSL/TLS overview page in Cloudflare suggests, Cloudflare sits between
you and your users. The traffic between Cloudflare and your users will
be secure, so they will see a secure 'lock' icon on their browsers
when they visit your website. However the traffic
between your server and the Cloudflare will not be encyrpted or
secure. In order to achieve full security between your server and
Cloudflare, we will obtain and place SSL Certificates in our server.
The cruciality of this step requires me to write this paragraph. So
let's get started.
Navigate to 'SSL/TLS'>'Origin Server' page. You should see a page
similar to below screenshot. As you can see I already have a
Certificate generated. Go ahead and click 'Create Certificate' to
obtain yours.
Fig. 14: The image shows a screenshot of Cloudflare's 'SSL/TLS' > 'Origin Server' page.
You should now see a page similar to below screenshot. These are the
default options and I haven't changed them. Now hit 'Create'. In the
next page, Cloudflare will present you with 'Origin Certificate' and
'Private Key'. This will be the ONLY TIME that you
see the Private Key. So copy it. If you miss your
opportunity, simply create another one (and I suggest that you revoke
the one you did not use). As you can understand, the Private Key is
very important that it does not fall into the hands of malicious
players. Treat that file with utmost care.
Fig. 15: The image shows a screenshot of Cloudflare's 'Add Certificate' page.
Below is a screenshot of my newly generated Origin Certificate and
Private Key. Make sure that you copy both nicely. If you so wish, you
will be able to see the Origin Certificate again, however Private Key
will not be shown to you again. So copy it now and save somewhere. In
the next steps, we will move these files in appropriate places in our
server. Make sure that copies of the Private Key don't stay somewhere
willy nilly.
So just to be clear with what we are doing, let me repeat again. We are copying this Certificate and Private
Key text that Cloudflare gave to us. We are then pasting the two text in a new file each. You can name the files
anything you want, but by convention you should name them yourdomainname.com.crt and
yourdomainname.com.key respectively for the Certificate and the Private Key. And
remember: You should make sure that these two files only include the text that
we copied. Not even a white empty line should be added before or after this text in the file you create.
Fig. 16: The image shows a screenshot of Cloudflare presenting my Origin Certificate and Private Key
Now in your origin server, you should already have a folder called
/etc/ssl/. This is where your Certificate and Private Key
will go to. There you should also see /etc/ssl/certs/ and
/etc/ssl/private/ folders. Place your Certificate and
Private Key files in /etc/ssl/certs/ and
/etc/ssl/private/ respectively. To move those files
there, you will need sudo priviliges. Call
sudo Your_Favorite_File_Browser to open a sudo priviliged
file browser, like we did earlier with mousepad. I like
Thunar.
Fig. 17: The image shows a screenshot of my file browser at "/etc/ssl/" folder path, with the Certificate and Private Key placed inside.
As you can see red highlighted area, I have named my Certificate and
Private Key as 'domainname.crt/key' and placed them directly in
/etc/ssl folder. You can name them whatever you want.
After finishing this blog post, I will also be tidy and place them
inside certs and private folders
respectively. We will later specify the path of these files in our
nginx server block, such that nginx can use these files to encrypt the
site traffic before serving them. Since we tell the path of these
files to nginx, it is not strictly required to place those files in
their respective folders, other than to keep things tidy. This is the
beauty of Linux (and computers). Nothing is implicit. Everything is
explicitly defined or referred to somewhere. The rest is your taste of
doing things.
Before we move on, remember to set the owner and permission rules for
these files. For more information on this, search Google for
Linux file permissions/ownership.
Simply, run the following commands:
As usual, I am highlighting the parts that you need to change for your
case. The above code sets the ownership and permissions for your
Private Key. Now do the same for your Certificate:
Good. Now let's update nginx server block to actually use the
Certificate and the Private Key. Well, I don't want to bore you more
than necessary, so I will just paste my updated server block in its
entirety and give short explanations. I highlighted the new lines.
Also make sure to write correct paths for your Certificate and Private
Key.
In short, listen 443 ssl Refers to the HTTPS protocol.
The port 443 is the HTTPS port, like port 80 was for HTTP. Our nginx
server block now wants to listen for secure HTTP connections as well.
Can we have a secure connection without our beloved Certificate and
Private Key? Of course not! So next addition is the
ssl_certificate and
ssl_certificate_key lines, which point to the files we
obtain from Cloudflare, respectively. At this point we are done.
However internet suggested me the next three lines as well. They are
apparently making things a little more secure, by covering certain
edge cases. There are supposed to be even more such configuration
options that you may want to use. I personally don't know much about
such stuff, but I am supposed to give you a through overview of things
since I set up myself up to write this blog post. Since this is the
part where we make our website secure, it is justified that I at least
mention some of them:
HSTS (HTTP Strict Transport Security):
Ensures that browsers always connect to your site over HTTPS. DO
NOT do this, because if you remember, we already turned that
option on inside Cloudflare, so it is handled for us. But ever
curious how Cloudflare handles it in the background? Well here
you go:
This is all from me for the security measures. Make sure to do your
research on this topic. Extra security (most of the time) does not
hurt.
Remember to check your nginx file syntax validity by:
sudo nginx -t
If everything is OK, then restart the nginx service and check its
status as well:
sudo systemctl restart nginx
sudo systemctl status nginx
You are getting a hang of it, eh? We have now successfully configured
nginx to use Secure HTTP protocol. We have also configured Cloudflare
to provide us with end-to-end encryption, all the way from user's
browser to our origin server. If you made this far, I actually suggest
that you give a yourself a tap on the shoulder (not yet celebrate).
You have configured nginx server files, dammit. Server configuration
is a whole world on its own. You can go down the rabbit hole pretty
deep, you can be an expert on this topic and get a full-time job. They
will ask you to do nothing but maintain their servers run by nginx or
Apache and so on. You are about knee deep in this swamp land.
We shall now move to the reverse proxy step, where Cloudflare will
also come to rescue us. And then, believe it or not, but your website
will be up and running! Completely secure, blazingly fast, and
breathtakingly beautiful. This is a motherfuckingblog (in reference
to:
motherfuckingwebsite.com
).
Remember to take a break.
Configure Cloudflare Zero Trust Tunnel for Reverse Proxy
Cloudflare started a new service called
'Zero Trust Tunnel'
as of 2021, according to the
Internet
Archive. This service allows us to create a 'reverse proxy' for our server
computer. If you don't understand what this means, you might be
confused about why we need this. After all we set up nginx which
connects the files on your computer to the domain name. And we even
connected our domain name to Cloudflare so that Cloudflare would
manage it. So should not now everything just work? Why do we need an
extra tunnel between the server and the Cloudflare? I will provide
below an FAQ section to answer to some of these questions. Below is an
overview.
You see, we did set up nginx, which serves the website's files when a
request for the specified domain name arrives (for me,
ideasofhakki.com). However, there is a missing link in this puzzle:
How does the request arrive at your server? The request can
only arrive in your server computer, if it can find it in the jungle
of interconnected computers across the globe (i.e. internet). For
that, your computer needs to have an address, like your house
address so you can receive letters. For certain reasons, there is not
a straightforward way to give your server computer an address. It is,
very simply put, quite difficult to obtain one. A so called
reverse proxy attempts to solve this problem by doing the
following: A big company does obtain an address first. Then
you allow that company to inject your computer with specific
identifier. This way, whenever needed, that company can find your
computer (as long as you have very simple internet connection). Then,
when a user visits 'ideasofhakki.com', we let that request to first
arrive at that company's computers. Remember that the company has the
power to actually obtain an address. So the request can find that
company's computers. And since the company knows how to find
your computer, it can conveniently forward that request to
you. From that point on, nginx in your computer takes over and serves
the files back. The files first arrive at the company's computers,
which are then forwarded back to the user. In our case, this company
is Cloudflare. Remember the overview image from Cloudflare's 'SSL/TLS'
page? In this step, we will simply install a software from Cloudflare
on our server. Thanks to this software, a tunnel will be established
between our server and the Cloudflare.
Fig. 18: The image shows a Cloudflare's overview of how it handles the traffic.
Remember the overview image from Cloudflare's 'SSL/TLS' page?
Try to understand that so far we did not tell Cloudflare anything
about our origin server. The above image conceptualizes that
Cloudflare sits between users' browser and our server. However it
might mistakenly lead you to think that Cloudflare is already
connected to our server. It is not. It stills needs a little help so
that it can actually talk to our server. Once this is done, the
traffic will actually start flowing.
So this step fairly simple. Let's see an overview first: In your Linux
distribution, install a software called cloudflared. Here
are
installation
instructions
for various operating systems from official Cloudflare docs. Then we
will launch
Zero Trust service from Cloudflare. There we will create a new
Tunnel. When the tunnel is created,
Cloudflare will give us a convenient command line code that is
generated specifically for our tunnel. When we run that code, the
tunnel will be established. Finally we will create a rule for our
domain name in that tunnel. Let's get started.
When you launch the Zero Trust service, navigate to
Networks > Tunnels. Then you should the screenshot
below.
Fig. 19: The image shows a Cloudflare's Tunnels overview from Zero Trust page.
You can already see that I have two tunnels, one named
desktop and one named tunnelBase. The latter
is the tunnel from my server laptop. Notice that it is 'Healthy',
meaning that the tunnel is up and running. Hit 'Create a tunnel'
button to create yours. You will directed to some steps. You will be
asked to select a connector. Choose recommended 'Cloudflared'
connector. Then give your tunnel a name. Finally you will be given a
piece of command line code which you can run to establish your tunnel.
It should look something like this:
sudo cloudflared service install eyJhIjoiMT.... # (redacted)
Run this command after you make sure that
cloudflared command line program is installed.
Installation instructions link above. If everything went fine, your
tunnel should now be established. You can verify this by the following
command:
sudo systemctl status cloudflared
If not enabled already, I suggest that you enable this
cloudflared service so that it will automatically turn
itself on in case you reboot your server. Like similar to nginx.
Enable it with:
sudo systemctl enable cloudflared
Next page should say 'Route Traffic'. Screenshot below. The 'Domain'
field is a dropdown menu, from which you can choose a domain name that
you already manage with Cloudflare. Under that, you need to choose
'Type' and 'URL'. Choose HTTP and type
localhost respectively. This means that Cloudflare Tunnel
will redirect all requests for ideasofhakki.com to
http://localhost on our server computer. Guess who will
answer the call? The nginx contraption. Now the puzzle is complete,
ladies and gentlemen. Save the tunnel.
Fig. 20: The image shows a Cloudflare's Zero Trust 'Route Traffic' Rule page.
As a final step, we need to let that butterfly we captured earlier and
let it flap its wings only once. The resulting wind will reach the
upper atmosphere and allow a certain optical effect which should
direct some cosmic rays right back at you. Make sure to place your
hardware in the appropriate position so you can target that ray to
change the correct bit on your hard drive. After that, your blog
should be up and running!
Jokes aside, actually go ahead and visit your domain name. You should
see the 'Hello World' page. Or whatever you put in your
index.html file. Congratulations. Send your URL to your
friends and family and let them roast you. None of their criticism
will pass through your thick skin. Because now, you not only have a
website to your name, but you are part of the
self hosted community. You have set up a website
completely from ground up without relying on someone else's paid
service or freemium bloatware. There might be a doubt in your heart
about the involvement of Cloudflare. I assure you, I hold the claims I
made earlier in regards to doing things yourself versus relying on a
ready-made paid/freemium bloatware service. After the Addendums, you
can find FAQ which might hopefully answers some of your questions.
For now, let me tell you this: Due to all the screenshots from
Cloudflare and the buttons and the settings we clicked through, it
might overplay the involvement of Cloudflare. But remember that
Cloudflare sits between the users and your server computer. It still
does not in any way have any rights over your content whatsoever. And
you still managed everything yourself on your end, on your server
computer. This is nothing to sneeze at. If one day Cloudflare stops
any one of the services it has provided us with, you have nothing to
worry about. All you have to do is manage your domain name somewhere
else and find another Reverse Proxy provider. Want to use a different
Certificate and Private Key provider? Use
Let's Encrypt. That's all
Cloudflare has done for us. If you leave Cloudflare, you will still
keep your computer and your files. If you want to run mission critical
software & services this way, I simply suggest you to make this
setup on a number of computers across different domain name managers
and reverse proxy providers. Then you should really have nothing to
worry about.
Now congratulations again. Do celebrate at this point if you so wish.
Next up we have three things to talk about: (1) How to get discovered
on Google or other search engines. Also dubbed SEO step (search engine
optimization). (2) How to blog actually: How to organize your
website's files and so on. Which website development tools to use? (3)
Finally, you don't want to blog with your server computer.
You want the server computer to sit in the closet calmly, doing its
own thing. You want to blog on your personal computer, and when ready,
push the files to the server computer. Let's see a clear overview:
Addendum A: SEO
Addendum B: How to push files to your server from another computer
Addendum C: How to Blog
FAQ
Addendum A: SEO
We will learn: RSS file, Site Map file, Robots.txt file, registration
to Google Search Console.
RSS file allows an RSS client of your users' choice to subscribe to
your website. Thanks to this, when you upload a new post and update
your RSS file, that RSS client will notify your users that you have
published a new post. This mechanism both allows your users to
subscribe to you in a way that they wish, and it prevents you from
spamming them with e-mails and other such methods. For more
information, entertain yourself with
this Stack Overflow answer. An RSS file looks like below:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Ideas of Hakki</title>
<link>https://ideasofhakki.com</link>
<description>My personal blog where I share ideas about tech, philosophy and Blender 3D</description>
<language>en-us</language>
<pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate>
<lastBuildDate>Sun, 16 Jun 2024 00:00:00 +0000</lastBuildDate>
<item>
<title>How to pronounce my name, Hakki</title>
<link>https://ideasofhakki.com/how-to-pronounce-my-name-hakki.html</link>
<description>A short description of how to pronounce my name, Hakki</description>
<pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate>
<guid>https://ideasofhakki.com/how-to-pronounce-my-name-hakki.html</guid>
</item>
<!-- <item>
<title>Title</title>
<link>https://ideasofhakki.com/about</link>
<description>short description </description>
<pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate>
<guid>https://ideasofhakki.com/about</guid>
</item> -->
<!-- Add more items here for each blog post -->
</channel>
</rss>
Notice the item tag which shows my first blog post 'How to pronounce my
name, Hakki'.
Similar to this, add each of your post to the RSS file. Place the
RSS file in the top directory of your blog's folder. This means it
should be in the same level as your index.html file.
That's is for the RSS file. When your user copies your URL (for me,
ideasofhakki.com), and paste it in their favorit RSS reader program,
that program will automatically find your RSS file.
As for the Site Map, it is an even simpler file. It is just a list of
lines where each line is a URL of your website. It can also be more
complicated like the above RSS file. For detailed information, please
see this website.
Site Map helps search engines to get a quick overview of all the
accessible links in your website, so they can index it nicely. Here is
my Site Map as it is right now.
Notice how I included the address of my RSS file and even the Site Map
itself. Put these lines in a file called
sitemap.xml
and
also place it in the top level directory.
Now robots.txt file is also an important one. It includes
more detailed rules to tell visiting search engine bots which links
they can parse/index and which links are forbidden to them. Sometimes
you want to have pages in your website that you want human visitor to
see, but you don't want those pages to appear in the search results.
So you describe such rules here. In this post, I am explaining how to
set up a bare bones blog. So ideally we want every page to be indexed
nicely by the search engines. For more information, please see
this google document.
Below is my robotst.txt file. Also save this file in
your top level directory:
This simple robots.txt file tells that
all bots are allowed to index everything. It also describes
where my Site Map is.
These practices help you get a good SEO score from search engines. It
shows them that your website is accessible, clearly defined and well
organized. These are the bare bones of the SEO work that you must do.
Now as a final step, let's go ahead and tell Google that we are here!
Go to
Google Search Console. Add your property (your website). Follow the instructions there to
add your website. Google will index your website and start showing you
analytics as well. But be aware, the initial indexing and analytics
may take up to 24 hours to take effect. So be patient. After that, go
ahead and try to search your website on Google, using some keywords or
even directly the name of your website. It should show up in the
search results.
In order to clear away any doubts, I share below a screenshot of my
website's folder. So you can observe how I named the files and how I
placed them. The folders hold the images, audio files, videos etc.
that I use in each respective blog post. That's as far as my
organization goes.
Fig. 21: The image shows a screenshot of my website\'s folder.
This is it for the bare bones SEO! Remember to write good, semantic
HTML, use accessibility features for people with disability (notice
how I describe each of my images in great detail even though you can
just look at them? Well some people can't. I want them to feel
welcomed in my blog). Don't try to cross link your websites across one
another to bump up your link score, unless they have valid reasons to
be linked to one another. Search engines can understand scammy
behaviour and punish you for that.
Addendum B: How to push files to your server from another computer
We will learn about: VNC, Rsync (or Grsync), SSH file transfer, FTP
file transfer, other desktop management tools.
So I actually don't type my blog post on the server computer. The
server computer sits alone in the bedroom somewhere, doing its own
thing. I do, however, have a VNC and SSH connection set up to it. I
develop my posts in my personal computer. When I am ready, I send
files over yonder to the bedroom via Grsync, SSH or FTP. My favorite
is Grsync, which is based Rsync. If your server and your personal
computer are within the same network, you can easily transfer data
between by using the IPv4 address that your router gives to your
computer within the local network.
If you wish to send files to your server from a different network
(i.e. server is at home but you are at Starbucks), then you need to
establish an SSH or FTP connection.
I could get into more details on these specific protocols and methods,
but I believe I can't provide a better explanation than what is
already out there. Please search Google for how to set up such things.
Hint: Since you have set up Cloudflare Zero Trust Tunnel to your
server, you can also use this tunnel to set up VNC and SSH
connections, which might be useful. Go search that ahead in Cloudflare
docs.
But why? Well you don't really need to do that, as long as you can
type in your server yourself. Usually we pick very old computers and
repurpose them as servers. Sometimes they don't have a screen or a
keyboard, but they still run just fine. If this is not your case, do
feel free to develop on your server physically. After all, you deserve
this. Because you did not pay money to Azure or AWS just to rent out a
computer you can't touch or even see. However keep in mind that we
don't ever want to risk where the server might shutdown. We want to
keep the server physically protected. This is why it is a good idea to
keep it undisturbed in some corner of your house and establish over
the wire or wireless connection to it. And of course, this way you can
connect to it to update things no matter where you are in the world,
just like it is intended.
Addendum C: How to Blog
Now we have finally arrived at my favorite chapter. This is the
chapter where I roast all the blogging tools and ecosystems and paid
services and all the modern web development tools and
'practices'. Landing on my blog, you might have already had some ideas
about my mentality. 'Oh, this guy does not like CSS'. No, actually I
love CSS. It helps me style and color my writing, resize my images,
create spaces and margins wherever necessary. It helps me
make a cool layout for my footer, header and other stuff.
You see, my friends, I spent a lot of time thinking about how to set
up this blog. I picked up React for its large ecosystem and cool
features for building large dynamic website and Server Side Rendering.
Then I picked up Svelte for it is a compiler that generates optimized
vanilla HTML and Javascript bundles. I was confused, I did not know
what I was doing. I picked up Wordpress as it gave me a nice
boilerplate for a blog which provides a design
that can't go wrong. When I was a kid, I built a static blog
with Mithril. That was pretty cool actually. It is still available on
my gitlab pages account. Check this blog post out from 2019:
hrkck.gitlab.io: What is this blog about.
Reading that blog post waters my eyes. What a kid. Proud of his
static blog on gitlab pages and 'dreaming' about self hosting one
day... Oh my god... That day has come and I haven't even realized it.
This is crazy. I even had margin spaces around my posts. I was just a
kid then. How funny back in 2019 apparently I was still arguing over
the same issues. Trying different front end frameworks to find out the
most simple options... I am happy where I am right now.
Fig. 22: The image shows Ron Swanson from Parks and Recreation show, where he holds a picture of his younger self that looks exactly how he looks like now.
Subtitles read: Oh, look at me. I'm just a kid .
Ah... I really got emotional. You see, friend, that was a blog. This
one is a blog too. This one is a motherfuckingblog. There is a moment
when you code and design enough, then you reach a breaking point. Then
you tell yourself, to hell with the margins and the designs. The color
white includes all the other colors. What matters is what content you
have. What words are you conveying to people. Does it all belong to
you after all? I am not old enough so don't take my word for it. But I
can assure you that people value the content more than how your
website looks. And I assure you that you don't need a blog engine. You
don't need a front end web framework. You don't need server side
rendering (unless you really need to). All you need is a pure,
beautiful HTML file. All you need it to sit down and write in it. All
you need to do is to put that file in your server. You don't need to
watch buildbots churning away digits to produce a static page build
after all. You don't need version control, you don't need to automate
anything. I have been writing this blog post for about a week now.
When I am done, I will spend 5 more minutes to add a link to the main
page, add a link to the RSS file, and add a link to the Site Map. All
manually. I feel good. I feel like I took up farming without even
taking up farming.
Now this is the point where I want to share the code for this blog.
Such that you can copy them as templates and achieve similar results.
Should I post the code down below?
Well, I don't need to. Because every single page is
already in your browser! Are you curious how this page is structured?
Just hit F12 or just right click and hit 'Inspect
Element' or 'View Page Source'. You will see my HTML pages with all
their glory. Since I don't use any weird modern web development tools,
my pages will always remain accessible to the curious. This is the
beauty of simplicity.
I hope you enjoyed this blog post. I hope I could teach you something.
For now, until next time.
FAQ
So why do we need Cloudflare again?
We need Cloudflare so our server computer can speak to the internet.
Cloudflare can do many things. But we essentially took advantage of
its 'reverse proxy'
feature.
Wait, what is 'reverse proxy' again?
A reverse proxy sits between your server and your visitors. It can
be used to accomplished many things, such as load balancing, extra
layer of security and so on. However we are using Cloudflare's
reverse proxy for one purpose only: So our server can speak to the
internet.
But why is it the case that my server can't just speak to the
internet on its own? After all I am connected to the internet via
Wi-Fi/Ethernet cable.
Remember that I said you need an address so you can receive requests
from your visitors? The problem is that you need an IPv4 address.
But you not only need an IPv4 address, but you need a
fixed one. One that does not change over time.
Actually, if you manage to learn your IPv4 address (if you have
one), you can tell it to Cloudflare or to your domain name provider,
and you will be good to go (your server will be horribly exposed to
security risks). But as soon as your IPv4 address changes, your
server will be in dark again. You can actually pay your IPS
(internet service provider) extra money to get a stable IPv4
address.
So we can solve this problem either by getting a stable IPv4
address, or by setting up a reverse proxy. A reverse proxy basically
attempts to locate your server by directly talking to it, and
exposing its traffic to the rest of the internet. This way it does
not matter whether your server changes it IPv4 automatically or not.
Since we gave a direct access to the Cloudflare via a special
identification, Cloudflare will always be able to talk to our
server.
I am afraid that Cloudflare gets access to my computer this way.
Didn't you defend self-hosting and freedom from large
corporations?
Well, yes I did. To answer your first concern: Cloudflare can indeed
send arbitrary requests to your server this way and attempt to get
an answer. Your Linux system's user and file permissions would
protect you to some extent. Also the traffic that you send is
completely encrypted. But we encrypted it using Cloudflare's
certificates? So how can we trust them. Well, you can use
certificates from Let's Encrypt, but then you will be trusting them.
Perhaps you should issue your own certificates. But at this point
you must also declare to the world that your certificates are
actually trustable. Since nobody knows who you are, your website
would appear to be insecure due to the unknown certificates that you
issued.
Security, trust and delegating responsibilities to other known
parties is a difficult decision you must make. Cloudflare in our
case is trustable, because they are well known and they have a
reputation to protect. They would not be trying to steal your data
willy-nilly. Otherwise they would hurt a reputation they have worked
so hard to build.
Still, I believe that the solution I presented here is better than
buying a server from Amazon, Microsoft or Google. In my walkthrough,
I essentially present self-hosted principles. You are the sole owner
of your bare metal and you are the sole owner of the data.
I understand everything, except one thing: Why does it seem so
hard to have a fixed IPv4 address?
I heard about IPv6 adresses, can't I have a fixed IPv6
address?
It is a little more complicated, but yes you could. Would this solve
our problems and even free us from the reverse proxy set up?
Actually you don't want such a stable address, unless you know what
you are doing.
In order to answer this question, we must talk about the kind of the
place that internet really is. Remember when I said that you need to
have an address to receive letters in real life? In that example, we
must have an address and
let our address be known to everybody, such that we can get
requests, right? Well in such a case, you could already easily
imagine some perverts or people with bad intentions to come to your
house and give you trouble. But in real world we still have police
and law and what not. This would deter most of people with bad
intentions to act maliciously.
In the world of internet, there is absolutely no law. Not only there
is no law, there is almost no perfect way to protect yourself from
attacks and hacks. If you would put a server out there in the
internet with a fixed IPv4 address, and not even tell anybody about
it, it would still get hacked at some point. Automatic hacking bots
who scan the entire web casually and attempt known exploits would
eventually get you. It is like wild west out there. This is why we
don't actually want to have a publicly known IP address. This is why
we want reverse proxy.
Are you affiliated with Cloudflare?
No, Cloudflare won't even notice that I am writing this blog post.
They are pretty big already. I use them in this post because their
service is actually good. If they mess things up in the future, I
would not hesitate to switch to
otherreverseproxyproviders.
I have other questions but I can't see them here. How can I ask
you directly?
Please try to reach me to through the links I provide below each of
my posts. I can be reached via e-mail or linkedin. These would be
the fastest options. Find my e-mail in my CV.
Footnotes
(If you do all the steps in this post and something is still not
running, my first suggestion would be to check your firewall settings.
For most distributions, everything should work out of the box. I can't
go into details on this topics as they are outside the scope of this
post.) ↩
Normally a simple file should have the extension of .txt—However this is not a strict requirement. A
sitemap with XML extension is supposed to have the structure of an XML file. We will get into the details
of better Site Maps in a different blog posts. The reason why I am showing it as an XML file is because when
Google indexes my page, it reads this sitemap - txt file, and then sends me an error: No page found as sitemap-txt
... Why is this happening? Because Google cannot understand whether I am pointing to a genuine URL in my blog or
whether I am simply giving an example!
↩
In this post you can learn how to pronounce my name with examples. It is a Turkish name with sounds that can be challenging for Indo-European language speakers.
Show full content
Well, it is actually written as Hakkı. The Turkish 'ı', or the 'close back unrounded vowel' is often
confusing for European language speakers. The
mid central vowel, often
characterized by the sound 'schwa' is as close as it gets to the Turkish vowel 'ı'. At
least when I hear 'schwa', my Turkish ears hear the 'ı'. More accurately it is the sound
we make when we think of a word ('uuhhh').
So here is me pronouncing my name:
Here is me using my name in a sentence. Reads: "Hakki just started a new blog".
So here below is an example of the most common wrong pronounciation of my
name:
Is it too much of a big deal to pronounce my name wrong?
Not at all! See, there are people who will pronounce my name with their unique
accent. For example Turkish people from Thracia does not usually pronounce the
letter "H" in the first place, telling my name as -'akkı-. Likewise, European language
speakers may have difficulties pronouncing this formidable 'ı' sound.
I wish I had reciprocal attitude from people with other languages, such as Chinese. I have
so many Chinese friends whose names I always try to learn and pronounce. However after a
few trials, they usually rule that I am simply not pronouncing it correct. Quite
understandably, when I don't pronounce their name correctly, their ears will hear
something quite off. And yet the reason of my difficulty reading their name does not come
from an issue of exact pronounciation, but my accent, which I acquired through
speaking Turkish phonemes. I am not claiming that I pronounce Chinese names correct. I am just saying that it is
really, really hard for me to do so, unless I enroll for a semester learning Chinese phonetics (I
really should).
Another such example comes to my mind is about the two female names 'Mary' and 'Marie'.
Hearing them sounds almost identical to my ears. The latter is a like an elongated version
of the former. At least this is how I perceive it. And yet a European ear will easily
distinguish them and tell them apart.
This is the reason why I usually don't bother correcting people when they pronounce my
name incorrectly. But well, here is my first post on this blog forever explaining the case
on that matter ! :)