I’ve been thinking a lot about the origins of psychosomatic pain. I’ve had minor brushes with it, just about enough to convince me to take it seriously. I understand that psychosomatic stuff can be insert adjective but I’m convinced there’s at least a grain of truth in it both 1) existing in more cases than people think and 2) being resolvable through emotional healing.
Asking what you would do if you didn’t have a constraint is clarifying because you often realize it isn’t a constraint. Money can limit your scale, but probably not keep you from the attempt.
An interesting story about watermelons, but one part stood out to me –
In 1924, a National Geographic Magazine writer chronicled his adventures in Sudan from 1916 to 1920, in which watermelons played a key role. He enjoyed watermelon tea the locals made—after punching the fruit open and squeezing the flesh to press the juice out—and, in brutal 110-120F heat, endured a six-week journey on which watermelons were his sole source of water. The writer, Major Edward Keith-Roach, complained about being unable to shave during that trip but couldn’t praise watermelons enough for saving his life and making the trek possible.
Marketing comes very unnaturally to me, been reading @visakanv’s marketing blog recently.
This guy is selling a book on how to get a 4 day workweek. I haven’t read the book, but I find myself referencing his blog a lot to people who don’t realize you can just negotiate a shorter workweek.
This is a cool set of comments about soil usage and climate. It’s sad seeing people blame meat production for climate change, since it can absolutely be transformed to be beneficial to the planet. Also, modern factory farming is terrible for the soil in more ways than I realized.
Interesting progress in the field of tinnitus. If there’s one thing I’ve learned it’s that knowledge in the field of medicine is poorly distributed. Hopefully this can help someone.
The Dungeons & Dragons Economy system is bad. The economy is made up and the prices don’t matter. Prices are information, they should incentivize player actions, allocate scarce items, and provide another facet of immersion and interaction with the game world. D&D 5e is meant to be more accessible than the previous versions, which is great, but clearly a lot of detail is lost in just looking at the price chart in the back of the player’s handbook . The price of a health potion wouldn’t reasonably cost the same in a ransacked village as it does in the imperial capital. Moreover, what about those of us who want to know how much goblin armor is really worth? If a party comes through a farming village, how big is the demand for looted weapons, especially if you just sold them some last week? If you sneak into the King’s treasury, how much money will you find? This level of detail is obviously left out of the official release because it is rather difficult to keep track of a large and ever dynamic world for a tabletop game. The goal of this project is to provide a program that will open this new dimension of gameplay for dungeon masters with minimum bookkeeping.
Ideally, the first version of our program will tell you realistic prices in various parts of your world. Events that you can create will affect the market, as will player actions. A mockup of the UI is below. The ideal use case of this is to have the DM update the program with player actions between sessions and then print off a price list for the next session. This is probably a good trade off between usability and having the dynamic price functionality.
We’re going into this project blind. The idea is to create a reasonable simulation of the economy, and then compare that to other models. Our preliminary idea is to have an individual based simulation, with grain production heavily influencing the prices of all other goods. This is because grain is a good proxy for labor costs during this era. We’ll be using this blog post at Bret Devereaux’s blog, as well as Fernand Braudel’s works as inspiration. The historical setting closest to D&D in our estimation is 16th Century Europe, so we’ll be using that as a base. Magic is assumed to be uncommon enough to not have an influence on general prices, so that will be handled through events.
Grain prices are difficult to model because the market is illiquid and inefficient. Grain spoils, it doesn’t travel well, and is essential for human life. Sounds like an interesting combination! The way we began to model it is by considering the mechanism of price discovery. A merchant travels around various towns, carrying grain. Merchants will always purchase grain when a town provides a lower price and always sell to towns providing a higher price. In essence merchants will buy low and sell high depending on how much they have in their current inventory.
This is a reasonable heuristic for bootstrapping the rest of the market characteristics. Meanwhile the seller has a minimum price to sell for determined by the labor cost. They will never sell below that and always sell if above that.
Using this, we can generate prices for grain at various locations based on what price the merchant last purchased at. These prices are, of course, naively calculated but they give some indication of what prices in various locations are.
In terms of simulating something like trade between merchants, the current algorithm is somewhat of a placeholder, as I need to consider how to implement my thoughts on pricing. The merchant currently does make money through selling food. The chart below shows the amount of money a merchant has. In this case, the merchant buys the food from one manor at week 30, then sells it to another at week 40 for a profit.
We’ll be documenting this through blog posts as well as releasing our source code on Github.
General background
In researching the pre Industrial production of grain, I realized that this would be a case where Reality Has A Surprising Amount of Detail. In very broad strokes — Peasants would grow various kinds of grain. There is a seasonal pattern to growing the grain, in which there is plowing, sowing, and harvesting. The harvest happens once a year, but the family needs to eat constantly.
All resulting complexity results from this. Storing grain, for example, was incredibly difficult and non obvious. Trying to bank grain was almost impossible. Hence, a lot of a peasant family’s thinking was geared towards avoiding hunger, rather than trying to achieve any sort of excess.
Large landowners would have a symbiotic, if somewhat parasitic , relationship with the peasant farmers. They would provide capital in the form of manure and plow teams, while the peasant farmers would provide extra labor. Large landowners also were the last line of defence against starvation, as they would offer loans to the farmers, which were usually predatory.
Accurate reenactment of peasants being opressed.
Thoughts on pricing
A pricing formula can consist of a function in two terms as shown below
Price = demand value + supply cost
Which is unimaginative but seems to have a few nice properties in describing prices. Developing further, the function can be expanded to the following.
Price = (social value + personal value) + (cost to produce)
The influence the supplier has on the price is the cost to produce an item. In a simplified world (ignore friction, assume cow is spherical), he is unwilling to sell under that price and infinitely willing to sell above that price. Costs include transportation, profit margin, actual product cost, etc.
The other method by which the supplier can influence the price is through the number and availability of a product. If you’re the only seller in town, you can charge more. If there’s another seller right next door, without colluding, you won’t be able to charge as much.
Put into words, the value a product has to someone is based on the value it has to them personally, meaning in relation to their needs, as well as the value it has socially, in relation to others’ needs.
Another aspect that affects the value of a product is the time there is to use it, the expiration date. Expiring products can be interpreted as having a change in the quantity of usable time. The time you get to use and store a product has value. If you buy mushrooms that’ll go bad in a day, they’re worth less than if they expire in a week. You’re paying for the option to use mushrooms farther into the future.
Quantity of time value can be explained as the value of having a certain quantity of item for a certain time. What characteristics does this have?
If there is no time left to use an item, clearly it has no value.
If you have very little time, the value will be very close to zero regardless since you can’t do much with it in the meantime.
If you have a lot of time, the value is quite high to you, but it’s asymptotic — the difference between having mushrooms that expire in 14 days and 15 days is minimal.
In the middle, we can expect a somewhat linear increase in value with increasing time.
Putting this together, we get the below function.
An intuitive explanation of this is that time value doesn’t stack. 7 mushrooms expiring in 1 day is not the same as 1 mushroom expiring in 7 days.
Applying this concept to grain prices — Price = (quantity of time value)*(social value + personal value + cost to produce + supply constraint)
Of these terms, the two likely largest and most difficult to determine will be the social value and supply constraint.
Social value will require disentangling the web of relationships between the large landlord and the farmers living near them. The landlord is usually the one who will be purchasing grain for hungry farmers during a famine. How badly do the farmers need the grain and how willing is the large landlord to part with his money to provide it? Are they willing to ration grain or will they buy as much as it takes?
Supply constraint goes hand in hand with the difficulty in modeling this inefficient market. How likely is it that another merchant will stop by soon? How far can grain travel? Is the grain shortage local?
The pricing algorithm I’m currently using is based on the following.
Quantity of time value: The previously shown distribution
Social value: I’m assigning a random normal scaling factor to represent the benevolence of a lord to their peasant farmers. I then multiply by an exponential factor based on how close the farmers are to starving.
Personal value: Ignored. I’m assuming that the lord has almost no chance of personally starving to death.
Cost to produce: Used as a minimum value, currently I’m just hardcoding it as a minimum, but I’ll change that in the future to be based on the labor cost and land productivity.
Supply constraint: I have no ideas on how to model this even semi realistically without looking at it globally. I’m modelling this as a linearly increasing factor based on time since the last merchant visit for now. This is an inefficient method because it disregards some important factors such as probability of merchants arriving or chance of local crop failures. This is a sticky mess to be addressed in future steps.
Thoughts on project structure
Currently our project is structured as a Java command line interface program, using Java 8 and JFreeChart for graphing. I would love to know how to make JFreeChart extensible, so I can reuse code for graphing various charts without needing to write a new custom class every time. Ideally I could simply feed in the data into a generic line graphing class. Unfortunately, the documentation isn’t clear on how to do this, so I’ll keep experimenting.
In a similar vein, we may switch to JavaFX. Considering that this program may need to run with a GUI at some point anyways, it may be worthwhile implementing graphing currently using JavaFX, rather than JFreeChart.
Currently, since the bulk of the work is in generating prices and writing the skeleton of the simulation, these concerns aren’t pressing, but it’s worth thinking about.
A big issue is considering how to convert these concepts such as grain production and merchants trading with each other into code. Abstracting these concepts in the right way where the important detail remains but we don’t overcomplicate is proving to be a challenge. We have abstracted grain production into giving each household a certain amount of grain based on land holdings, weather, and labor capacity. I’ve gotten a recommendation that learning about design patterns may help with this.
Going a bit more in depth into issue — the trading algorithm is currently a static method which takes the two trading participants as parameters. It’s then overridden for various participant types like merchant or lord. The function then directly modifies the member variables of each participant like the inventory. It also returns the price that the item was sold at. I’m unsure of whether this is the code architecture that is the most useful interpretation of this.
Thoughts on abstracting history
A big part of this project so far has been interpreting the history and determining how best to abstract it. I’ve of course been reading the ACOUP blog, as well as Fernand Braudel’s work on capitalism in that time. Unfortunately, while I think Braudel’s work is extremely useful and informative, it’s not exactly right for the stage of the project I’m currently on. His work seems to be exceptionally useful in understanding the general trends of global trade at the time, and not so much the in depth mechanics of trade between individuals. My hope is that The Peasants of Languedoc by Le Roy Ladurie is going to give a bit more down to earth mechanics of pre Industrial life and trade. Questions that have come up in the course of creating the simulation are
If there’s an insufficient amount of labor to complete the sowing in one week, what is the likely outcome? Would they take help from other households or just sow later?
How best to model the inefficiency in trade? Merchants visited infrequently and markets were small
What were large landowners likely to be farming? What population did the manor usually contain?
How did the process of plowing actually work? What downsides were there to plowing off peak? What if you plowed without a plow team?
Would 3 field crop rotation fields be equivalent size?
How much food would a lord have on hand vs wealth? How much would his household consume?
I had an urge to learn web development, except the sheer amount of stuff out there available to build a website with was incredibly disorientating. As I went around researching each technology/language/framework, I wrote one sentence definitions of them for myself. I’m putting it here and I will update it as I keep learning.
Frontend – Part of the website the user interacts with
Backend – Stuff on the server
HTML – Holds the content of the webpage
CSS – Makes the webpage have formatting and cool colors
Sass – Makes CSS better and allows you to have variables and logic
JavaScript – Allows your website to have dynamic stuff like animations or interactivity
EJS – Generates HTML from Javascript code, not to be confused with Express, Ext JS, ES6
JQuery – A library that allows you to do things that’d take a couple of lines of code in JS in a single line
Ajax – Not a technology but a technique that allows you to update part of a webpage without reloading the whole thing
Bootstrap – A library that allows you to make nice looking websites really fast by including HTML, CSS, and JS templates for things
Node JS – Allows you to have your server run JavaScript. Useful because now you only need to learn JS to do frontend and backend development
Express – Simplifies some tasks in Node JS
PHP – JavaScript but old and different. Used for backend
JSON – Data storage format
XML – JSON but worse
MongoDB – Fancy JSON database
SQL – A language for querying a database
TypeScript – A superset of Javascript which adds static typing
Flask – Python backend framework
Django – Flask but with more built in
Terraform – Create and manage a server on AWS / Azure using code rather than their website
Docker – Rather than use a virtual machine, let the apps share the OS without interfering with each other
Angular – A framework which allows you to create reusable components using Typescript for the front end
React – Angular but different
Redux – Instead of passing data around, put it somewhere central so it can be accessed from many places.
This is going to be a guide by a beginner, but hopefully this will be useful to those with even less experience than me. When I decided to start building furniture, most of the internet basically said, “unless you have $5000 in tools and a large workshop you may as well just get Ikea furniture.” My aim is to clarify that if you want furniture perfect in every way and have a large budget then sure buy a ton of great tools, but if you’re cool with compromises there are ways to get it done on the cheap.
This is the guide I used to get started. For measuring, I just used a combination of paper that I cut, a pencil, and my old protractor from high school geometry. It was a kludge but the results were okay. I also recommend watching this video to understand a bit better how dovetails are cut. My only other advice is that you want to flatten the wood. I had the guy at the lumber yard do it for me but YMMV.
What motivated me to start making furniture was
I have lots of time and not a lot of money now that I’m unemployed
I need furniture
I absolutely hate furniture that doesn’t feel sturdy
I needed a hobby
I decided my first piece would be a table for my entryway. Since it’s super narrow I figured I’d make it 8 inches wide, with legs attached by dovetails. I wanted something that used wood joinery as opposed to just screws because it feels better. Joinery has the potential to be stronger and besides it felt like investing in developing new skills, as opposed to slapping something together.
Unfortunately, if you listen to the internet, you need at least 5 kinds of saws, 15 chisels, 3 planes, etc. I found this difficult to believe since people have been working with wood for millennia. Here’s what my minimum gear list looks like for creating serviceable dovetails
From what I remember the wood cost around $50. All in all, this came in way cheaper than if I bought it. If you factor in the time I spent on it though, I think unless you’re unemployed you should stick to just buying furniture. At least from a value perspective buying is better, although I will definitely make myself some chairs soon because I enjoyed working with wood.
You absolutely need the dovetail saw and at absolute minimum 2 chisels. I’d probably choose ¾ and ¼ inch chisels, although having the set of 4 was fantastic. The chisels are used for chipping away at the baselines of the dovetails.
The dovetail saw is essential because it allows you to cut the dovetails out. Don’t try to use a regular saw you got at Home Depot. The dovetail saw I used was a Dozuki, which I mainly chose because of price. There is a debate between Western vs Japanese saws, which is irrelevant to me mainly because the Japanese saw was so much cheaper.
There are two kinds of saw (mainly), crosscut and rip cut. The difference is that for rip cutting you go along the grain and crosscut goes across. You can try to use the wrong kind of saw for a cut. It seems to work, it’s just very slow and very ugly. Would not recommend it at all. The dovetail saw has rip teeth. I recommend getting a crosscut saw as well. I didn’t and I think that was a mistake. I used the coping saw for crosscutting tasks and didn’t turn out great.
The coping saw is mostly so you don’t spend forever chiselling away. It’s not essential, but seeing how I have been annoying my neighbors with chiselling, I figured I should at least minimize the noise by using the coping saw as much as I can. I used the coping saw to get in between the teeth to cut out the waste. It’s used mostly for making curved cuts, since the blade is so thin you can change direction very easily.
I used the sandpaper to sharpen the chisels. I recommend the (Scary Sharp method)[https://www.instructables.com/Scary-Sharp-on-a-Budget/]. This is essential since I could really feel when the chisels started getting dull.
These is what the second dovetail I ever made looked like. Overall not bad for the budget I had.
I think in general the bottleneck was my lack of a workbench. I mostly propped up the wood on various surfaces as required and was very gentle. I don’t think I’d recommend this, but if you’re careful enough it can be okay. I used a pocket knife and the chisels to get started on saw cuts so the blade wouldn’t slip. I also was very careful to never put my hands downstream of the chisels.
What I learned
You don’t need a ton of tools when starting a new hobby
Furniture is mostly expensive due to labor cost
You can usually get around budget and space limitations
I have a gut feeling that notation is more essential/central to learning than most presume.
In this stackoverflow question the idea is that changing the notation of logarithms and exponents can make learning it much more intuitive and easy.
In this github repo, there are links to notation making a difference in how people experience activities.
Similarly to these two links, there’s the idea that learning to read and write makes a difference in how you think. The language you speak can have an influence on how you think. This is sort of like an extended Sapir-Whorf hypothesis.
Essential to this idea is taking what Feynmann said about his notes seriously.
“They aren’t a record of my thinking process. They are my thinking process. I actually did the work on the paper.” “Well,” Weiner said, “The work was done in your head, but the record of it is still here.” “No, it’s not a record, not really. It’s working. You have to work on paper and this is the paper. Okay?”, Feynman explained.
If we assume thinking actually happens on paper, this all makes a lot more sense. Externalizing thinking onto paper means that you no longer need to keep all information in your working memory. This frees up your mind to determine the next steps you need to take, without needing to remember what you just did.
Similarly, what if notation serves a similar function? Taking the idea of learning calculus as an example, the limit definition of a derivative is technically the same as writing d/dx. This simplification of notation implies an internalization of the principles of that operation. The derivative then becomes a “chunk” that becomes “brain sized”. Something along these lines is Yudkowsky’s Cached Thoughts.
Shouldn’t learning come first and notation simply be a consequence of that? Not necessarily, the idea that notation becomes brain sized is predicated on it being legible. You are constrained by the analysis that’s contained in the notation. For example, multiplying Roman numerals was possible, but due to notation was quite difficult. Roman numerals were fantastic for tallying. Arabic numerals, on the other hand, required 10 different numerals, which meant no more easy tallying. What you got in return though, was an incredibly powerful mechanical multiplication process.
That’s why, before the 14th century, everyone thought that multiplication was an incredibly difficult concept, and only for the mathematical elite. Then arabic numerals came along, with their nice place values, and we discovered that even seven-year-olds can handle multiplication just fine. There was nothing difficult about the concept of multiplication — the problem was that numbers, at the time, had a bad user interface. – Bret Victor
What happens, when you extend this idea? Could certain processes become easier with better notation? By simplifying or improving notation, you can simplify certain actions.
This is reminiscent of the concept of making smaller circles from Josh Waitzkin.
First, I practice the motion over and over in slow motion… By now the body mechanics of the punch have been condensed in my mind to a feeling. I don’t need to hear or see any effect—my body knows when it is operating correctly by an internal sense of harmony… Now I begin to slowly, incrementally, condense my movements while maintaining that feeling… Each little refinement is monitored by the feeling of the punch, which I gained from months or years of training with the large, traditional motion
He describes learning a motion and making it automatic, then refining it for maximum effect. This is the same thing as creating an internal notation for yourself for a physical action. The key is that you must build up a full understanding of what you’re doing before attempting to make it better. Using notation you don’t fully understand is useless, which is why I think transferring knowledge from one sort of problem to another is so difficult.
The implications of this are –
Memorization is not the enemy. Memorizing certain elements of an action, such as the quotient rule in calc, is the first step in being able to use that in higher level contexts.
Notation is important. How we make things legible to others has a big impact. Explaining physics is a whole different animal if you don’t use free body diagrams.
The way you develop higher levels of abstraction is by developing notation. Constructing a notation, however, is dangerous. Embedding the wrong analysis of a concept in notation can make it even tougher to think clearly. As an example, using Euler angles are intuitive when describing rotations. If you’re doing any sort of computation though, including trying to linearly interpolate between two angles, using quaternions is much more useful.
Understanding this gives you leverage over any topic you learn. The notation and what it implies is foundational to any field and it’s a sort of language you need to learn to speak in order to contribute.
Archery, Distance and ‘Kiting’. A good look into why archery is horribly misrepresented in games. If you’ve ever wondered how horse archers actually worked, this has a good answer.
The Gambler Who Cracked the Horse-Racing Code. I reread this article once a year. I’m not sure what’s so inspiring about it, but it’s nice to see brains triumph over what seems to be random.
Obviously, each of these works influenced me at most by ~0.5% on an imaginary scale. That still is a lot in my opinion for just reading a book or watching a movie. I’m going to try to optimize for works with a maximum influence per obviousness ratio. For example, Star Wars obviously affected me a lot but it affected everyone else too, so it isn’t a particularly interesting work to list here.
Books
Arthur Clarke’s short stories – Scifi in it’s purest form – Blew my mind as a kid. Singlehandedly inspired me to learn how technology works and got me excited for the future.
The Lion of Comarre – One specific Arthur Clarke short story – Made me consider what I want the future to look like. Got me excited about robotics and how that would reshape society.
Matterhorn – Vietnam war novel – There but for the grace of God go I. It was an experience reading this.
How To Be A Victorian – A historical book detailing how Victorians actually lived – Opened my eyes to how people in the past weren’t any different from us today, they just operated under different incentives and constraints.
The Short Happy Life of Francis Macomber – Short story by Hemingway about courage – I read this at a pivotal time in my teenage years when I was taking on a more risk-taking attitude.
Movies
The Secret Life of Walter Mitty – Man goes from daydreamer to global adventurer – Seriously influenced me to become more adventurous as a person.
Tampopo – A Japanese ramen western – It inspired me to take food more seriously. It has an outsized effect on me anyways, I might as well give it the respect it calls for.
The Family Man – I can’t figure out what the moral of this story is. Every few years I change my mind on which path I would’ve chosen for myself. I think when I watched this as a kid it made me consider what role working plays in life.
TV Shows
Mad Men – A show about an ad agency in the 60’s – The only show where I felt like I KNEW the characters. I haven’t ever rewatched it because my memory of watching it the first time is so mindblowing.
Games
The Total War series – Historical RTS games set in Feudal Japan/Fall of Rome etc – Inspired my love of history.
As an introduction to OpenCV and using it with modern C++, I decided to code a Harris corner detector. I’d previously only used MexOpenCV so this was new to me. I’m 100% certain that this could’ve been done more efficiently but I think that I should prioritize moving on to new material rather than perfecting this. Quality vs quantity. This was also my first introduction to makefiles and gdb, but I’ll include that elsewhere.
My main problem when coding this was that I kept mixing up types for cv::Mat. This website was so incredibly helpful for me. I can’t even begin to explain how many errors I had where it was simply because I was mixing up Mat types. I’m not certain why the compiler doesn’t throw an error when this happens, but I might switch to a different one. I also found the at function strange in OpenCV, as in image.at(i, j). Why can’t the be type deduced?
These are the general steps of the Harris Corner Detector
Take the grayscale of an image
Apply the Sobel operator to find the gradient values at each pixel
Compute the gradient covariance matrix elements
Apply gaussian blur to the covariance matrix elements
I wanted to learn this from a sort of first principles approach, so I started with coding a Sobel operator. This is a method of finding the x and y gradients at every pixel of an image. Functionally, this detects edges in an image, which is useful because corners are the intersection of edges. How it works is you take a specific kernel (matrix) and multiply element wise with a 3×3 patch of the image.
Sobel operator kernel
My implementation iterates over each pixel in the image. I hardcoded the kernel, as opposed to creating a Mat, simply because it seemed simpler. I created two temp Mats of int type to store the output. This was necessary because the output of multiplication like this would’ve overflowed uchar. At the end I cast and scale the temporary Mat data to be back to uchar for consistency. You can see the results of running on a chessboard image below.
The original image
X Gradient
Y Gradient
I then needed to calculate the gradient covariance matrix, which is this
If you remember that the Sobel operator calculates the x and y gradients at each pixel, this is just going to be iterating over each pixel in the gx and gy Mats and multiplying as required. I used the mul function, which does element wise multiplication.
This was one tricky part for me. I had gotten to the part where I had to calculate the Harris score, which is determined by the equation below.
I had a problem though. Wouldn’t the determinant of M always be 0? What needs to happen before I do the Harris score calculation is I need to apply a window function to M.
For this I chose a Gaussian blur with radius of 2. Gaussian blur is simply applying a 3×3 kernel to a 3×3 image patch again, similar to the Sobel operator. At the end you multiply by the inverse of the sum of the matrix elements, to compute an average.
Gaussian blur kernel
I tried to do something a little strange here. Rather than hardcoding the values of the Gaussian kernel, I created a loop to fill the values in for me. If I had to do this next time, I would probably hardcode the values in a Mat, then use the mul function. I don’t think I would actually precalculate the values from the Gaussian function, since it’s not too difficult to just hardcode.
Blurred XX Gradient
Blurred XY Gradient
Blurred YY Gradient
Now we can calculate Harris score. I use k constant of 0.04 since that’s what was recommended here. I then create a float Mat called window and fill it with the elements of the blurred gradient covariance matrix. Again, its type float to avoid overflow when calculating trace and determinant. I then threshold based on an empirically determined value (I chose it based on when I was getting a reasonable number of corners). It’s important to note that both very negative and very positive values are what you’re looking for. I then put the absolute value of the score into a Mat. I was considering using a std::vector<cv::Point>, but I wanted the score, as well as the coordinates.
I then ran a quick and not very good form of non maximum suppression. The idea is to find the best corner in an area, and then suppress (ignore) all the others. I iterated over the corners Mat with a 40×40 window and placed the point with the highest score into a std::vector<cv::Point>. I have a gut feeling this could’ve been done much more efficiently, without needing a Mat with all the corners but I’m certain I’ll have the opportunity to reimplement this at some point in the future. The major issue is at the intersection of the 40×40 windows. The image below shows what happens.
I then put all of my corners onto the color image for easy viewing. I seem to have issues with not detecting the corners perfectly on center, as well as the previously mentioned non max suppression problem. This OpenCV tutorial details how sub pixel accuracy can be achieved.
I read Dormin’s post on Napoleon and wait… what does it MEAN that Napoleon was good at logistics. He didn’t go around farming and delivering food to people after all. What was so special about him that he deserves such high praise as
In order to find this, I looked for some of Napoleon’s letters online. It looks like there’s a fairly exhaustive compendium, but it’s only in French. I was lucky enough to find an old collection of Napoleon’s letters on archive.org though. Unfortunately it was less than exhaustive, but helpful. This is only a small sample, but I skimmed through and here’s what I found.
Napoleon really did micromanage that much
This guy had too much energy. He has a letter detailing the exact specifications for a new unit he was raising, down to the height of the cavalrymen and their horses. He specified what the horses should eat and when.
A few of the letters concerned book orders.
“The volumes should contain 5 or 600 pages each, and should be bound with loose back, so that they open flat, and in the thinnest possible boards. This library would be composed of about 40 volumes on religion, 40 of epics, 40 of plays, 60 of poetry, 100 of novels, and 60 of history.”
“The Emperor wishes to have a descriptive catalogue of the library, with notes pointing out the best books, together with a memorandum saying what would be the cost of printing and binding these 1000 volumes, what proportion of an author’s works each volume would contain, what each volume would weigh, how many boxes of what size would be needed to hold them all, and how much space they would take up.”
He also details precisely which authors he wants to have books of, and which he does not. There are multiple of these letters ordering book sets. These are not the words of a man who goes with the flow.
He gave a shit about money
Some of these letters reminded me of John Rockefeller’s attitude towards money. When writing to order clothes, he specified precisely the budget of each article of clothing, as well as how long it should last. When ruling Elba, he had the following to say about gardening.
“reprimand the gardener for employing three men all the month on a garden the size of my hand, and 11 grenadiers for loading up a few cartfuls of earth. I disapprove of the proposed expenditure on turf during October: I would rather have grass seed. The gardener must bargain with the grenadiers to load earth at so much a cubic metre, and use just enough carts to keep them constantly employed. I don’t think this ought to cost more than 80 francs. Similarly, the O.C. Engineers must bargain with the grenadiers for the excavation of the gardens. I estimate the cost at 400 francs. I therefore allow 480 francs for the Supplementary Estimates for the gardens during October.”
Also, later in the same letter.
“I refuse to pay the 280 francs demanded by the Stores department for petty cash. I can only allow 40 francs. Have an estimate made out for the ordinary expenditure of the Stores during October.” _____
Between these two factors, I think it’s reasonable to say Napoleon’s talent in logistics was nothing more than an obsession with detail. Where another would choose to focus on a different, more glamorous aspect of running an army, Napoleon managed to squeeze pleasure out of arguing with merchants about prices. He really did seem to like this stuff…
“I advise you to take a pleasure in reading your muster rolls. The splendid state of my armies is due to the fact that I spend an hour or two every day doing this; and when they send me the monthly return of my troops and fleets, which take up about 20 big files, I give up every other occupation to study them in detail, and to see what difference there is between one month and another. I get more enjoyment out of reading these returns than a young girl does out of reading a novel.”
As an aside, it’s funny to see that he really didn’t “get” the navy at all. There were few references to it at all, and the following is an excerpt of a letter to his Minister of the Navy.
“If it is really necessary, these ships can carry bronze guns, which weigh much less.
You are to submit the engineers’ report to me personally”
I didn’t see anywhere else that he expressed any doubt or asked anyone’s opinion of anything in the other letters.
Napoleon’s Letters Translated and Edited by J. M. Thompson Good pages to see (numbered wrt pdf) – 49, 121, 167, 169, 238, 255, 292, 309, 369
I took ARH 206 at Stony Brook back in Fall 2019 with Prof. David Mather and it was the most impactful class I took in college. I specifically took the class because I thought modern art was bullshit. I’m very happy to say that the class completely changed my view of modern art – specifically seeing the interplay between various artistic movements, how they affected and were influenced by popular culture. I’m writing this from the perspective of an engineer and layperson who appreciates art, so Tweet at me if you disagree with anything. Note – I lump contemporary art in with modern art. My intention with this piece is to convince people that the weird shit in art galleries is pretty cool, not to debate the finer points.
I was always confused by modern art. I didn’t understand the point of it. Older art showed mastery of technical skills, as well as beauty that everybody could appreciate. When you look at the work of the Old Masters, you can clearly see the years of effort and work it took to create such incredibly intricate work. Modern art was always a little weird and pretentious, besides it looked like a 5 year old could make it. I could display a canvas painted white with a black square in the middle myself and nobody would give a shit, so is modern art just marketing? If you take a step back, you notice what I value in art — beauty, technical skill, effort. Now this brings up the question of what exactly is art.
Between you and me, I don’t think anyone knows exactly what art is and anyone who tells you otherwise is full of shit. Let’s rip off Wikipedia –
Art is a diverse range of human activities in creating visual, auditory or performing artifacts (artworks), expressing the author’s imaginative, conceptual ideas, or technical skill, intended to be appreciated for their beauty or emotional power.
This sounds pretty legit to me since it’s a wide open definition and it definitely covers the most important bases. Under this definition I wouldn’t hesitate to label Malevich’s Black Square art. Long story short Malevich wanted to make a painting that wasn’t “of” something. He didn’t want to show the beauty of some thing, he wanted to be completely original and show the beauty of an ideal shape. Now this definitely satisfies the criterion of being imaginative, though a little weak on the technical skill part. Is a square beautiful though? For example look at Piet Mondrian’s Broadway Boogie Woogie. It’s a collection of squares and it’s got colors so it’s not that far off. Is it considered beautiful? Follow up question – do you believe pictures of the New York City grid is beautiful? My point here is that incredible technical skill is not a prerequisite for having beautiful artwork. Another angle to look at this is how nature can be beautiful. A flower is beautiful not because of the incredible technical skill of it’s DNA. It just is beautiful because you like it.
So modern art is in fact art. Cool but what caused that change from making such “beautiful” works like David to throwing a dead shark in some preservative? I’ve heard that it accelerated with the introduction of the camera. Art could no longer just recreate reality, it needed to innovate and differentiate itself. What became important was the artist’s subjective interpretation of a feeling, moment or idea.
I can’t speak to why you should give a shit about modern art. This brings up the question of why you should give a shit about art at all, but that’s for another time. For me, I always felt like I was missing something important. You’d see people reading deeply into a few squiggles on a canvas and I’d wonder what they’d been smoking. Modern art always had the trappings of legitimacy but it was tough to take it seriously. Once I’d learned a little more about modern art I realized how really it runs parallel to pop culture today, which is at least one way it makes a difference in your life.
Drake’s Hotline Bling was definitely a pop culture moment. I only learned later his music video totally cribbed the work of James Turrell. I’m a pretty big fan of Turrell’s. His most famous works are his Skyspaces, which are small buildings with open skylights. They’re illuminated on the inside with color changing LED’s which contrast with the color of the sky. I think this is a super cool idea which really gets you to focus on the color of the sun where otherwise you wouldn’t.
The art you enjoy every day is influence by modern art. Team Fortress 2 impressed me with it’s creative art style that was incredibly unique even today. Turns out it was influenced by the Precisionists.
Another artist that I discounted was Andy Warhol. In particular I thought copy-pasting the Campbell’s soup can wasn’t really that big a deal. One way of looking at his work is that he was the first to bring an appreciation to the artistic value of advertising and marketing. He bonded high art with the artwork the average person was most likely to come into contact with. This was a remarkably egalitarian view of artwork. I personally don’t think his work is “beautiful” but this relates to the Slate Star Codex post on reading things backwards . Imagine what a sea change it was when Warhol showed that advertising could be artistic.
Cut Piece was a piece by Yoko Ono which I was surprised I appreciated. I didn’t think much of performance art previously, but this was something that was really out there. Ono sat on stage silently while the audience could cut her clothing away. It forced the concept of audience interacting with artist to be explicit. It defined the relationship as potentially destructive and aggressive.
Duchamp’s Fountain was also a work that I would have sneered at but grew to appreciate. My opinion can be summarized by the following quotations from Louise Norton.
“Whether Mr Mutt with his own hands made the fountain or not has no importance. He CHOSE it. He took an ordinary article of life, placed it so that its useful significance disappeared under the new title and point of view – created a new thought for that object.”
And
“The only works of art America has given are her plumbing and her bridges.”
The point of this is that maybe you don’t dislike modern art, you might just dislike certain kinds of it. Keep an open mind and explore some different kinds of modern art.