GeistHaus
log in · sign up

https://ideasofhakki.com/rss.xml

rss
39 posts
Polling state
Status active
Last polled May 18, 2026 23:39 UTC
Next poll May 19, 2026 22:17 UTC
Poll interval 86400s
ETag W/"6a040fbf-81ec1"
Last-Modified Wed, 13 May 2026 05:44:31 GMT

Posts

Why Swiss German Requirements Create Barriers in the Job Market
Exploring how Swiss German dialect requirements can function as structural barriers in Swiss job markets, particularly for foreigners.
Show full content
Table of Contents
  1. Introduction
  2. Linguistic Reality: Dialects vs. Standard German
  3. Practical Barriers to Learning Dialects
  4. Counterarguments: Legitimate Reasons for Dialect Requirements
  5. When Dialect Requirements Become Problematic
  6. Practical Strategies for Job Seekers
  7. Conclusion
Introduction Copy link

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 Copy link

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.

A linguistic map of German-speaking Switzerland titled
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:

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 Copy link

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 Copy link

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 Copy link

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 Copy link

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 Copy link

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.

Thanks for reading. Until next time, take care.

Footnotes
  1. Stanford, J.N. (2008), Child dialect acquisition: New perspectives on parent/peer influence. Journal of Sociolinguistics, 12: 567-596. https://doi.org/10.1111/j.1467-9841.2008.00383.x back to reference ↩
https://ideasofhakki.com/why-swiss-german-requirements-create-barriers-in-the-job-market.html
All You Need Is Jekyll
How do I use Jekyll templating engine to power this beautiful blog. Let's dive in.
Show full content
Table of Contents
  1. Intro
  2. Jekyll
  3. Why do we need Jekyll?
  4. How does Jekyll do it?
Intro Copy link

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 Copy link

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? Copy link

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:

Top of
  the page.
Fig. 1: Top of the page.
  1. A link to the 'archive'
  2. A link to the footer of this page
  3. author info
  4. published on info
  5. and so on.

Now look at the footer, and you will see, some common links that I want people to visit, such as:

Footer
  of my page.
Fig. 2: Footer of my page.
  1. again, a link to the archive
  2. My art portfolio
  3. 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 Includes Liquid w? Click to see entry in Glossary page.

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".

The code of my footer.
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.

Click to see entry in Glossary page.

As you can see in Fig. 3, this my footer.html include [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
My post 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.

Click to see entry in Glossary page.

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? Copy link

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.

Alright, Hakki out.


https://ideasofhakki.com/all-you-need-is-jekyll.html
Where to Find Freelancers?
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 Copy link

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:

General Freelance Platforms Premium or Curated Talent Networks Design & Creative Platforms Writing, Editing, and Translation Remote & Specialized Job Boards Local or Task-Based Work Other Platforms Why is it hard to find freelancers? Copy link

Or in other words: Why are there so many options?

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:

Xkcd standards.
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 Copy link

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
  1. This hard term is self explanatory.
https://ideasofhakki.com/where-to-find-freelancers.html
LinkedIn Hates Me
LinkedIn has restricted my account and refuses to unlock it. I will be collecting what I know so far in this blog post.
Show full content
document.addEventListener("DOMContentLoaded", () => { const footerNav = document.querySelector("footer nav"); if (footerNav) { const lists = footerNav.querySelectorAll(".list-links"); if (lists.length >= 3) { lists[2].setAttribute("id", "support-links"); lists[2].classList.add("highlight-target"); } } }); Discuss & Support

You can discuss this article on HackerNews .

You can also support my blogging efforts. Check out the Footer.


Intro Copy link

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 Copy link

So after many months of LinkedIn closing my account, I was finally convinced to attempt to unlock my account yet again.

Linkedin says 'verification already sent'.
Fig. 1: Linkedin says 'verification already sent'.

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):

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. '
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.

LinkedIn says 'We're sorry. There was an error creating your case Please try again.'
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 Copy link

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?

https://ideasofhakki.com/linkedin-hates-me.html
Modeling Chukudu's Steering Column in Blender
In this article, we will model the steering column of Chukudu in Blender. We will learn more fine control of modeling tools in Blender.
Show full content
More Resources, Discuss & Support

Prefer watching the video? Here is a video version of "Modeling Chukudu's Steering Column in Blender".

Discuss this article on Reddit.

BlenderArtists Thread.

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 Copy link
Screenshot of what we did last in the previous article.
Fig. 1: Screenshot of what we did last in the previous article.
A reference image of the steering column.
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!

Blender Information

This article uses Blender 4.2.8: Download link to latest Blender 4.2.x. Supported until July 2026.

Table of Contents
  1. Preparing the scene
  2. Detailing the wheel slot
  3. Modeling the Steering Handlebar
  4. Conclusion
Preparing the Scene Copy link
Rename the Cube to Deck
Fig. 3: Rename the Cube to Deck
Click the eye button and hide the 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.

Add a Cylinder
Fig. 5: Add a Cylinder
Make Cylinder have 8 vertices
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.

Look from right
Fig. 7: Look from right
Move the cylinder to the reference image
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.

Rotate the Cylinder
Fig. 9: Rotate the Cylinder
Scale the Cylinder down
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.

Select the top vertices
Fig. 11: Select the top vertices
Make sure all top vertices are selected.
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).

Extend the column.
Fig. 13: Extend the column.
Align the rotation further.
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.

Scale the top vertices to align with the shape of the reference image.
Fig. 15: Scale the top vertices to align with the shape of the reference image.
Select the bottom vertices.
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.

Extend the bottom vertices down.
Fig. 17: Extend the bottom vertices down.
Extrude the bottom vertices.
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.

Scale the extruded vertices up.
Fig. 19: Scale the extruded vertices up.
Observe the scaled up vertices.
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.

Extrude down until wheel slot.
Fig. 21: Extrude down until wheel slot.
Extrude until the bottom of the 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).

The basic shape of the steering column.
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 Copy link

In this section, we will cut a profile at the bottom to create the slot for the wheel to fit in.

Boolean Modifier w?

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.

Click to see entry in Glossary page.

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.

Move the cursor to the center of bottom vertices.
Fig. 24: Move the cursor to the center of bottom vertices.
Add a new cube at the bottom of the column.
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.

Cube added.
Fig. 26: Cube added.
Make the cube smaller.
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.

Increase the cube's size in Y axis.
Fig. 28: Increase the cube's size in Y axis.
Right side view of the cube.
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.

Increase the height of the cube.
Fig. 30: Increase the height of the cube.
Rotate 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.

Move the cube up a little bit.
Fig. 32: Move the cube up a little bit.
The cube is in the right place and size.
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.

Change display option.
Fig. 34: Change display option.
Cube is now transparent.
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).

Add a boolean modifier for the column.
Fig. 36: Add a boolean modifier for the column.
Select the cube as boolean object.
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.

Boolean modifier is complete.
Fig. 38: Boolean modifier is complete.
The boolean operation in edit mode disappears.
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-destructive Editing w?

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.

Click to see entry in Glossary page.

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.

Apply modifier.
Fig. 40: Apply modifier.
Boolean modifier is applied.
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.

Delete the transparent cube.
Fig. 42: Delete the transparent cube.
Rename the cylinder to steering column.
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".

Unhide the deck to behold your creation.
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 Copy link

In this section, we will model the handle bar of the Chukudu.

Chukudu handlebar.
Fig. 45: Chukudu handlebar.
What finished handlebar is supposed to look like (roughly).
Fig. 46: What finished handlebar is supposed to look like (roughly).
Handlebar reference image.
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
Hide other objects.
Fig. 48: Hide other objects.
Cursor to world origin.
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).

Add a cylinder for steering handlebar.
Fig. 50: Add a cylinder for steering handlebar.
Rotate the handlebar 90 degrees along y axis.
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.

Scale the handlebar down along z and y axises except x axis.
Fig. 52: Scale the handlebar down along z and y axises except x axis.
Handlebar is nice and thin.
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?

Wye pipe shape.
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.

Add a loop cut in the middle.
Fig. 55: Add a loop cut in the middle.
Bevel the loop cut.
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.

Select the top faces on the handlebar.
Fig. 57: Select the top faces on the handlebar.
Make sure that the top faces are selected.
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.

Extrude top faces up a little bit.
Fig. 59: Extrude top faces up a little bit.
Flatten the extruded faces.
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.

Select to sphere option.
Fig. 61: Select to sphere option.
Move your mouse to make a sphere shape.
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.

Add a loop cut in the middle of the joint.
Fig. 63: Add a loop cut in the middle of the joint.
Reselect the vertices.
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.

Reapply the 'to sphere' option.
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.

Subdivision Surface Modifier
Add a subdivision surface modifier.
Fig. 66: Add a subdivision surface modifier.
Subdivision surface modifier added.
Fig. 67: Subdivision surface modifier added.

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.

Add shade smooth option.
Fig. 68: Add shade smooth option.
Shade smoothed.
Fig. 69: Shade smoothed.

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.

Enable on cage option in subdivision surface modifier.
Fig. 70: Enable on cage option in subdivision surface modifier.
Vertices now visible on edit mode as well.
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
Select half of the handlebar.
Fig. 72: Select half of the handlebar.
Delete selected half.
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 mirror modifier.
Fig. 74: Add mirror modifier.
Observe how mirror modifier works.
Fig. 75: Observe how mirror modifier works.

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.

Add a cylinder for handlebar hole.
Fig. 76: Add a cylinder for handlebar hole.
Make the handlebar cylinder smaller.
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.

Make the cylinder transparent.
Fig. 78: Make the cylinder transparent.
Add a boolean modifier for the handlebar and choose the cylinder as object.
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).

Successfully created a hole through the handlebar.
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).

Select both objects.
Fig. 81: Select both objects.
Reverse the handlebar.
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.

Go to front view for the handlebar.
Fig. 83: Go to front view for the handlebar.
Move the handles up.
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.

The sharp end of the handlebar.
Fig. 85: The sharp end of the handlebar.
Move the added loop cut and move it to the tip.
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.

Handlebar reference image.
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.

Select this 3 vertices from the top.
Fig. 88: Select this 3 vertices from the top.
Move the selected edge downwards.
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).

Make the tip narrower.
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.

Lets focus to the center.
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.

Add a loop cut at the bottom.
Fig. 92: Add a loop cut at the bottom.
Add another loop cut upwards.
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.

The center part is now more clearly defined.
Fig. 94: The center part is now more clearly defined.

Now the bottom part is more defined.

Select all the vertices in the middle.
Fig. 95: Select all the vertices in the middle.
Make the center part a little wider.
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).

Select all the vertices in the middle (Fig. 95).

Then, make the selected vertices wider by pressing S and y as shown in Fig. 96.

Add a loop cut to the handle.
Fig. 97: Add a loop cut to the handle.
Bring the loop cut down near to the center and make it smaller.
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).

Finished handlebar model.
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.

The models as they stand.
Fig. 100: The models as they stand.
Select the handlebar and its boolean cutter.
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.

Move and rotate the handlebar.
Fig. 102: Move and rotate the handlebar.
Check the positions from front as well.
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).

Resize the boolean cutter according the steering wheel.
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.

Your chukudu is coming through.
Fig. 105: Your chukudu is coming through.

Your Chukudu is really coming through, innit?

Final outliner view.
Fig. 106: Final outliner view.
Set handlebar as parent to the boolean cutter.
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.

Final outliner view after parenting.
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 Copy link

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.

https://ideasofhakki.com/modeling-chukudus-steering-column.html
Introduction to Modeling in Blender
Learn how to model in Blender by making a Chukudu model.
Show full content
More Resources, Discuss & Support

Prefer watching the video? Here is a video version of "Introduction to Modeling in Blender".

Discuss this article on Reddit.

BlenderNation submission. (coming soon)

BlenderArtists Thread.

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 Copy link
What you will achieve at the end of this article:
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.

Click to see entry in Glossary page.

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.

Let's get started.

Blender Information

This article uses Blender 4.2.8: Download link to latest Blender 4.2.x. Supported until July 2026.

In the previous blog post, we talked about how to run Blender efficiently on old hardware. Check it out.

Table of Contents
  1. Collect Reference Images
  2. Let's Get Started With Blender 3D
  3. Let's Start Modeling in Blender
  4. Detailing the Deck
  5. Final Words
Collect Reference Images Copy link
Trainees are using their thumbs to measure their subject, painting, Edmond Eugène Valton, 1879, Musée des
  Beaux-Arts de la ville de Paris.
Fig. 2: Trainees are using their thumbs to measure their subject, painting, Edmond Eugène Valton, 1879, Musée des Beaux-Arts de la ville de Paris.

Remember that the following advice for the entirety of your 2D/3D creation career: You MUST use reference images.

Sighting w?

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.

Click to see entry in Glossary page.

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.

Reference Images w?

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!

Click to see entry in Glossary page.

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.

Screenshot of my folder where I keep bunch of reference images of Chukudus that I found on the Internet.
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.

Reference images collected in Blender viewport
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.

Pressing a key? w?

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).

Click to see entry in Glossary page.

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 w?

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.

Click to see entry in Glossary page.

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.

Screenshot of MyApps website, where Image Reference Board is opened
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.

Click to see entry in Glossary page. Apps w?

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.

Click to see entry in Glossary page.

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 Copy link

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.

Let's get started with Blender.

Basics: The Viewport w?

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.

Click to see entry in Glossary page.

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
Screenshot of newly opened Blender.
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.

Side view of Chukudu. You can right click and save this image.
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:

  1. Import the reference image
  2. Fix its rotation
  3. Move it "back" a little bit such that it says behind our model.
Add Reference Image in Blender
Fig. 8: Add Reference Image in Blender
Import Reference Image

Press SHIFT + A to open the Add menu and add an Image > Reference Image.

Reference image is added to Blender viewport. It looks a little weird though.
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
Blender's Cursor. Say hi.
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.

Click to see entry in Glossary page.

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.

Reference image is now facing flat.
Fig. 11: Reference image is now facing flat.
Hit X handle in 3D viewport axis.
Fig. 12: Hit X handle in 3D viewport axis.
Right Orthographic View
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)

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. 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
Looking at the Viewport from right angle.
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.

Rotating the Reference image 90 degrees in Z axis. Notice how the blue Z axis was highlighted. Don't forget to hit Enter to confirm rotation
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
Reference image is now behind the cube.
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 Copy link

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.

Select the Deafult Cube.

Transformation Transformation w?

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.

Click to see entry in Glossary page.

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).

Moving the deck down a little bit to align the with the Chukudu's deck on the reference image
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.

Scaling the Deck down along Z axis.
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.

Make the deck longer
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.

Rotate the deck.
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
X-ray button.
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.

Steps to choose a MatCap for the viewport shading.
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.

Click to see entry in Glossary page.

I also want the color of the objects look more distinctive rather than boring gray. Let's apply a MatCap [g] [g] color.

MatCap Clay Brown color is applied.
Fig. 24: MatCap Clay Brown color is applied.
Front of the Deck is short.
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.

Scale the deck to match the reference image.
Fig. 26: Scale the deck to match the reference image.
Scaling the deck down 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.

Edit Mode
Edit Mode
Fig. 28: Edit Mode
Modes w?

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.

Click to see entry in Glossary page.

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).

Select the rear end vertices of the deck.
Fig. 29: Select the rear end vertices of the deck.
Enlarge the vertices at the rear end 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
Corner angle.
Fig. 31: Corner angle.
Scale the deck down X axis.
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 Copy link

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
A circle is added at cursor's location.
Fig. 33: A circle is added at cursor's location. Notice the 'Add Circle' panel that popped up at the bottom left corner.
Change the 'Vertices' count to 8.
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.

We are now looking at the circle from top view.
Fig. 35: We are now looking at the circle from top view.
Moving the circle down to the tip of the deck.
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.

Sizing the circle down.
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 )

The Circle is in front of the deck. Let's adjut it further
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
Snapping tool settings.
Fig. 39: Snapping tool settings.
Circle is snapping to the side of the deck.
Fig. 40: Circle is snapping to the side of the deck.
Circle is NOT snapping to the top 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 w?

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.

Click to see entry in Glossary page.

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.

Circle IS perfectly snapping.
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.

The Deck and the Circle selected together.
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)

Knife Projection w?

Knife Projections allows for vertices of an object to be transferred onto another. Please see the excellent entry in official Blender documentation.

Click to see entry in Glossary page.

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:

  1. 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).
  2. 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 )
Circle has cut the Deck.
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!

Adding an Edge Loop
Fig. 45: Adding an Edge Loop
Move the Edge Loop towards the center of the circle.
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.

Click to see entry in Glossary page.

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).

Edge Slide to align the edge loop to the center of the circle.
Fig. 47: Move the Edge Loop towards the center of the circle.
Edge Bevel to cover 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.

Better topology from Knife tool.
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.

Face Selection
Fig. 50: Face Selection
Select the two faces and delete them.
Fig. 51: Select the two faces and delete them.
Two weird faces deleted.
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).

Edge Loop 1
Fig. 53: Edge Loop 1
Edge Loop 2
Fig. 54: Edge Loop 2
Edge Loop 3
Fig. 55: Edge Loop 3
All Edge Loops selected (also switched back to Vertex Select mode)
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).

Bridge Edge Loops option.
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).

Select 16 vertices.
Fig. 58: Select 16 vertices.
Edge Loop Select the circle's vertices.
Fig. 59: Edge Loop Select the circle's vertices.
Geometry is filled beautifully.
Fig. 60: Geometry is filled beautifully.

So now go ahead and select all the 8+8 = 16 vertices shows in Fig. 58

Edge Loop Select w?

Selecting an Edge Loop: You can read this official Blender documentation article which talks about ‘Selecting (Edge) Loops’.

Click to see entry in Glossary page.

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).

Delete the circle face.
Fig. 61: Delete the circle face.
Delete the Surfaces below the deck.
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).

Edge Loop select the circle (Shift + CTRL + Left mouse click)
Fig. 63: Edge Loop select the circle (Shift + CTRL + Left mouse click)
Choose Snap target to Vertex and turn off 'Align Rotation to Target'
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).

Extrude the Circle to the bottom of the deck.
Fig. 65: Extrude the Circle to the bottom of the deck.
Bridge Edge Loop below 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’.

Click to see entry in Glossary page.

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) .

Steering Column Hole.
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.
Go to X-ray and select the vertices at the rear end.
Fig. 68: Go to X-ray and select the vertices at the rear end.
Focused view on 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

Edge Loop in the middle of the deck.
Fig. 70: Edge Loop in the middle of the deck.
Bring the Edge Loop towards the end 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).

Edge Slide to align with the reference image.
Fig. 72: Edge Slide to align with the reference image.
Select three vertices in the rear middle of the deck, and delete them (shown in X-ray vision)
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.

Bevel the Edge.
Fig. 74: Bevel the Edge.
Select 3 faces along the rear side of the deck and (face) delete them.
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).

Recessed slot opened but its faces are hollow.
Fig. 76: Recessed slot opened but its faces are hollow.
Select 4 vertices and hit F to make a face.
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)

Fill middle face of the recessed slot.
Fig. 78: Fill middle face of the recessed slot.
Fill left 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 Copy link
Recessed slot complete.
Fig. 80: Recessed slot complete.
Deck finished.
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
  1. 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.
  2. 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.
  3. 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" :) ...
  4. Select Box mode.
    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.

https://ideasofhakki.com/introduction-to-modeling-in-blender.html
How to make Blender run faster
Short description of this post
Show full content
More Resources, Discuss & Support

Prefer watching the video? Here is a video version of "How to make Blender run faster".

Discuss this article on Reddit.

BlenderNation submission.

BlenderArtists Thread.

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 Copy link

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.

Table of Contents
  1. How fast is my computer?
  2. "I need a better computer to learn Blender"
  3. Blender Preferences
  4. EEVEE & Cycles Render settings
  5. Final Tips & Tricks to speed up render time in the viewport
  6. Final Words
How fast is my computer? Copy link
My Thinkpad x230 - On the screen, Chukudu scene is visible
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.

Click to see entry in Glossary page.

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.

My CPU on Blender Benchmark - with a median score of 15
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" Copy link

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 Copy link
Open 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
The relevant sections in 'Blender Preferences: Interface' bar are highlighted.
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
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.
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.

Navigation controls on the top right of the viewport.
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
Navigation controls on the top right of the viewport.
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
3D viewport axes on the top right of the viewport.
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.

Anisotropic filtering en
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
3D viewport axes on the top right of the viewport.
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.

A screenshot of Javier removing stickers from a white board. Javier agrees that we should radically remove anything unnecessary... in Blender.
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 Copy link
Properties 'area' is highlighted in Blender window.
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.

Panels in Area Window are highlighted which are important to us.
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
EEVEE Sampling Panel
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

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.
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
EEVEE Clamping Panel
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
EEVEE Raytracing Panel
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
EEVEE Volumes Panel
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
EEVEE Simplify Panel
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
EEVEE Film Panel
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
EEVEE Performance Panel
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.

Top right corner of the 3D viewport: Viewport Shading options.
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.

Optimized Cycles Settings
Cycles render settings.
Fig. 23: Cycles render settings.

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
Cycles Sampling Panel
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
Cycles Light Paths Panel
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
Cycles Light 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 Copy link

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:

Screenshot of Blender with my skateboard project opened.
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.

Select 3D viewport.
Fig. 28: Select 3D viewport.

Now that area is also another 3D viewport.

Shading options. The right most option is 'rendered' view.
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.

Now this area is also a 3D viewport.
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.

Rendering in the small area.
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 Copy link

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
  1. 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.
https://ideasofhakki.com/how-to-run-blender-faster.html
Chukudu, the Wooden Makeshift Scooter
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.

Tshukudu in Goma by MONUSCO/Clara Padovan, licensed under CC BY-SA 2.0. Original via Wikimedia Commons.
Fig. 1: Tshukudu in Goma by MONUSCO/Clara Padovan, licensed under CC BY-SA 2.0 . Original via Wikimedia Commons.

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? Copy link

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.

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.
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" Copy link

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 Copy link

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:

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'.
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 Copy link

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.

Here are the tutorials made so far.

  1. Introduction to Modeling in Blender
  2. Modeling Chukudu's Steering Column in Blender

Thanks for reading and see you next time!

The image shows a render of the Chukudu on sunset. Made by me with Blender.
Fig. 4: The image shows a render of the Chukudu on sunset. Made by me with Blender.
https://ideasofhakki.com/chukudu-the-wooden-makeshift-scooter.html
Make 2025 The Year You Learn Blender
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.

I will answer these questions today.

Is it worth learning Blender? Copy link

Short answer is, yes.

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... Copy link

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]? Copy link

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? Copy link

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.

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. 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.
“Tiger” by Daniel Bystedt — The image shows a tiger rendered in real-time using Blender's EEVEE rendering engine.
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? Copy link

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)? Copy link

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:

  1. Generative AI tools do not work AND will never work as good as they are marketed to be,
  2. They cannot replace humans,
  3. 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 Copy link

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
  1. a render farm is a collection of many computers that can render a scene very, very quickly
https://ideasofhakki.com/make-2025-the-year-you-learn-blender.html
f = ma: Does Mass Experience Zero Force When It Has No Acceleration?
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! Copy link

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.

Swing it! No actually, please don't.
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.

Now if you go read the first answer on that Physics Stack question, it will make more sense.

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.

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)
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 💀 Copy link

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...

Thanks for reading.

https://ideasofhakki.com/zero-acceleration-no-force-confusion.html
How to start a kick-ass blog for free, short version
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:

  1. Create a folder for your website
  2. Install Nginx.
    • Set up Nginx server configuration for your domain name.
  3. Configure Cloudflare
    • Configure Cloudflare to securely manage your domain name
    • Set up Cloudflare Zero Trust Tunnel on your server.
  4. SEO, Remote File Transfer, Blogging
    • Please see the long post for these steps.
1. Create a folder for your website Copy link

Create a folder somewhere in your server computer. Then create a file named index.html in that folder. Write some simple HTML in it.

The image shows a very simple html document and how it would look like when viewed on a browser.
Fig. 1: The image shows a very simple html document and how it would look like when viewed on a browser.
2. Install Nginx Copy link

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

Start (activate) and enable Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Check if Nginx service is running properly:

sudo systemctl status nginx

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.

server {
listen 80;
listen 443 ssl;
server_name ideasofhakki.com;

ssl_certificate     /etc/ssl/ideasofhakki.com.crt;
ssl_certificate_key /etc/ssl/ideasofhakki.com.key;

ssl_protocols SSLv3 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;

root /home/hakki/ideasofhakki;
index index.html;

location / {
try_files $uri $uri/ =404;
}

location = /rss.xml {
add_header Content-Type application/rss+xml;
}
}      

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 Copy link 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.

The image shows a screenshot of Cloudflare's 'add a site' page.
Fig. 2: The image shows a screenshot of Cloudflare's 'add a site' page.
The image shows a screenshot of Cloudflare's website overview 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).

The image shows a screenshot of Cloudflare's SSL/TLS overview page.
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.

The image shows a screenshot of Cloudflare's '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.

The image shows a screenshot of Cloudflare's 'SSL/TLS' > 'Origin Server' page.
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.

The image shows a screenshot of my file browser at '/etc/ssl/' folder path, with the Certificate and Private Key placed inside.
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

sudo chown root:root /etc/ssl/certs/your_certificate.crt 
sudo chmod 644 /etc/ssl/certs/your_certificate.crt

And for the Private Key:

sudo chown root:root /etc/ssl/private/your_private_key.key
sudo chmod 600 /etc/ssl/private/your_private_key.key

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:

The image shows a Cloudflare's Zero Trust 'Route Traffic' Rule 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":

The image shows a Cloudflare's Tunnels overview from Zero Trust page.
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.

https://ideasofhakki.com/how-to-start-a-kick-ass-blog-for-free-short-version.html
Extensions
How to start a kick-ass blog for free, with nginx, Cloudflare and Linux
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).

Click here to skip to the How-To part.

The Why Copy link

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.

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.
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:

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.
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).

The image gif shows me writing the above paragraph in pure, raw, beautiful HTML.
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 Copy link

The steps we will follow for the rest of the post is as follows:

  • Addendum A: Basic Search Engine Optimization (SEO) steps for discoverability on Google (and other search engines)
  • Addendum B: How to organize and write your blog on your actively used personal computer and push the files to your server computer, and why
  • Addendum C: How to Blog
  • 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 Copy link

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.

The image shows a very simple html document and how it would look like when viewed on a browser.
Fig. 4: The image shows a very simple html document and how it would look like when viewed on a browser.
Install nginx Copy link Nginx w?

nginx (“engine x”) is an HTTP web server, reverse proxy, content cache, load balancer, TCP/UDP proxy server, and mail proxy server.

Click to see entry in Glossary page.

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:

sudo systemctl start nginx
sudo systemctl enable nginx

You should now check the status of nginx. Run:

sudo systemctl status nginx

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.

The image shows a screenshot of the terminal window from my server computer, which indicates that nginx is up and running.
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 Copy link

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 troubles exiting it. 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:

The image shows a screenshot of the thunar file browser window from my server computer, showing '/etc/nginx' folder.
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.

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.
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:

sudo mousepad /etc/nginx/sites-available/ideasofhakki.com 

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.

The image shows a screenshot of my server block file for 'ideasofhakki.com'. Below you can find copy-pastable text of its contents.
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.

server { 
  listen 80; 
  server_name ideasofhakki.com; 

  location = /favicon.ico { access_log off; log_not_found off; } 

  root /home/hakki/ideasofhakki; 
  index index.html; 

  location /  { 
    try_files $uri $uri/ /index.html =404; 
  } 

  location = /rss.xml {  
    add_header Content-Type application/rss+xml; 
  } 
}

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:

ln -s /etc/nginx/sites-available/ideasofhakki.com /etc/nginx/sites-enabled/

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.

The image shows a screenshot of my terminal showing that nginx configuration is OK.
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 Copy link

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:

The image shows a screenshot of Cloudflare's 'add a site' page.
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.

The image shows a screenshot of Cloudflare's website 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.

The image shows a screenshot of Cloudflare's SSL/TLS overview page.
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:

The image shows a screenshot of Cloudflare's 'Always Use HTTPS' option.
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 Copy link

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.

The image shows a screenshot of Cloudflare's 'SSL/TLS' > 'Origin Server' page.
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.

The image shows a screenshot of Cloudflare's 'Add Certificate' page.
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.

The image shows a screenshot of Cloudflare presenting my Origin Certificate and Private Key
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.

The image shows a screenshot of my file browser at '/etc/ssl/' folder path, with the Certificate and Private Key placed inside.
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:

sudo chown root:root /etc/ssl/private/your_private_key.key 
sudo chmod 600 /etc/ssl/private/your_private_key.key

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:

sudo chown root:root /etc/ssl/certs/your_certificate.crt 
sudo chmod 644 /etc/ssl/certs/your_certificate.crt

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.

server {
listen 80;
listen 443 ssl;
  server_name ideasofhakki.com;

  ssl_certificate     /etc/ssl/ideasofhakki.com.crt;
  ssl_certificate_key /etc/ssl/ideasofhakki.com.key;

  ssl_protocols SSLv3 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_ciphers HIGH:!aNULL:!MD5;

  root /home/hakki/ideasofhakki;
  index index.html;

  location / {
    try_files $uri $uri/ =404;
  }

  location = /rss.xml {
    add_header Content-Type application/rss+xml;
  }
}

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:

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    If you want, add this line in your nginx config and then remember to disable it in our Cloudflare settings.

  • OCSP Stapling:

    Improves SSL handshake speed by including the OCSP response in the handshake.

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
  • SSL Session Caching:

    Improves performance by enabling SSL session caching.

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

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 Copy link

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.

The image shows a Cloudflare's overview of how it handles the traffic.
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.

The image shows a Cloudflare's Tunnels overview from Zero Trust page.
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.

The image shows a Cloudflare's Zero Trust 'Route Traffic' Rule page.
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 Copy link

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.

https://ideasofhakki.com/
https://ideasofhakki.com/sitemap.xml
https://ideasofhakki.com/rss.xml
https://ideasofhakki.com/robots.txt
https://ideasofhakki.com/how-to-start-a-kick-ass-blog-for-free.html
https://ideasofhakki.com/how-to-pronounce-my-name-hakki.html

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:

User-agent: *
Allow: /
Sitemap: https://ideasofhakki.com/sitemap.xml

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.

The image shows a screenshot of my website's folder.
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 Copy link

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 Copy link

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.

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'.
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 Copy link 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?

We have run out of them.

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 other reverse proxy providers.

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
  1. (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.)
  2. 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!
https://ideasofhakki.com/how-to-start-a-kick-ass-blog-for-free.html
How to pronounce my name, Hakki
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? Copy link

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 ! :)

https://ideasofhakki.com/how-to-pronounce-my-name-hakki.html