There are white grapes and red grapes. Red wines and Rose wines are made from red grapes, whereas white grapes can only make white wines. But white wines could be made from white or red grapes.
Grapes flower and then ripen in the summer. They can only be planted in areas that are 30 - 50 degrees above and below the equator. In warmer areas, the grapes tend to be sweeter and more ripe. The riper a grape is, the more sugars are in the grape and the less acid. White grapes are more common in cooler areas and red grapes are more common in warmer areas.
The grape is made out of two parts: the pulp and the skin
Skin contains tannin, which gives the wine it’s color and that drying taste on the tounge. The longer the skin is in the wine, the deeper the color of the wine. Deep red wine has had skin contact for a long time. Roses only partially.
Pulp contains acid and sugars. The sugars are a key component when making wine.
New Zealand and Australia make new world wines.
Making wine
Basics
Wine is made by adding yeast to grape sugars. Yeast + Sugars = Alcohol + CO2.
Sweet wines occur when alcohol is added so the yeast dies prematurely. Yeast could also be removed or unfermented grape juice could be added. For dry wines, when all the sugars are gone, the yeast dies and falls to the bottom of the wine.
Wines are generally 11 - 14.5% ABV.
Sparkling wines are made by either not letting the C02 escape during the fermenting process, or adding CO2 during bottling.
When we’re writing a program, we usually write things sequentially. Which, is great, but modern computers have more computing power and can do more. We can use different processes to concurrently solve problems to get a faster result.
Multithreading vs Multiprocessing
Multithreading is the ability for one process to run multiple threads.
Multiprocessing is the ability for a system to run multiple processes.
A system can have multiprocessing of multiple processes, where each process uses multithreading.
Concurrency vs Parallelism
Multithreading is concurrent, which means that the threads don’t actually run at the same time. They mimic running at the same time by staggering execution of a thread. Parallelism is what multiprocessing has, where processes do execute at the same time.
This is mainly because a process has its own memory and interpreter, whereas in multithreading, all threads share the same interpreter.
Python’s Global Interpreter Lock
Python has something called a Global Interpreter Lock, it only allows one thread to have control of the Python interpreter. Only one thread can be executing at a time. Python works by using reference counting, meaning that when data is created in Python, Python tracks the amount of references the object has. When all references are deleted, the memory is freed. In order to prevent a race condition where multiple threads are trying to edit the reference counter, the GIL was introduced.
This does not mean that you don’t have to use a lock in your Python code. GIL only protects the interpreter. You still want consistency if you share state between threads. You don’t know when your thread will get interrupted and switch to executing another thread, which means that when you save a state in a thread, you want to lock that code.
What is a Daemon thread?
A Daemon thread is one that runs without blocking the main program.
Python Threading Coding Notes
What is the difference between lock() and join()?
Lock guarantees that only one thread can execute a portion of code at a time.
Join waits for a thread to complete.
What is RLock?
RLock is a lock that can be acquired many times by the thread that got it the first time. The lock stays locked and is held until each acquisition is released.
In a case where a locked function is calling another locked function, that code would not work with a normal lock. The lock would have to be released before the second function could be entered. If you have a RLock, the same thread can enter both functions.
As of Python 3.2+, RLocks do not have any sigificantly greater performance cost than a regular Lock.
Scrum helps teams deliver products in an incremental way. Its split up into sprints, which should be less than a month long, where the team works on specific goals. The scrum team always tries to improve their procedures and adapts to new challenges.
Who is in a Scrum Team?
A scrum team is responsible for pretty much all work is required to delivered a product and generally should have less than 10 people.
Product Owner
The product owner tries to create value in the product for stakeholders:
creating and ordering task backlogs
representing the needs of the customer
makes decisions
Scrum Master
The Scrum master helps by:
empowering developers to be self-managed
break down blockers that are in front of the team
establish goals for the product the team is making
in general, helping the team become more effective
Developers
Developers work on the product and also:
create a plan for the sprint
producing quality work
self-managing to acheive sprint goals
Scrum Events
Sprints
During sprints, nothing should be changed to endanger the sprint goal, but the scope can be renegotiated with the scrum master if more information is learned. Each sprint should be between 1-4 weeks long and end with working software.
Theres two goals:
Product Goal: What the product ideally should look like.
Spring Goal: What are we doing this sprint to acheive the product goal?
Core Components of Sprint Planning
Product Owner should make sure that developers are prepared to discuss the backlog
How will this sprint help us acheive our Product Goal?
What can we do this sprint and what is the definition of a task done?
How should a specific task get done?
Sprint Review/Retro
The team should:
Talk about what items are done and not done
Discuss what went well/what could’ve been improved
Discuss how the backlog is looking and if theres any changes to product timelines or priorities
Team can then use that information to plan for the next sprint
I did some searching around and couldn’t find a good introduction that got you set up quickly with a blog and also had it look pretty. I finally found the helpful tutorial here on how to set up the Hyde theme and decided that I will add some helpful hints.
Downloading Ruby
Windows
Go here and find your desired Ruby version.
If you don’t know what system type you have, search up ‘System Information’ in your start menu search bar and look under ‘System Summary’ and ‘System Type’.
P.S. I did end up downlading the ruby with the dev kit.
MacOS
At first I wanted to run this on MacOS because Ruby is included in the system already. This proved to be difficult and I couldn’t figure it out. Because Ruby is preinstalled, Mac doesn’t allow you to edit those Ruby files. It is also heavily discouraged to use sudo to override the safe guards.
I ended up trying this suggestion to no avail. I also ran into homebrew issues which a brew update-reset fixed.
Search for ‘environment variable’ on the start menu
Select ‘Edit the system environment variables’
Click ‘Environment Variables’ at the bottom
Click on the ‘Path’ entry
Using the ‘New’ button, add two entries, one for each Git path listed above
Downloading VSCode
You are more than welcome to use your text editor of choice.
I downloaded VSCode. I did find a peculiar issue: when I download a new package, in order for my terminal to refresh, closing a window and reopening a window wasn’t enough. I had to close VSCode as a whole and then reopen it.
Install Jekyll
gem install jekyll
Install Dependencies
Needed for Poole, which is what Hyde is built on:
gem install jekyll jekyll-gist jekyll-sitemap jekyll-seo-tag
Needed for Hyde:
gem install jekyll-paginate jekyll-gist redcarpet