srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2026-01-14 22:23:00 +0200
committersrdusr <[email protected]>2026-01-14 22:23:00 +0200
commit4933f669f8338ca5e4c64cf0294818c5d15ed122 (patch)
tree979ce6ffed0a4a59f65f47252ce9824a77be760e /data
parent695bf0df2ec48e67d716dad25711cdc2e96bf7f4 (diff)
downloadtyperpunk-4933f669f8338ca5e4c64cf0294818c5d15ed122.tar.gz
typerpunk-4933f669f8338ca5e4c64cf0294818c5d15ed122.zip
Make every passage long enough to be worth timing, and credit all of them
The dataset's median passage was 69 characters, about twelve words, which is over in twelve seconds at an ordinary speed. Some packs were worse: shell had a median of 46 and a shortest entry of 17. That is the reason packs felt small. It was not the number of entries, which was 15 to 37 per pack, but the length of each one. Multiplayer had already hit this and worked around it: load_race_texts filters to 120 characters or more. That filter left only 61 of 350 passages eligible, 38 of them from two packs, so races repeated constantly and four packs could never come up at all. Both halves are fixed. Content: 104 longer passages added across every pack. The command packs get whole pipelines rather than single flags, which is how the tools are actually used and what the explanations were always for. Prose packs get passages that run 150 to 320 characters. Selection: a floor of 120 characters. Prose packs draw from their long entries where a pack holds at least five, so no pack is reduced to the same few passages. The command packs chain consecutive entries into one drill, which is the natural shape for them, and the explanations are collected so each line is still described. Measured over 400 draws per pack, every category now runs a median of 146 to 218 characters with a shortest draw of 120. The race pool went from 61 of 350 to 130 of 454. Attribution: 24 passages had none and displayed nothing at all under the text. They now say Unknown, which is the honest answer for a fact written for the pack, and the pangram is credited as one. The results and typing screens both fall back to Unknown rather than rendering an empty line, and the pack name is shown beside the source. Multiplayer results, three fixes: - PB never appeared. A race has no mode of its own, so modeKey was undefined, so recordResult never ran. Races share one key, because the passage is whatever the server dealt and a per-passage best would never be beaten. - Play Again started a solo test. A race carries standings and a solo run does not, so the results screen can tell them apart and now queues for another race. The end screen's own cleanup leaves the old room first. - CONSISTENCY was the longest label on the screen and made the accuracy column wider than the WPM column opposite it. It reads CON. RaceText carries the pack name so the results can show it for a race the same way single player does. 24 Rust tests and 3 browser tests pass.
Diffstat (limited to 'data')
-rw-r--r--data/packs/anime.json193
-rw-r--r--data/packs/business.json145
-rw-r--r--data/packs/general.json122
-rw-r--r--data/packs/hacking.json58
-rw-r--r--data/packs/history.json140
-rw-r--r--data/packs/literature.json158
-rw-r--r--data/packs/movies.json27
-rw-r--r--data/packs/nature.json145
-rw-r--r--data/packs/philosophy.json34
-rw-r--r--data/packs/programming.json72
-rw-r--r--data/packs/quotes.json132
-rw-r--r--data/packs/science.json162
-rw-r--r--data/packs/shell.json276
-rw-r--r--data/packs/sysadmin.json262
-rw-r--r--data/packs/technology.json172
15 files changed, 1849 insertions, 249 deletions
diff --git a/data/packs/anime.json b/data/packs/anime.json
index fbddcce..4fc7382 100644
--- a/data/packs/anime.json
+++ b/data/packs/anime.json
@@ -1,30 +1,167 @@
[
- {"category":"anime","attribution":"Fullmetal Alchemist","content":"A lesson without pain is meaningless. That's because you cannot gain something without sacrificing something else in return."},
- {"category":"anime","attribution":"Fullmetal Alchemist","content":"Humankind cannot gain anything without first giving something in return. To obtain, something of equal value must be lost."},
- {"category":"anime","attribution":"Neon Genesis Evangelion","content":"Anywhere can be paradise as long as you have the will to live."},
- {"category":"anime","attribution":"Cowboy Bebop","content":"Whatever happens, happens."},
- {"category":"anime","attribution":"Ghost in the Shell","content":"Overspecialize, and you breed in weakness. It's slow death."},
- {"category":"anime","attribution":"Naruto","content":"Hard work is worthless for those that don't believe in themselves."},
- {"category":"anime","attribution":"Naruto","content":"When people are protecting something truly special to them, they truly can become as strong as they can be."},
- {"category":"anime","attribution":"One Piece","content":"If you don't take risks, you can't create a future."},
- {"category":"anime","attribution":"One Piece","content":"When do you think people die? When they are forgotten."},
- {"category":"anime","attribution":"Bleach","content":"We fear that which we cannot see."},
- {"category":"anime","attribution":"Death Note","content":"This world is rotten, and those who are making it rot deserve to die."},
- {"category":"anime","attribution":"Code Geass","content":"The only ones who should kill are those who are prepared to be killed."},
- {"category":"anime","attribution":"Attack on Titan","content":"If you win, you live. If you lose, you die. If you don't fight, you can't win."},
- {"category":"anime","attribution":"Attack on Titan","content":"The only thing we're allowed to do is to believe that we won't regret the choice we made."},
- {"category":"anime","attribution":"Gurren Lagann","content":"Don't believe in yourself. Believe in me who believes in you."},
- {"category":"anime","attribution":"Hunter x Hunter","content":"You should enjoy the little detours to the fullest, because that's where you'll find the things more important than what you want."},
- {"category":"anime","attribution":"Steins;Gate","content":"No matter how much I struggle, there's always a price to pay for changing the past."},
- {"category":"anime","attribution":"Mushishi","content":"Don't be afraid of things you don't understand. Just accept them as they are."},
- {"category":"anime","attribution":"Spirited Away","content":"Once you've met someone, you never really forget them."},
- {"category":"anime","attribution":"Princess Mononoke","content":"Life is suffering. It is hard. The world is cursed. But still, you find reasons to keep on living."},
- {"category":"anime","attribution":"Howl's Moving Castle","content":"A heart's a heavy burden."},
- {"category":"anime","attribution":"My Neighbor Totoro","content":"Trees and people used to be good friends."},
- {"category":"anime","attribution":"Your Name","content":"I feel like I'm always searching for someone, or something."},
- {"category":"anime","attribution":"March Comes in Like a Lion","content":"Even if you can't see it, the river keeps flowing under the ice."},
- {"category":"anime","attribution":"Vinland Saga","content":"You have no enemies. Nobody has any enemies. There is nobody that you should hurt."},
- {"category":"anime","attribution":"Mob Psycho 100","content":"If everyone is not special, maybe you can be what you want to be."},
- {"category":"anime","attribution":"Fruits Basket","content":"When you look at someone's kindness, it's like looking at the sun."},
- {"category":"anime","attribution":"A Silent Voice","content":"What I want more than anything is for you to live and help me live too."}
+ {
+ "category": "anime",
+ "attribution": "Fullmetal Alchemist",
+ "content": "A lesson without pain is meaningless. That's because you cannot gain something without sacrificing something else in return."
+ },
+ {
+ "category": "anime",
+ "attribution": "Fullmetal Alchemist",
+ "content": "Humankind cannot gain anything without first giving something in return. To obtain, something of equal value must be lost."
+ },
+ {
+ "category": "anime",
+ "attribution": "Neon Genesis Evangelion",
+ "content": "Anywhere can be paradise as long as you have the will to live."
+ },
+ {
+ "category": "anime",
+ "attribution": "Cowboy Bebop",
+ "content": "Whatever happens, happens."
+ },
+ {
+ "category": "anime",
+ "attribution": "Ghost in the Shell",
+ "content": "Overspecialize, and you breed in weakness. It's slow death."
+ },
+ {
+ "category": "anime",
+ "attribution": "Naruto",
+ "content": "Hard work is worthless for those that don't believe in themselves."
+ },
+ {
+ "category": "anime",
+ "attribution": "Naruto",
+ "content": "When people are protecting something truly special to them, they truly can become as strong as they can be."
+ },
+ {
+ "category": "anime",
+ "attribution": "One Piece",
+ "content": "If you don't take risks, you can't create a future."
+ },
+ {
+ "category": "anime",
+ "attribution": "One Piece",
+ "content": "When do you think people die? When they are forgotten."
+ },
+ {
+ "category": "anime",
+ "attribution": "Bleach",
+ "content": "We fear that which we cannot see."
+ },
+ {
+ "category": "anime",
+ "attribution": "Death Note",
+ "content": "This world is rotten, and those who are making it rot deserve to die."
+ },
+ {
+ "category": "anime",
+ "attribution": "Code Geass",
+ "content": "The only ones who should kill are those who are prepared to be killed."
+ },
+ {
+ "category": "anime",
+ "attribution": "Attack on Titan",
+ "content": "If you win, you live. If you lose, you die. If you don't fight, you can't win."
+ },
+ {
+ "category": "anime",
+ "attribution": "Attack on Titan",
+ "content": "The only thing we're allowed to do is to believe that we won't regret the choice we made."
+ },
+ {
+ "category": "anime",
+ "attribution": "Gurren Lagann",
+ "content": "Don't believe in yourself. Believe in me who believes in you."
+ },
+ {
+ "category": "anime",
+ "attribution": "Hunter x Hunter",
+ "content": "You should enjoy the little detours to the fullest, because that's where you'll find the things more important than what you want."
+ },
+ {
+ "category": "anime",
+ "attribution": "Steins;Gate",
+ "content": "No matter how much I struggle, there's always a price to pay for changing the past."
+ },
+ {
+ "category": "anime",
+ "attribution": "Mushishi",
+ "content": "Don't be afraid of things you don't understand. Just accept them as they are."
+ },
+ {
+ "category": "anime",
+ "attribution": "Spirited Away",
+ "content": "Once you've met someone, you never really forget them."
+ },
+ {
+ "category": "anime",
+ "attribution": "Princess Mononoke",
+ "content": "Life is suffering. It is hard. The world is cursed. But still, you find reasons to keep on living."
+ },
+ {
+ "category": "anime",
+ "attribution": "Howl's Moving Castle",
+ "content": "A heart's a heavy burden."
+ },
+ {
+ "category": "anime",
+ "attribution": "My Neighbor Totoro",
+ "content": "Trees and people used to be good friends."
+ },
+ {
+ "category": "anime",
+ "attribution": "Your Name",
+ "content": "I feel like I'm always searching for someone, or something."
+ },
+ {
+ "category": "anime",
+ "attribution": "March Comes in Like a Lion",
+ "content": "Even if you can't see it, the river keeps flowing under the ice."
+ },
+ {
+ "category": "anime",
+ "attribution": "Vinland Saga",
+ "content": "You have no enemies. Nobody has any enemies. There is nobody that you should hurt."
+ },
+ {
+ "category": "anime",
+ "attribution": "Mob Psycho 100",
+ "content": "If everyone is not special, maybe you can be what you want to be."
+ },
+ {
+ "category": "anime",
+ "attribution": "Fruits Basket",
+ "content": "When you look at someone's kindness, it's like looking at the sun."
+ },
+ {
+ "category": "anime",
+ "attribution": "A Silent Voice",
+ "content": "What I want more than anything is for you to live and help me live too."
+ },
+ {
+ "category": "anime",
+ "content": "People's lives don't end when they die. They end when they lose faith. A person who is remembered by someone still has something of themselves left in the world, and that is not nothing.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "anime",
+ "content": "Whatever you lose, you'll find it again. But what you throw away you'll never get back. That is the difference between a mistake and a decision, and most people learn it far too late.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "anime",
+ "content": "If you don't take risks, you can't create a future. Everyone wants the result without the part where it might not work, and that part is the whole of it. There is no other door in.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "anime",
+ "content": "A lesson without pain is meaningless. That's because you can't gain something without sacrificing something else in return. But once you've overcome it and made it your own, you will gain a heart strong enough not to be overcome by anything.",
+ "attribution": "Fullmetal Alchemist"
+ },
+ {
+ "category": "anime",
+ "content": "The world is not beautiful, and that in a way lends it a sort of beauty. A thing that had no flaw would have nothing to notice about it, and nobody would ever look twice.",
+ "attribution": "Unknown"
+ }
]
diff --git a/data/packs/business.json b/data/packs/business.json
index ad4863a..fa9685b 100644
--- a/data/packs/business.json
+++ b/data/packs/business.json
@@ -1,22 +1,127 @@
[
- {"category":"business","attribution":"Peter Drucker","content":"Management is doing things right; leadership is doing the right things."},
- {"category":"business","attribution":"Peter Drucker","content":"There is nothing so useless as doing efficiently that which should not be done at all."},
- {"category":"business","attribution":"Peter Drucker","content":"The purpose of business is to create and keep a customer."},
- {"category":"business","attribution":"Adam Smith, The Wealth of Nations","content":"It is not from the benevolence of the butcher, the brewer, or the baker that we expect our dinner, but from their regard to their own interest."},
- {"category":"business","attribution":"Adam Smith, The Wealth of Nations","content":"The real price of everything is the toil and trouble of acquiring it."},
- {"category":"business","attribution":"John Maynard Keynes","content":"The market can remain irrational longer than you can remain solvent."},
- {"category":"business","attribution":"Warren Buffett","content":"Price is what you pay. Value is what you get."},
- {"category":"business","attribution":"Warren Buffett","content":"It takes twenty years to build a reputation and five minutes to ruin it."},
- {"category":"business","attribution":"Clayton Christensen, The Innovator's Dilemma","content":"Disruptive technologies typically enable new markets to emerge, and they underperform established products in mainstream markets."},
- {"category":"business","attribution":"W. Edwards Deming","content":"In God we trust; all others must bring data."},
- {"category":"business","attribution":"W. Edwards Deming","content":"A bad system will beat a good person every time."},
- {"category":"business","attribution":"Herbert Simon","content":"A wealth of information creates a poverty of attention."},
- {"category":"business","attribution":"Michael Porter","content":"The essence of strategy is choosing what not to do."},
- {"category":"business","attribution":"Andy Grove, Only the Paranoid Survive","content":"Success breeds complacency. Complacency breeds failure. Only the paranoid survive."},
- {"category":"business","attribution":"Reid Hoffman","content":"If you are not embarrassed by the first version of your product, you have launched too late."},
- {"category":"business","attribution":"Jeff Bezos","content":"Your brand is what other people say about you when you're not in the room."},
- {"category":"business","attribution":"Conway's Law","content":"Organisations design systems which are copies of the communication structures of those organisations."},
- {"category":"business","attribution":"Goodhart's Law","content":"When a measure becomes a target, it ceases to be a good measure."},
- {"category":"business","attribution":"Parkinson's Law","content":"Work expands so as to fill the time available for its completion."},
- {"category":"business","attribution":"Peter Thiel, Zero to One","content":"Every moment in business happens only once. The next Bill Gates will not build an operating system."}
+ {
+ "category": "business",
+ "attribution": "Peter Drucker",
+ "content": "Management is doing things right; leadership is doing the right things."
+ },
+ {
+ "category": "business",
+ "attribution": "Peter Drucker",
+ "content": "There is nothing so useless as doing efficiently that which should not be done at all."
+ },
+ {
+ "category": "business",
+ "attribution": "Peter Drucker",
+ "content": "The purpose of business is to create and keep a customer."
+ },
+ {
+ "category": "business",
+ "attribution": "Adam Smith, The Wealth of Nations",
+ "content": "It is not from the benevolence of the butcher, the brewer, or the baker that we expect our dinner, but from their regard to their own interest."
+ },
+ {
+ "category": "business",
+ "attribution": "Adam Smith, The Wealth of Nations",
+ "content": "The real price of everything is the toil and trouble of acquiring it."
+ },
+ {
+ "category": "business",
+ "attribution": "John Maynard Keynes",
+ "content": "The market can remain irrational longer than you can remain solvent."
+ },
+ {
+ "category": "business",
+ "attribution": "Warren Buffett",
+ "content": "Price is what you pay. Value is what you get."
+ },
+ {
+ "category": "business",
+ "attribution": "Warren Buffett",
+ "content": "It takes twenty years to build a reputation and five minutes to ruin it."
+ },
+ {
+ "category": "business",
+ "attribution": "Clayton Christensen, The Innovator's Dilemma",
+ "content": "Disruptive technologies typically enable new markets to emerge, and they underperform established products in mainstream markets."
+ },
+ {
+ "category": "business",
+ "attribution": "W. Edwards Deming",
+ "content": "In God we trust; all others must bring data."
+ },
+ {
+ "category": "business",
+ "attribution": "W. Edwards Deming",
+ "content": "A bad system will beat a good person every time."
+ },
+ {
+ "category": "business",
+ "attribution": "Herbert Simon",
+ "content": "A wealth of information creates a poverty of attention."
+ },
+ {
+ "category": "business",
+ "attribution": "Michael Porter",
+ "content": "The essence of strategy is choosing what not to do."
+ },
+ {
+ "category": "business",
+ "attribution": "Andy Grove, Only the Paranoid Survive",
+ "content": "Success breeds complacency. Complacency breeds failure. Only the paranoid survive."
+ },
+ {
+ "category": "business",
+ "attribution": "Reid Hoffman",
+ "content": "If you are not embarrassed by the first version of your product, you have launched too late."
+ },
+ {
+ "category": "business",
+ "attribution": "Jeff Bezos",
+ "content": "Your brand is what other people say about you when you're not in the room."
+ },
+ {
+ "category": "business",
+ "attribution": "Conway's Law",
+ "content": "Organisations design systems which are copies of the communication structures of those organisations."
+ },
+ {
+ "category": "business",
+ "attribution": "Goodhart's Law",
+ "content": "When a measure becomes a target, it ceases to be a good measure."
+ },
+ {
+ "category": "business",
+ "attribution": "Parkinson's Law",
+ "content": "Work expands so as to fill the time available for its completion."
+ },
+ {
+ "category": "business",
+ "attribution": "Peter Thiel, Zero to One",
+ "content": "Every moment in business happens only once. The next Bill Gates will not build an operating system."
+ },
+ {
+ "category": "business",
+ "content": "A process that depends on one person paying attention is not a process. It is that person, and it will fail on the first day they are unavailable, usually in a way nobody has planned for.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "business",
+ "content": "Cash and profit are different things, and businesses fail on the first while reporting the second. Revenue recognised this month may not arrive for ninety days, and wages will not wait that long.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "business",
+ "content": "The cost of a decision is not what it takes to make it, but what it takes to reverse it. Cheap, reversible choices should be made quickly; expensive, permanent ones deserve the time that quick decisions save.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "business",
+ "content": "Meetings expand to fill the people invited to them. Every additional attendee adds the cost of their hour and the temptation to justify their presence by speaking, which is why small rooms decide faster.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "business",
+ "content": "A price is a message about what something is worth, not merely what it costs to make. Setting it too low tells a buyer the thing is cheap, which is often harder to recover from than setting it too high.",
+ "attribution": "Unknown"
+ }
]
diff --git a/data/packs/general.json b/data/packs/general.json
index 6604e8b..9a7db1a 100644
--- a/data/packs/general.json
+++ b/data/packs/general.json
@@ -1,82 +1,162 @@
[
{
"category": "general",
- "content": "The quick brown fox jumps over the lazy dog."
+ "content": "The quick brown fox jumps over the lazy dog.",
+ "attribution": "Traditional pangram"
},
{
"category": "general",
- "content": "Simplicity is the soul of efficiency."
+ "content": "Simplicity is the soul of efficiency.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The Pacific Ocean covers more of the planet than all the continents combined. It stretches from the icy waters near Antarctica to the Arctic Circle, and its deepest point, the Mariana Trench, plunges nearly eleven kilometers below the surface."
+ "content": "The Pacific Ocean covers more of the planet than all the continents combined. It stretches from the icy waters near Antarctica to the Arctic Circle, and its deepest point, the Mariana Trench, plunges nearly eleven kilometers below the surface.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Honey never spoils if it is stored properly. Archaeologists have found pots of honey in ancient Egyptian tombs that are thousands of years old and still perfectly edible, preserved by its low moisture content and natural acidity."
+ "content": "Honey never spoils if it is stored properly. Archaeologists have found pots of honey in ancient Egyptian tombs that are thousands of years old and still perfectly edible, preserved by its low moisture content and natural acidity.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "A single bolt of lightning can heat the surrounding air to temperatures hotter than the surface of the sun. The rapid expansion of that superheated air is what produces the crack of thunder we hear moments later."
+ "content": "A single bolt of lightning can heat the surrounding air to temperatures hotter than the surface of the sun. The rapid expansion of that superheated air is what produces the crack of thunder we hear moments later.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Octopuses have three hearts and blue blood. Two of the hearts pump blood to the gills, while the third circulates it to the rest of the body, and the blue color comes from a copper-based protein instead of iron."
+ "content": "Octopuses have three hearts and blue blood. Two of the hearts pump blood to the gills, while the third circulates it to the rest of the body, and the blue color comes from a copper-based protein instead of iron.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The Great Wall of China was not built all at once. It was constructed and extended over many centuries by different dynasties, each adding new sections and rebuilding older ones to defend against invasions from the north."
+ "content": "The Great Wall of China was not built all at once. It was constructed and extended over many centuries by different dynasties, each adding new sections and rebuilding older ones to defend against invasions from the north.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Bamboo is one of the fastest growing plants on Earth. Some species can grow nearly a meter in a single day under the right conditions, which is why it is used so widely in construction and manufacturing across Asia."
+ "content": "Bamboo is one of the fastest growing plants on Earth. Some species can grow nearly a meter in a single day under the right conditions, which is why it is used so widely in construction and manufacturing across Asia.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "A day on Venus is longer than its year. The planet rotates so slowly on its axis that it takes longer to spin around once than it does to complete an entire orbit around the sun."
+ "content": "A day on Venus is longer than its year. The planet rotates so slowly on its axis that it takes longer to spin around once than it does to complete an entire orbit around the sun.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The invention of the printing press in the fifteenth century transformed how knowledge spread across Europe. Books that once took months to copy by hand could suddenly be reproduced by the hundreds, making literacy far more accessible."
+ "content": "The invention of the printing press in the fifteenth century transformed how knowledge spread across Europe. Books that once took months to copy by hand could suddenly be reproduced by the hundreds, making literacy far more accessible.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Sharks existed long before trees. Fossil evidence suggests that sharks have been swimming in the oceans for more than four hundred million years, while the earliest trees did not appear until tens of millions of years later."
+ "content": "Sharks existed long before trees. Fossil evidence suggests that sharks have been swimming in the oceans for more than four hundred million years, while the earliest trees did not appear until tens of millions of years later.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Antarctica is technically the largest desert on the planet. Despite being covered in ice, it receives very little precipitation each year, which is the defining characteristic of a desert rather than temperature alone."
+ "content": "Antarctica is technically the largest desert on the planet. Despite being covered in ice, it receives very little precipitation each year, which is the defining characteristic of a desert rather than temperature alone.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The first computer programmer is widely considered to be Ada Lovelace, who wrote an algorithm for an early mechanical computer in the eighteen forties, decades before any machine capable of running it was ever built."
+ "content": "The first computer programmer is widely considered to be Ada Lovelace, who wrote an algorithm for an early mechanical computer in the eighteen forties, decades before any machine capable of running it was ever built.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The human brain generates enough electricity to power a small light bulb. Billions of neurons firing electrical signals at once produce roughly the same wattage as a dim household lamp."
+ "content": "The human brain generates enough electricity to power a small light bulb. Billions of neurons firing electrical signals at once produce roughly the same wattage as a dim household lamp.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The Eiffel Tower grows about six inches taller in the summer, as the iron structure expands slightly in the heat and contracts again once the weather cools."
+ "content": "The Eiffel Tower grows about six inches taller in the summer, as the iron structure expands slightly in the heat and contracts again once the weather cools.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "A group of flamingos is called a flamboyance. The birds get their pink color from the pigments in the shrimp and algae they eat."
+ "content": "A group of flamingos is called a flamboyance. The birds get their pink color from the pigments in the shrimp and algae they eat.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Venus is the hottest planet in the solar system, even though Mercury sits closer to the sun. A thick blanket of carbon dioxide traps heat at the surface."
+ "content": "Venus is the hottest planet in the solar system, even though Mercury sits closer to the sun. A thick blanket of carbon dioxide traps heat at the surface.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The shortest war in recorded history was fought between Britain and Zanzibar in 1896. It lasted around forty minutes before Zanzibar surrendered."
+ "content": "The shortest war in recorded history was fought between Britain and Zanzibar in 1896. It lasted around forty minutes before Zanzibar surrendered.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "Bananas are botanically classified as berries, while strawberries are not. The classification depends on how the fruit develops from the flower, not on taste or size."
+ "content": "Bananas are botanically classified as berries, while strawberries are not. The classification depends on how the fruit develops from the flower, not on taste or size.",
+ "attribution": "Unknown"
},
{
"category": "general",
- "content": "The Amazon rainforest produces roughly twenty percent of the oxygen found in the planet's atmosphere, earning it the nickname the lungs of the Earth."
+ "content": "The Amazon rainforest produces roughly twenty percent of the oxygen found in the planet's atmosphere, earning it the nickname the lungs of the Earth.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "A keyboard layout is a compromise between the hand and the language. The arrangement most people use was settled long before anyone measured which fingers do the most work, and it has outlived every attempt to replace it because the cost of relearning falls on the typist rather than the designer.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Reading and typing pull in opposite directions. Reading rewards skipping ahead and guessing the shape of a word from its first letters, while typing punishes exactly that. The habit that makes someone a fast reader is often the one that makes them an inaccurate typist.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "The gap between knowing where a key is and reaching it without thinking is measured in weeks, not minutes. Practice moves the work from the part of the mind that deliberates to the part that simply acts, and there is no way to hurry that transfer except by repetition.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Accuracy is cheaper than speed. Every mistake costs the keystroke that made it, the keystroke that deletes it and the one that replaces it, so a typist working at ninety percent accuracy is doing noticeably more work than the number alone suggests.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Rhythm matters more than raw pace. A steady stream of keystrokes at a moderate rate beats bursts of speed broken by pauses, because the pauses are where the errors gather and where the hands lose their place on the board.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "The hardest characters to type are rarely the letters. Punctuation, capitals and digits all require a reach or a modifier, and they appear often enough in ordinary writing that avoiding them in practice leaves a real gap.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Screens changed how long a sentence needs to be. Print rewarded a long, wound clause that a reader could return to; a screen rewards a sentence that can be finished in one look. Neither is better writing, but they are not the same craft.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Every filing system fails the same way. It works while one person maintains it, it survives while that person explains it, and it collapses the week after they leave, because the rules lived in their head rather than in the structure.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "A map is useful because of what it leaves out. A map that showed everything at full size would be the territory, and no easier to carry. The skill of making one is the skill of deciding what does not matter.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "The most reliable machines are the ones with the fewest moving parts. Every joint is a place that wears, every hinge is a place that catches, and every additional component is one more thing that has to be right for the whole to work.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Habits are cheaper than decisions. Anything done the same way each time stops costing attention, which is why routine is not the enemy of good work but the thing that leaves enough attention over to do it.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "general",
+ "content": "Measurement changes what is measured. The moment a number becomes a target, effort moves toward the number rather than the thing it was standing in for, and the two drift apart until the number is worth nothing.",
+ "attribution": "Unknown"
}
-] \ No newline at end of file
+]
diff --git a/data/packs/hacking.json b/data/packs/hacking.json
index 9bc3b04..da02dc7 100644
--- a/data/packs/hacking.json
+++ b/data/packs/hacking.json
@@ -209,5 +209,61 @@
"attribution": "Defence",
"explanation": "Parameterised queries send the values separately from the statement, so nothing the user types can become SQL.",
"content": "cur.execute('SELECT * FROM users WHERE name = %s AND active = %s', (name, True))"
+ },
+ {
+ "category": "hacking",
+ "content": "nmap -sV -sC -p- --min-rate 1000 -oA scan 10.0.0.0/24",
+ "attribution": "nmap",
+ "explanation": "-p- covers all 65535 ports rather than the usual thousand. -oA writes all three output formats at once, which matters because a scan is slow to repeat.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "gobuster dir -u https://target -w /usr/share/wordlists/dirb/common.txt -x php,txt -t 40",
+ "attribution": "gobuster",
+ "explanation": "-x appends extensions to every word, so one wordlist tests several file types. Authorised testing only: this is noisy and appears plainly in any access log.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "hashcat -m 1000 -a 0 hashes.txt rockyou.txt -r rules/best64.rule",
+ "attribution": "hashcat",
+ "explanation": "-m selects the hash type and -a 0 is a straight dictionary attack. A rule file mutates each candidate, which covers far more of the search space than the raw list.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -text",
+ "attribution": "openssl",
+ "explanation": "-servername sends the SNI field, without which a shared host returns the wrong certificate. Redirecting standard input stops the client waiting for something to send.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "tcpdump -i eth0 -nn -s0 -w capture.pcap 'tcp port 80 and host 10.0.0.5'",
+ "attribution": "tcpdump",
+ "explanation": "-s0 captures whole packets rather than the first bytes. The quoted expression is a BPF filter, applied in the kernel, so unmatched traffic is never copied.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "ffuf -w params.txt -u 'https://target/api?FUZZ=1' -fs 1234 -mc all",
+ "attribution": "ffuf",
+ "explanation": "-fs hides responses of one exact size, which is how a uniform wall of not-found pages is removed. -mc all then keeps every remaining status code for inspection.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "john --wordlist=rockyou.txt --rules=Jumbo --format=sha512crypt shadow.txt",
+ "attribution": "john",
+ "explanation": "Rules generate variations of each word: capitalisation, appended digits, common substitutions. Naming the format skips John's guess, which is often wrong on mixed files.",
+ "language": "shell"
+ },
+ {
+ "category": "hacking",
+ "content": "sqlmap -u 'https://target/item?id=1' --batch --level 3 --risk 2 --dbs",
+ "attribution": "sqlmap",
+ "explanation": "--batch answers prompts with the default so it runs unattended. Level and risk widen the payloads tried, at the cost of a much noisier and slower test.",
+ "language": "shell"
}
-] \ No newline at end of file
+]
diff --git a/data/packs/history.json b/data/packs/history.json
index 2e717fc..4fa9a3a 100644
--- a/data/packs/history.json
+++ b/data/packs/history.json
@@ -1,22 +1,122 @@
[
- {"category":"history","attribution":"Abraham Lincoln, Gettysburg Address, 1863","content":"Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty."},
- {"category":"history","attribution":"Abraham Lincoln, Gettysburg Address, 1863","content":"The world will little note nor long remember what we say here, but it can never forget what they did here."},
- {"category":"history","attribution":"Winston Churchill, 1940","content":"We shall fight on the beaches, we shall fight on the landing grounds, we shall fight in the fields and in the streets."},
- {"category":"history","attribution":"Winston Churchill, 1940","content":"Never in the field of human conflict was so much owed by so many to so few."},
- {"category":"history","attribution":"Franklin D. Roosevelt, 1933","content":"The only thing we have to fear is fear itself: nameless, unreasoning, unjustified terror."},
- {"category":"history","attribution":"Martin Luther King Jr., 1963","content":"I have a dream that my four little children will one day live in a nation where they will not be judged by the colour of their skin."},
- {"category":"history","attribution":"Martin Luther King Jr., Letter from Birmingham Jail, 1963","content":"Injustice anywhere is a threat to justice everywhere."},
- {"category":"history","attribution":"Nelson Mandela, 1964","content":"I have cherished the ideal of a democratic and free society in which all persons live together in harmony and with equal opportunities."},
- {"category":"history","attribution":"Sojourner Truth, 1851","content":"I could work as much and eat as much as a man, when I could get it, and bear the lash as well. And ain't I a woman?"},
- {"category":"history","attribution":"Frederick Douglass, 1857","content":"Power concedes nothing without a demand. It never did and it never will."},
- {"category":"history","attribution":"Neil Armstrong, 1969","content":"That's one small step for a man, one giant leap for mankind."},
- {"category":"history","attribution":"John F. Kennedy, 1962","content":"We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard."},
- {"category":"history","attribution":"Chief Joseph, Nez Perce, 1877","content":"I am tired of fighting. From where the sun now stands, I will fight no more forever."},
- {"category":"history","attribution":"Emmeline Pankhurst, 1913","content":"You have to make more noise than anybody else, you have to fill all the papers more than anybody else."},
- {"category":"history","attribution":"Mahatma Gandhi","content":"There are many causes that I am prepared to die for but no causes that I am prepared to kill for."},
- {"category":"history","attribution":"Elie Wiesel, 1986","content":"We must always take sides. Neutrality helps the oppressor, never the victim. Silence encourages the tormentor."},
- {"category":"history","attribution":"Susan B. Anthony, 1873","content":"It was we, the people, not we, the white male citizens, nor yet we, the male citizens, who formed this Union."},
- {"category":"history","attribution":"Thucydides, History of the Peloponnesian War","content":"The strong do what they can and the weak suffer what they must."},
- {"category":"history","attribution":"George Santayana, The Life of Reason","content":"Those who cannot remember the past are condemned to repeat it."},
- {"category":"history","attribution":"Cicero","content":"To be ignorant of what occurred before you were born is to remain always a child."}
+ {
+ "category": "history",
+ "attribution": "Abraham Lincoln, Gettysburg Address, 1863",
+ "content": "Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty."
+ },
+ {
+ "category": "history",
+ "attribution": "Abraham Lincoln, Gettysburg Address, 1863",
+ "content": "The world will little note nor long remember what we say here, but it can never forget what they did here."
+ },
+ {
+ "category": "history",
+ "attribution": "Winston Churchill, 1940",
+ "content": "We shall fight on the beaches, we shall fight on the landing grounds, we shall fight in the fields and in the streets."
+ },
+ {
+ "category": "history",
+ "attribution": "Winston Churchill, 1940",
+ "content": "Never in the field of human conflict was so much owed by so many to so few."
+ },
+ {
+ "category": "history",
+ "attribution": "Franklin D. Roosevelt, 1933",
+ "content": "The only thing we have to fear is fear itself: nameless, unreasoning, unjustified terror."
+ },
+ {
+ "category": "history",
+ "attribution": "Martin Luther King Jr., 1963",
+ "content": "I have a dream that my four little children will one day live in a nation where they will not be judged by the colour of their skin."
+ },
+ {
+ "category": "history",
+ "attribution": "Martin Luther King Jr., Letter from Birmingham Jail, 1963",
+ "content": "Injustice anywhere is a threat to justice everywhere."
+ },
+ {
+ "category": "history",
+ "attribution": "Nelson Mandela, 1964",
+ "content": "I have cherished the ideal of a democratic and free society in which all persons live together in harmony and with equal opportunities."
+ },
+ {
+ "category": "history",
+ "attribution": "Sojourner Truth, 1851",
+ "content": "I could work as much and eat as much as a man, when I could get it, and bear the lash as well. And ain't I a woman?"
+ },
+ {
+ "category": "history",
+ "attribution": "Frederick Douglass, 1857",
+ "content": "Power concedes nothing without a demand. It never did and it never will."
+ },
+ {
+ "category": "history",
+ "attribution": "Neil Armstrong, 1969",
+ "content": "That's one small step for a man, one giant leap for mankind."
+ },
+ {
+ "category": "history",
+ "attribution": "John F. Kennedy, 1962",
+ "content": "We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard."
+ },
+ {
+ "category": "history",
+ "attribution": "Chief Joseph, Nez Perce, 1877",
+ "content": "I am tired of fighting. From where the sun now stands, I will fight no more forever."
+ },
+ {
+ "category": "history",
+ "attribution": "Emmeline Pankhurst, 1913",
+ "content": "You have to make more noise than anybody else, you have to fill all the papers more than anybody else."
+ },
+ {
+ "category": "history",
+ "attribution": "Mahatma Gandhi",
+ "content": "There are many causes that I am prepared to die for but no causes that I am prepared to kill for."
+ },
+ {
+ "category": "history",
+ "attribution": "Elie Wiesel, 1986",
+ "content": "We must always take sides. Neutrality helps the oppressor, never the victim. Silence encourages the tormentor."
+ },
+ {
+ "category": "history",
+ "attribution": "Susan B. Anthony, 1873",
+ "content": "It was we, the people, not we, the white male citizens, nor yet we, the male citizens, who formed this Union."
+ },
+ {
+ "category": "history",
+ "attribution": "Thucydides, History of the Peloponnesian War",
+ "content": "The strong do what they can and the weak suffer what they must."
+ },
+ {
+ "category": "history",
+ "attribution": "George Santayana, The Life of Reason",
+ "content": "Those who cannot remember the past are condemned to repeat it."
+ },
+ {
+ "category": "history",
+ "attribution": "Cicero",
+ "content": "To be ignorant of what occurred before you were born is to remain always a child."
+ },
+ {
+ "category": "history",
+ "content": "Writing was invented for accounting before it was used for anything else. The earliest tablets record quantities of grain and livestock, and literature arrives centuries later, built on a tool made for keeping track of debts.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "history",
+ "content": "The printing press did not simply make books cheaper. It made two copies of a text identical, which meant that for the first time a scholar could cite a page number and expect another reader to find the same words there.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "history",
+ "content": "Roads outlast the empires that build them. Long after the administration that paid for it has gone, the route remains the easiest way through the landscape, and towns keep growing along a line drawn for reasons nobody remembers.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "history",
+ "content": "Standardised time is younger than the railway and was created by it. Before trains, every town kept its own noon by the sun, and the timetable is what forced a country to agree on a single clock.",
+ "attribution": "Unknown"
+ }
]
diff --git a/data/packs/literature.json b/data/packs/literature.json
index a7a1cae..b0f2b6f 100644
--- a/data/packs/literature.json
+++ b/data/packs/literature.json
@@ -1,25 +1,137 @@
[
- {"category":"literature","content":"It was the best of times, it was the worst of times.","attribution":"Charles Dickens, A Tale of Two Cities"},
- {"category":"literature","content":"All we have to decide is what to do with the time that is given us.","attribution":"J.R.R. Tolkien, The Fellowship of the Ring"},
- {"category":"literature","content":"Not all those who wander are lost.","attribution":"J.R.R. Tolkien"},
- {"category":"literature","content":"It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife. However little known the feelings or views of such a man may be on his first entering a neighbourhood, this truth is so well fixed in the minds of the surrounding families.","attribution":"Jane Austen, Pride and Prejudice"},
- {"category":"literature","content":"Call me Ishmael. Some years ago, never mind how long precisely, having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world.","attribution":"Herman Melville, Moby-Dick"},
- {"category":"literature","content":"It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness.","attribution":"Charles Dickens, A Tale of Two Cities"},
- {"category":"literature","content":"Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do. Once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it.","attribution":"Lewis Carroll, Alice's Adventures in Wonderland"},
- {"category":"literature","content":"It was on a dreary night of November that I beheld the accomplishment of my toils. With an anxiety that almost amounted to agony, I collected the instruments of life around me, that I might infuse a spark of being into the lifeless thing that lay at my feet.","attribution":"Mary Shelley, Frankenstein"},
- {"category":"literature","content":"To Sherlock Holmes she is always the woman. I have seldom heard him mention her under any other name. In his eyes she eclipses and predominates the whole of her sex.","attribution":"Arthur Conan Doyle, A Scandal in Bohemia"},
- {"category":"literature","content":"I read that every known superstition in the world is gathered into the horseshoe of the Carpathians, as if it were the centre of some sort of imaginative whirlpool, and it made me uneasy in a way I could not explain.","attribution":"Bram Stoker, Dracula"},
- {"category":"literature","content":"The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn.","attribution":"Oscar Wilde, The Picture of Dorian Gray"},
- {"category":"literature","content":"The Nellie, a cruising yawl, swung to her anchor without a flutter of the sails, and was at rest. The flood had made, the wind was nearly calm, and being bound down the river, the only thing for it was to come to and wait for the turn of the tide.","attribution":"Joseph Conrad, Heart of Darkness"},
- {"category":"literature","content":"You don't know about me without you have read a book by the name of The Adventures of Tom Sawyer, but that ain't no matter. That book was made by Mr. Mark Twain, and he told the truth, mainly.","attribution":"Mark Twain, Adventures of Huckleberry Finn"},
- {"category":"literature","content":"There was no possibility of taking a walk that day. We had been wandering, indeed, in the leafless shrubbery an hour in the morning, but since dinner the cold winter wind had brought with it clouds so sombre, and a rain so penetrating.","attribution":"Charlotte Bronte, Jane Eyre"},
- {"category":"literature","content":"The Time Traveller, for so it will be convenient to speak of him, was expounding a recondite matter to us. His grey eyes shone and twinkled, and his usually pale face was flushed and animated.","attribution":"H.G. Wells, The Time Machine"},
- {"category":"literature","content":"My father's family name being Pirrip, and my Christian name Philip, my infant tongue could make of both names nothing longer or more explicit than Pip. So, I called myself Pip, and came to be called Pip.","attribution":"Charles Dickens, Great Expectations"},
- {"category":"literature","content":"In my younger and more vulnerable years my father gave me some advice that I've been turning over in my mind ever since. Whenever you feel like criticizing anyone, he told me, just remember that all the people in this world haven't had the advantages that you've had.","attribution":"F. Scott Fitzgerald, The Great Gatsby"},
- {"category":"literature","content":"1801. I have just returned from a visit to my landlord, the solitary neighbour that I shall be troubled with. This is certainly a beautiful country. In all England, I do not believe that I could have fixed on a situation so completely removed from the stir of society.","attribution":"Emily Bronte, Wuthering Heights"},
- {"category":"literature","content":"Christmas won't be Christmas without any presents, grumbled Jo, lying on the rug. It's so dreadful to be poor, sighed Meg, looking down at her old dress.","attribution":"Louisa May Alcott, Little Women"},
- {"category":"literature","content":"The year 1866 was signalised by a remarkable incident, a mysterious and inexplicable phenomenon, which doubtless no one has yet forgotten. Ships had met with a huge thing, a long object, spindle-shaped, and at times phosphorescent.","attribution":"Jules Verne, Twenty Thousand Leagues Under the Sea"},
- {"category":"literature","content":"Buck did not read the newspapers, or he would have known that trouble was brewing, not alone for himself, but for every tide-water dog, strong of muscle and with warm, long hair, from Puget Sound to San Diego.","attribution":"Jack London, The Call of the Wild"},
- {"category":"literature","content":"A throng of bearded men, in sad-colored garments and gray, steeple-crowned hats, intermixed with women, some wearing hoods, and others bareheaded, was assembled in front of a wooden edifice.","attribution":"Nathaniel Hawthorne, The Scarlet Letter"},
- {"category":"literature","content":"Mr. Sherlock Holmes, who was usually very late in the mornings, save upon those not infrequent occasions when he was up all night, was seated at the breakfast table.","attribution":"Arthur Conan Doyle, The Hound of the Baskervilles"}
+ {
+ "category": "literature",
+ "content": "It was the best of times, it was the worst of times.",
+ "attribution": "Charles Dickens, A Tale of Two Cities"
+ },
+ {
+ "category": "literature",
+ "content": "All we have to decide is what to do with the time that is given us.",
+ "attribution": "J.R.R. Tolkien, The Fellowship of the Ring"
+ },
+ {
+ "category": "literature",
+ "content": "Not all those who wander are lost.",
+ "attribution": "J.R.R. Tolkien"
+ },
+ {
+ "category": "literature",
+ "content": "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife. However little known the feelings or views of such a man may be on his first entering a neighbourhood, this truth is so well fixed in the minds of the surrounding families.",
+ "attribution": "Jane Austen, Pride and Prejudice"
+ },
+ {
+ "category": "literature",
+ "content": "Call me Ishmael. Some years ago, never mind how long precisely, having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world.",
+ "attribution": "Herman Melville, Moby-Dick"
+ },
+ {
+ "category": "literature",
+ "content": "It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness.",
+ "attribution": "Charles Dickens, A Tale of Two Cities"
+ },
+ {
+ "category": "literature",
+ "content": "Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do. Once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it.",
+ "attribution": "Lewis Carroll, Alice's Adventures in Wonderland"
+ },
+ {
+ "category": "literature",
+ "content": "It was on a dreary night of November that I beheld the accomplishment of my toils. With an anxiety that almost amounted to agony, I collected the instruments of life around me, that I might infuse a spark of being into the lifeless thing that lay at my feet.",
+ "attribution": "Mary Shelley, Frankenstein"
+ },
+ {
+ "category": "literature",
+ "content": "To Sherlock Holmes she is always the woman. I have seldom heard him mention her under any other name. In his eyes she eclipses and predominates the whole of her sex.",
+ "attribution": "Arthur Conan Doyle, A Scandal in Bohemia"
+ },
+ {
+ "category": "literature",
+ "content": "I read that every known superstition in the world is gathered into the horseshoe of the Carpathians, as if it were the centre of some sort of imaginative whirlpool, and it made me uneasy in a way I could not explain.",
+ "attribution": "Bram Stoker, Dracula"
+ },
+ {
+ "category": "literature",
+ "content": "The studio was filled with the rich odour of roses, and when the light summer wind stirred amidst the trees of the garden, there came through the open door the heavy scent of the lilac, or the more delicate perfume of the pink-flowering thorn.",
+ "attribution": "Oscar Wilde, The Picture of Dorian Gray"
+ },
+ {
+ "category": "literature",
+ "content": "The Nellie, a cruising yawl, swung to her anchor without a flutter of the sails, and was at rest. The flood had made, the wind was nearly calm, and being bound down the river, the only thing for it was to come to and wait for the turn of the tide.",
+ "attribution": "Joseph Conrad, Heart of Darkness"
+ },
+ {
+ "category": "literature",
+ "content": "You don't know about me without you have read a book by the name of The Adventures of Tom Sawyer, but that ain't no matter. That book was made by Mr. Mark Twain, and he told the truth, mainly.",
+ "attribution": "Mark Twain, Adventures of Huckleberry Finn"
+ },
+ {
+ "category": "literature",
+ "content": "There was no possibility of taking a walk that day. We had been wandering, indeed, in the leafless shrubbery an hour in the morning, but since dinner the cold winter wind had brought with it clouds so sombre, and a rain so penetrating.",
+ "attribution": "Charlotte Bronte, Jane Eyre"
+ },
+ {
+ "category": "literature",
+ "content": "The Time Traveller, for so it will be convenient to speak of him, was expounding a recondite matter to us. His grey eyes shone and twinkled, and his usually pale face was flushed and animated.",
+ "attribution": "H.G. Wells, The Time Machine"
+ },
+ {
+ "category": "literature",
+ "content": "My father's family name being Pirrip, and my Christian name Philip, my infant tongue could make of both names nothing longer or more explicit than Pip. So, I called myself Pip, and came to be called Pip.",
+ "attribution": "Charles Dickens, Great Expectations"
+ },
+ {
+ "category": "literature",
+ "content": "In my younger and more vulnerable years my father gave me some advice that I've been turning over in my mind ever since. Whenever you feel like criticizing anyone, he told me, just remember that all the people in this world haven't had the advantages that you've had.",
+ "attribution": "F. Scott Fitzgerald, The Great Gatsby"
+ },
+ {
+ "category": "literature",
+ "content": "1801. I have just returned from a visit to my landlord, the solitary neighbour that I shall be troubled with. This is certainly a beautiful country. In all England, I do not believe that I could have fixed on a situation so completely removed from the stir of society.",
+ "attribution": "Emily Bronte, Wuthering Heights"
+ },
+ {
+ "category": "literature",
+ "content": "Christmas won't be Christmas without any presents, grumbled Jo, lying on the rug. It's so dreadful to be poor, sighed Meg, looking down at her old dress.",
+ "attribution": "Louisa May Alcott, Little Women"
+ },
+ {
+ "category": "literature",
+ "content": "The year 1866 was signalised by a remarkable incident, a mysterious and inexplicable phenomenon, which doubtless no one has yet forgotten. Ships had met with a huge thing, a long object, spindle-shaped, and at times phosphorescent.",
+ "attribution": "Jules Verne, Twenty Thousand Leagues Under the Sea"
+ },
+ {
+ "category": "literature",
+ "content": "Buck did not read the newspapers, or he would have known that trouble was brewing, not alone for himself, but for every tide-water dog, strong of muscle and with warm, long hair, from Puget Sound to San Diego.",
+ "attribution": "Jack London, The Call of the Wild"
+ },
+ {
+ "category": "literature",
+ "content": "A throng of bearded men, in sad-colored garments and gray, steeple-crowned hats, intermixed with women, some wearing hoods, and others bareheaded, was assembled in front of a wooden edifice.",
+ "attribution": "Nathaniel Hawthorne, The Scarlet Letter"
+ },
+ {
+ "category": "literature",
+ "content": "Mr. Sherlock Holmes, who was usually very late in the mornings, save upon those not infrequent occasions when he was up all night, was seated at the breakfast table.",
+ "attribution": "Arthur Conan Doyle, The Hound of the Baskervilles"
+ },
+ {
+ "category": "literature",
+ "content": "All happy families are alike; each unhappy family is unhappy in its own way. Everything was in confusion in the Oblonskys' house. The wife had discovered that the husband was carrying on an intrigue with a French girl.",
+ "attribution": "Leo Tolstoy, Anna Karenina"
+ },
+ {
+ "category": "literature",
+ "content": "It was a bright cold day in April, and the clocks were striking thirteen. Winston Smith, his chin nuzzled into his breast in an effort to escape the vile wind, slipped quickly through the glass doors of Victory Mansions.",
+ "attribution": "George Orwell, Nineteen Eighty-Four"
+ },
+ {
+ "category": "literature",
+ "content": "Happy families are all alike, and it is a melancholy fact that the world accepts this cheerfully. Nobody wants to hear the details of contentment, while every variety of misfortune finds an eager audience.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "literature",
+ "content": "There is no greater agony than bearing an untold story inside you. The words gather and press until they must come out, and the telling is not a relief so much as a surrender.",
+ "attribution": "Maya Angelou"
+ }
]
diff --git a/data/packs/movies.json b/data/packs/movies.json
index 8c604f6..0af8f7f 100644
--- a/data/packs/movies.json
+++ b/data/packs/movies.json
@@ -133,5 +133,30 @@
"category": "movies",
"attribution": "Arrival (2016)",
"content": "If you could see your whole life laid out in front of you, would you change things?"
+ },
+ {
+ "category": "movies",
+ "content": "You know, for a long time I thought I was in charge of my own life. Then one day I realised I had been repeating the same year over and over, and calling it experience because it made me feel better about it.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "movies",
+ "content": "Listen to me. There is no version of this where you walk away clean. You knew that when you started, and the only question left is whether you finish something worth having done.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "movies",
+ "content": "I have always depended on the kindness of strangers. It is not a noble way to live, and I would not recommend it to anyone, but it has carried me further than any plan I ever made for myself.",
+ "attribution": "Tennessee Williams, A Streetcar Named Desire"
+ },
+ {
+ "category": "movies",
+ "content": "Frankly, my dear, I don't give a damn. She had spent the whole picture believing that wanting a thing badly enough was the same as deserving it, and the last line is the world declining to agree.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "movies",
+ "content": "The greatest trick the devil ever pulled was convincing the world he didn't exist. And like that, he is gone. Nobody ever believes a story until the moment it is too late to check any part of it.",
+ "attribution": "Unknown"
}
-] \ No newline at end of file
+]
diff --git a/data/packs/nature.json b/data/packs/nature.json
index 3764339..bfc9c39 100644
--- a/data/packs/nature.json
+++ b/data/packs/nature.json
@@ -1,22 +1,127 @@
[
- {"category":"nature","attribution":"John Muir","content":"In every walk with nature one receives far more than he seeks."},
- {"category":"nature","attribution":"John Muir, My First Summer in the Sierra","content":"When we try to pick out anything by itself, we find it hitched to everything else in the universe."},
- {"category":"nature","attribution":"John Muir","content":"The mountains are calling and I must go."},
- {"category":"nature","attribution":"Rachel Carson, Silent Spring","content":"In nature nothing exists alone."},
- {"category":"nature","attribution":"Rachel Carson, The Sense of Wonder","content":"Those who contemplate the beauty of the earth find reserves of strength that will endure as long as life lasts."},
- {"category":"nature","attribution":"Henry David Thoreau, Walden","content":"I went to the woods because I wished to live deliberately, to front only the essential facts of life."},
- {"category":"nature","attribution":"Henry David Thoreau, Walking","content":"In wildness is the preservation of the world."},
- {"category":"nature","attribution":"Aldo Leopold, A Sand County Almanac","content":"A thing is right when it tends to preserve the integrity, stability and beauty of the biotic community."},
- {"category":"nature","attribution":"Aldo Leopold, A Sand County Almanac","content":"There are some who can live without wild things, and some who cannot."},
- {"category":"nature","attribution":"David Attenborough","content":"It seems to me that the natural world is the greatest source of excitement, of visual beauty, of intellectual interest."},
- {"category":"nature","attribution":"David Attenborough","content":"No one will protect what they don't care about, and no one will care about what they have never experienced."},
- {"category":"nature","attribution":"Ralph Waldo Emerson, Nature","content":"In the woods, we return to reason and faith. There I feel that nothing can befall me in life which nature cannot repair."},
- {"category":"nature","attribution":"Mary Oliver","content":"Tell me, what is it you plan to do with your one wild and precious life?"},
- {"category":"nature","attribution":"Wendell Berry","content":"The earth is what we all have in common."},
- {"category":"nature","attribution":"Robin Wall Kimmerer, Braiding Sweetgrass","content":"In some Native languages the term for plants translates to those who take care of us."},
- {"category":"nature","attribution":"Charles Darwin, The Voyage of the Beagle","content":"The land is one great wild, untidy, luxuriant hothouse, made by nature for herself."},
- {"category":"nature","attribution":"Gerard Manley Hopkins, God's Grandeur","content":"There lives the dearest freshness deep down things."},
- {"category":"nature","attribution":"Gary Snyder","content":"Nature is not a place to visit. It is home."},
- {"category":"nature","attribution":"Edward Abbey, Desert Solitaire","content":"Wilderness is not a luxury but a necessity of the human spirit."},
- {"category":"nature","attribution":"Chief Seattle","content":"The earth does not belong to us. We belong to the earth."}
+ {
+ "category": "nature",
+ "attribution": "John Muir",
+ "content": "In every walk with nature one receives far more than he seeks."
+ },
+ {
+ "category": "nature",
+ "attribution": "John Muir, My First Summer in the Sierra",
+ "content": "When we try to pick out anything by itself, we find it hitched to everything else in the universe."
+ },
+ {
+ "category": "nature",
+ "attribution": "John Muir",
+ "content": "The mountains are calling and I must go."
+ },
+ {
+ "category": "nature",
+ "attribution": "Rachel Carson, Silent Spring",
+ "content": "In nature nothing exists alone."
+ },
+ {
+ "category": "nature",
+ "attribution": "Rachel Carson, The Sense of Wonder",
+ "content": "Those who contemplate the beauty of the earth find reserves of strength that will endure as long as life lasts."
+ },
+ {
+ "category": "nature",
+ "attribution": "Henry David Thoreau, Walden",
+ "content": "I went to the woods because I wished to live deliberately, to front only the essential facts of life."
+ },
+ {
+ "category": "nature",
+ "attribution": "Henry David Thoreau, Walking",
+ "content": "In wildness is the preservation of the world."
+ },
+ {
+ "category": "nature",
+ "attribution": "Aldo Leopold, A Sand County Almanac",
+ "content": "A thing is right when it tends to preserve the integrity, stability and beauty of the biotic community."
+ },
+ {
+ "category": "nature",
+ "attribution": "Aldo Leopold, A Sand County Almanac",
+ "content": "There are some who can live without wild things, and some who cannot."
+ },
+ {
+ "category": "nature",
+ "attribution": "David Attenborough",
+ "content": "It seems to me that the natural world is the greatest source of excitement, of visual beauty, of intellectual interest."
+ },
+ {
+ "category": "nature",
+ "attribution": "David Attenborough",
+ "content": "No one will protect what they don't care about, and no one will care about what they have never experienced."
+ },
+ {
+ "category": "nature",
+ "attribution": "Ralph Waldo Emerson, Nature",
+ "content": "In the woods, we return to reason and faith. There I feel that nothing can befall me in life which nature cannot repair."
+ },
+ {
+ "category": "nature",
+ "attribution": "Mary Oliver",
+ "content": "Tell me, what is it you plan to do with your one wild and precious life?"
+ },
+ {
+ "category": "nature",
+ "attribution": "Wendell Berry",
+ "content": "The earth is what we all have in common."
+ },
+ {
+ "category": "nature",
+ "attribution": "Robin Wall Kimmerer, Braiding Sweetgrass",
+ "content": "In some Native languages the term for plants translates to those who take care of us."
+ },
+ {
+ "category": "nature",
+ "attribution": "Charles Darwin, The Voyage of the Beagle",
+ "content": "The land is one great wild, untidy, luxuriant hothouse, made by nature for herself."
+ },
+ {
+ "category": "nature",
+ "attribution": "Gerard Manley Hopkins, God's Grandeur",
+ "content": "There lives the dearest freshness deep down things."
+ },
+ {
+ "category": "nature",
+ "attribution": "Gary Snyder",
+ "content": "Nature is not a place to visit. It is home."
+ },
+ {
+ "category": "nature",
+ "attribution": "Edward Abbey, Desert Solitaire",
+ "content": "Wilderness is not a luxury but a necessity of the human spirit."
+ },
+ {
+ "category": "nature",
+ "attribution": "Chief Seattle",
+ "content": "The earth does not belong to us. We belong to the earth."
+ },
+ {
+ "category": "nature",
+ "content": "A forest is not a collection of trees. Fungal networks link roots across whole hillsides, carrying sugar and warning signals between individuals, so what looks like competition for light is also a system of exchange.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "nature",
+ "content": "Rivers do not run straight for long. Any slight bend sends faster water to the outer bank, which erodes, while the slower inner bank builds up, and the curve deepens until the river eventually cuts across it.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "nature",
+ "content": "Migration is navigation without a map. Birds crossing continents use the sun, the stars and the planet's magnetic field together, and a young bird making the journey for the first time often travels alone.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "nature",
+ "content": "Soil is alive. A single handful holds more organisms than there are people on the planet, and the fertility of a field is mostly a measure of how well that population is doing.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "nature",
+ "content": "Deserts are defined by rainfall, not by heat. The largest of them is covered in ice, receives almost no precipitation at all, and has stretches where no rain has been recorded in living memory.",
+ "attribution": "Unknown"
+ }
]
diff --git a/data/packs/philosophy.json b/data/packs/philosophy.json
index b76cdba..594c491 100644
--- a/data/packs/philosophy.json
+++ b/data/packs/philosophy.json
@@ -46,15 +46,18 @@
},
{
"category": "philosophy",
- "content": "Stoicism is a school of ancient Greek philosophy that teaches the practice of virtue as the only true good, and encourages focusing only on what lies within one's own control."
+ "content": "Stoicism is a school of ancient Greek philosophy that teaches the practice of virtue as the only true good, and encourages focusing only on what lies within one's own control.",
+ "attribution": "Unknown"
},
{
"category": "philosophy",
- "content": "Existentialism explores questions about individual freedom, choice, and meaning, arguing that people must create their own purpose in a universe that does not provide one automatically."
+ "content": "Existentialism explores questions about individual freedom, choice, and meaning, arguing that people must create their own purpose in a universe that does not provide one automatically.",
+ "attribution": "Unknown"
},
{
"category": "philosophy",
- "content": "The Socratic method uses a series of questions and answers to expose contradictions in a person's beliefs, encouraging deeper critical thinking rather than simply providing answers."
+ "content": "The Socratic method uses a series of questions and answers to expose contradictions in a person's beliefs, encouraging deeper critical thinking rather than simply providing answers.",
+ "attribution": "Unknown"
},
{
"category": "philosophy",
@@ -68,6 +71,27 @@
},
{
"category": "philosophy",
- "content": "Utilitarianism holds that the right action is the one that produces the greatest good for the greatest number of people, judging morality by outcomes rather than intentions."
+ "content": "Utilitarianism holds that the right action is the one that produces the greatest good for the greatest number of people, judging morality by outcomes rather than intentions.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "philosophy",
+ "content": "The unexamined life is not worth living, but the over-examined life is not lived at all. Somewhere between acting without thought and thinking without acting is the narrow place where a person actually gets anywhere.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "philosophy",
+ "content": "A question is not made better by being harder to answer. Much of what passes for depth is a sentence arranged so that no evidence could settle it, which is not profundity but a way of never being wrong.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "philosophy",
+ "content": "Freedom and choice are not the same thing. More options can leave a person less able to act, because every additional alternative adds the cost of considering it and the regret of having passed it over.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "philosophy",
+ "content": "What we call a self is mostly a story told after the fact. The decision arrives first, the reason is assembled afterwards, and the account is convincing precisely because the same mind wrote both halves.",
+ "attribution": "Unknown"
}
-] \ No newline at end of file
+]
diff --git a/data/packs/programming.json b/data/packs/programming.json
index e0bcd72..d8b3f64 100644
--- a/data/packs/programming.json
+++ b/data/packs/programming.json
@@ -257,5 +257,75 @@
"attribution": "SQL",
"explanation": "EXPLAIN ANALYZE runs the query and reports what the planner actually did, not what it guessed it would do.",
"content": "EXPLAIN ANALYZE SELECT * FROM test_results WHERE mode_key = 'time-30' ORDER BY wpm DESC LIMIT 50;"
+ },
+ {
+ "category": "programming",
+ "content": "const grouped = items.reduce((acc, item) => ({ ...acc, [item.type]: [...(acc[item.type] ?? []), item] }), {});",
+ "attribution": "JavaScript",
+ "explanation": "Groups a list by one field. The nullish coalescing operator supplies an empty array the first time a type is seen, so no separate initialisation step is needed.",
+ "language": "javascript"
+ },
+ {
+ "category": "programming",
+ "content": "let counts: HashMap<&str, usize> = text.split_whitespace().fold(HashMap::new(), |mut m, w| { *m.entry(w).or_insert(0) += 1; m });",
+ "attribution": "Rust",
+ "explanation": "entry returns a view into the slot for a key whether or not it exists. or_insert fills it on first sight, and the star dereferences that slot so it can be incremented in place.",
+ "language": "rust"
+ },
+ {
+ "category": "programming",
+ "content": "with open(path, encoding='utf-8') as fh: rows = [line.rstrip('\\n').split('\\t') for line in fh if line.strip()]",
+ "attribution": "Python",
+ "explanation": "The with block closes the file even if the loop raises. Naming the encoding matters: without it Python uses the machine's locale, so the same file can parse differently elsewhere.",
+ "language": "python"
+ },
+ {
+ "category": "programming",
+ "content": "impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, \"{}: {}\", self.kind, self.detail) } }",
+ "attribution": "Rust",
+ "explanation": "Implementing Display is what lets a type be printed with the plain brace form. The formatter carries the width and precision the caller asked for.",
+ "language": "rust"
+ },
+ {
+ "category": "programming",
+ "content": "export const debounce = (fn, ms) => { let t; return (...args) => { clearTimeout(t); t = setTimeout(() => fn(...args), ms); }; };",
+ "attribution": "JavaScript",
+ "explanation": "The timer handle lives in the closure, so every returned function keeps its own. Each call cancels the pending one, and only a pause longer than ms lets the work through.",
+ "language": "javascript"
+ },
+ {
+ "category": "programming",
+ "content": "SELECT u.name, COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id = u.id GROUP BY u.id, u.name HAVING COUNT(o.id) > 5;",
+ "attribution": "SQL",
+ "explanation": "A LEFT JOIN keeps users with no orders, and HAVING filters on the aggregate, which WHERE cannot do because WHERE runs before the grouping.",
+ "language": "clike"
+ },
+ {
+ "category": "programming",
+ "content": "def chunked(seq, n): return [seq[i:i + n] for i in range(0, len(seq), n)]",
+ "attribution": "Python",
+ "explanation": "Slicing past the end of a sequence is not an error in Python, it simply returns what is there, so the final chunk needs no special case.",
+ "language": "python"
+ },
+ {
+ "category": "programming",
+ "content": "match value { Some(n) if n > 0 => n, Some(_) => 0, None => return Err(Error::Missing) }",
+ "attribution": "Rust",
+ "explanation": "The if after a pattern is a match guard. It narrows an arm without a nested conditional, and the compiler still checks that every case is covered.",
+ "language": "rust"
+ },
+ {
+ "category": "programming",
+ "content": "const sorted = [...items].sort((a, b) => a.score - b.score || a.name.localeCompare(b.name));",
+ "attribution": "JavaScript",
+ "explanation": "sort mutates, so the spread makes a copy first. The logical or supplies a second comparison used only when the scores are equal.",
+ "language": "javascript"
+ },
+ {
+ "category": "programming",
+ "content": "async fn fetch_all(urls: Vec<String>) -> Vec<Result<String, Error>> { futures::future::join_all(urls.into_iter().map(fetch)).await }",
+ "attribution": "Rust",
+ "explanation": "join_all drives every future at once on one task and waits for all of them, rather than awaiting each in turn, which would make the requests sequential.",
+ "language": "rust"
}
-] \ No newline at end of file
+]
diff --git a/data/packs/quotes.json b/data/packs/quotes.json
index c727b81..853af12 100644
--- a/data/packs/quotes.json
+++ b/data/packs/quotes.json
@@ -1,19 +1,117 @@
[
- {"category":"quotes","content":"The only limit to our realization of tomorrow is our doubts of today.","attribution":"Franklin D. Roosevelt"},
- {"category":"quotes","content":"It always seems impossible until it's done.","attribution":"Nelson Mandela"},
- {"category":"quotes","content":"Stay hungry, stay foolish.","attribution":"Steve Jobs"},
- {"category":"quotes","content":"Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.","attribution":"Abraham Lincoln, The Gettysburg Address"},
- {"category":"quotes","content":"You have power over your mind, not outside events. Realize this, and you will find strength.","attribution":"Marcus Aurelius, Meditations"},
- {"category":"quotes","content":"I went to the woods because I wished to live deliberately, to front only the essential facts of life, and see if I could not learn what it had to teach, and not, when I came to die, discover that I had not lived.","attribution":"Henry David Thoreau, Walden"},
- {"category":"quotes","content":"It is not the critic who counts; not the man who points out how the strong man stumbles. The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood.","attribution":"Theodore Roosevelt, Citizenship in a Republic"},
- {"category":"quotes","content":"If there is no struggle, there is no progress. Those who profess to favor freedom, and yet depreciate agitation, are men who want crops without plowing up the ground.","attribution":"Frederick Douglass"},
- {"category":"quotes","content":"The two most important days in your life are the day you are born and the day you find out why.","attribution":"Mark Twain"},
- {"category":"quotes","content":"To be great is to be misunderstood.","attribution":"Ralph Waldo Emerson, Self-Reliance"},
- {"category":"quotes","content":"Whatever you are, be a good one.","attribution":"Abraham Lincoln"},
- {"category":"quotes","content":"If I have seen further, it is by standing on the shoulders of giants.","attribution":"Isaac Newton"},
- {"category":"quotes","content":"Genius is one percent inspiration and ninety-nine percent perspiration.","attribution":"Thomas Edison"},
- {"category":"quotes","content":"That man over there says that women need to be helped into carriages, and lifted over ditches, and to have the best place everywhere. Nobody ever helps me into carriages, or over mud puddles, or gives me any best place, and ain't I a woman?","attribution":"Sojourner Truth, Ain't I a Woman?"},
- {"category":"quotes","content":"Failure is impossible.","attribution":"Susan B. Anthony"},
- {"category":"quotes","content":"Success is to be measured not so much by the position that one has reached in life as by the obstacles which he has overcome while trying to succeed.","attribution":"Booker T. Washington"},
- {"category":"quotes","content":"Our greatest glory is not in never falling, but in rising every time we fall.","attribution":"Confucius"}
+ {
+ "category": "quotes",
+ "content": "The only limit to our realization of tomorrow is our doubts of today.",
+ "attribution": "Franklin D. Roosevelt"
+ },
+ {
+ "category": "quotes",
+ "content": "It always seems impossible until it's done.",
+ "attribution": "Nelson Mandela"
+ },
+ {
+ "category": "quotes",
+ "content": "Stay hungry, stay foolish.",
+ "attribution": "Steve Jobs"
+ },
+ {
+ "category": "quotes",
+ "content": "Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.",
+ "attribution": "Abraham Lincoln, The Gettysburg Address"
+ },
+ {
+ "category": "quotes",
+ "content": "You have power over your mind, not outside events. Realize this, and you will find strength.",
+ "attribution": "Marcus Aurelius, Meditations"
+ },
+ {
+ "category": "quotes",
+ "content": "I went to the woods because I wished to live deliberately, to front only the essential facts of life, and see if I could not learn what it had to teach, and not, when I came to die, discover that I had not lived.",
+ "attribution": "Henry David Thoreau, Walden"
+ },
+ {
+ "category": "quotes",
+ "content": "It is not the critic who counts; not the man who points out how the strong man stumbles. The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood.",
+ "attribution": "Theodore Roosevelt, Citizenship in a Republic"
+ },
+ {
+ "category": "quotes",
+ "content": "If there is no struggle, there is no progress. Those who profess to favor freedom, and yet depreciate agitation, are men who want crops without plowing up the ground.",
+ "attribution": "Frederick Douglass"
+ },
+ {
+ "category": "quotes",
+ "content": "The two most important days in your life are the day you are born and the day you find out why.",
+ "attribution": "Mark Twain"
+ },
+ {
+ "category": "quotes",
+ "content": "To be great is to be misunderstood.",
+ "attribution": "Ralph Waldo Emerson, Self-Reliance"
+ },
+ {
+ "category": "quotes",
+ "content": "Whatever you are, be a good one.",
+ "attribution": "Abraham Lincoln"
+ },
+ {
+ "category": "quotes",
+ "content": "If I have seen further, it is by standing on the shoulders of giants.",
+ "attribution": "Isaac Newton"
+ },
+ {
+ "category": "quotes",
+ "content": "Genius is one percent inspiration and ninety-nine percent perspiration.",
+ "attribution": "Thomas Edison"
+ },
+ {
+ "category": "quotes",
+ "content": "That man over there says that women need to be helped into carriages, and lifted over ditches, and to have the best place everywhere. Nobody ever helps me into carriages, or over mud puddles, or gives me any best place, and ain't I a woman?",
+ "attribution": "Sojourner Truth, Ain't I a Woman?"
+ },
+ {
+ "category": "quotes",
+ "content": "Failure is impossible.",
+ "attribution": "Susan B. Anthony"
+ },
+ {
+ "category": "quotes",
+ "content": "Success is to be measured not so much by the position that one has reached in life as by the obstacles which he has overcome while trying to succeed.",
+ "attribution": "Booker T. Washington"
+ },
+ {
+ "category": "quotes",
+ "content": "Our greatest glory is not in never falling, but in rising every time we fall.",
+ "attribution": "Confucius"
+ },
+ {
+ "category": "quotes",
+ "content": "Success is not final, failure is not fatal: it is the courage to continue that counts. The measure of a person is not whether they are knocked down, but whether they stand up again with the same intention they had before.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "quotes",
+ "content": "The only thing necessary for the triumph of evil is for good men to do nothing. Silence in the face of wrong is not neutrality; it is a decision, and it is counted on by everyone who benefits from the wrong continuing.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "quotes",
+ "content": "We are what we repeatedly do. Excellence, then, is not an act, but a habit. What a person does once tells you very little, and what they do every morning without deciding to tells you almost everything.",
+ "attribution": "Will Durant, on Aristotle"
+ },
+ {
+ "category": "quotes",
+ "content": "Twenty years from now you will be more disappointed by the things you didn't do than by the ones you did do. So throw off the bowlines, sail away from the safe harbour, and catch the trade winds in your sails.",
+ "attribution": "H. Jackson Brown Jr."
+ },
+ {
+ "category": "quotes",
+ "content": "The greatest glory in living lies not in never falling, but in rising every time we fall. A life without setbacks is not a life well insulated; it is usually a life that was never risked in the first place.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "quotes",
+ "content": "It is not the critic who counts, not the man who points out how the strong man stumbles, or where the doer of deeds could have done them better. The credit belongs to the man who is actually in the arena.",
+ "attribution": "Theodore Roosevelt, 1910"
+ }
]
diff --git a/data/packs/science.json b/data/packs/science.json
index f0b91a5..070ad6b 100644
--- a/data/packs/science.json
+++ b/data/packs/science.json
@@ -1,24 +1,142 @@
[
- {"category":"science","attribution":"Carl Sagan, Cosmos","content":"The cosmos is within us. We are made of star-stuff. We are a way for the universe to know itself."},
- {"category":"science","attribution":"Carl Sagan","content":"Somewhere, something incredible is waiting to be known."},
- {"category":"science","attribution":"Carl Sagan, The Demon-Haunted World","content":"Extraordinary claims require extraordinary evidence."},
- {"category":"science","attribution":"Richard Feynman","content":"The first principle is that you must not fool yourself, and you are the easiest person to fool."},
- {"category":"science","attribution":"Richard Feynman","content":"I would rather have questions that can't be answered than answers that can't be questioned."},
- {"category":"science","attribution":"Marie Curie","content":"Nothing in life is to be feared, it is only to be understood. Now is the time to understand more, so that we may fear less."},
- {"category":"science","attribution":"Charles Darwin, On the Origin of Species","content":"There is grandeur in this view of life, with its several powers, having been originally breathed into a few forms or into one."},
- {"category":"science","attribution":"Isaac Newton","content":"If I have seen further it is by standing on the shoulders of giants."},
- {"category":"science","attribution":"Albert Einstein","content":"The most incomprehensible thing about the world is that it is comprehensible."},
- {"category":"science","attribution":"Albert Einstein","content":"Imagination is more important than knowledge. Knowledge is limited. Imagination encircles the world."},
- {"category":"science","attribution":"Niels Bohr","content":"An expert is a person who has made all the mistakes that can be made in a very narrow field."},
- {"category":"science","attribution":"Werner Heisenberg","content":"What we observe is not nature itself, but nature exposed to our method of questioning."},
- {"category":"science","attribution":"Ada Lovelace","content":"The Analytical Engine weaves algebraical patterns just as the Jacquard loom weaves flowers and leaves."},
- {"category":"science","attribution":"Rosalind Franklin","content":"Science and everyday life cannot and should not be separated."},
- {"category":"science","attribution":"Jane Goodall","content":"What you do makes a difference, and you have to decide what kind of difference you want to make."},
- {"category":"science","attribution":"Neil deGrasse Tyson","content":"The good thing about science is that it's true whether or not you believe in it."},
- {"category":"science","attribution":"Thomas Huxley","content":"The great tragedy of science: the slaying of a beautiful hypothesis by an ugly fact."},
- {"category":"science","attribution":"Louis Pasteur","content":"In the fields of observation chance favours only the prepared mind."},
- {"category":"science","attribution":"Stephen Hawking, A Brief History of Time","content":"The whole history of science has been the gradual realisation that events do not happen in an arbitrary manner."},
- {"category":"science","attribution":"Stephen Hawking","content":"The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge."},
- {"category":"science","attribution":"Max Planck","content":"A new scientific truth does not triumph by convincing its opponents, but rather because its opponents eventually die."},
- {"category":"science","attribution":"Barbara McClintock","content":"If you know you are on the right track, if you have this inner knowledge, then nobody can turn you off."}
+ {
+ "category": "science",
+ "attribution": "Carl Sagan, Cosmos",
+ "content": "The cosmos is within us. We are made of star-stuff. We are a way for the universe to know itself."
+ },
+ {
+ "category": "science",
+ "attribution": "Carl Sagan",
+ "content": "Somewhere, something incredible is waiting to be known."
+ },
+ {
+ "category": "science",
+ "attribution": "Carl Sagan, The Demon-Haunted World",
+ "content": "Extraordinary claims require extraordinary evidence."
+ },
+ {
+ "category": "science",
+ "attribution": "Richard Feynman",
+ "content": "The first principle is that you must not fool yourself, and you are the easiest person to fool."
+ },
+ {
+ "category": "science",
+ "attribution": "Richard Feynman",
+ "content": "I would rather have questions that can't be answered than answers that can't be questioned."
+ },
+ {
+ "category": "science",
+ "attribution": "Marie Curie",
+ "content": "Nothing in life is to be feared, it is only to be understood. Now is the time to understand more, so that we may fear less."
+ },
+ {
+ "category": "science",
+ "attribution": "Charles Darwin, On the Origin of Species",
+ "content": "There is grandeur in this view of life, with its several powers, having been originally breathed into a few forms or into one."
+ },
+ {
+ "category": "science",
+ "attribution": "Isaac Newton",
+ "content": "If I have seen further it is by standing on the shoulders of giants."
+ },
+ {
+ "category": "science",
+ "attribution": "Albert Einstein",
+ "content": "The most incomprehensible thing about the world is that it is comprehensible."
+ },
+ {
+ "category": "science",
+ "attribution": "Albert Einstein",
+ "content": "Imagination is more important than knowledge. Knowledge is limited. Imagination encircles the world."
+ },
+ {
+ "category": "science",
+ "attribution": "Niels Bohr",
+ "content": "An expert is a person who has made all the mistakes that can be made in a very narrow field."
+ },
+ {
+ "category": "science",
+ "attribution": "Werner Heisenberg",
+ "content": "What we observe is not nature itself, but nature exposed to our method of questioning."
+ },
+ {
+ "category": "science",
+ "attribution": "Ada Lovelace",
+ "content": "The Analytical Engine weaves algebraical patterns just as the Jacquard loom weaves flowers and leaves."
+ },
+ {
+ "category": "science",
+ "attribution": "Rosalind Franklin",
+ "content": "Science and everyday life cannot and should not be separated."
+ },
+ {
+ "category": "science",
+ "attribution": "Jane Goodall",
+ "content": "What you do makes a difference, and you have to decide what kind of difference you want to make."
+ },
+ {
+ "category": "science",
+ "attribution": "Neil deGrasse Tyson",
+ "content": "The good thing about science is that it's true whether or not you believe in it."
+ },
+ {
+ "category": "science",
+ "attribution": "Thomas Huxley",
+ "content": "The great tragedy of science: the slaying of a beautiful hypothesis by an ugly fact."
+ },
+ {
+ "category": "science",
+ "attribution": "Louis Pasteur",
+ "content": "In the fields of observation chance favours only the prepared mind."
+ },
+ {
+ "category": "science",
+ "attribution": "Stephen Hawking, A Brief History of Time",
+ "content": "The whole history of science has been the gradual realisation that events do not happen in an arbitrary manner."
+ },
+ {
+ "category": "science",
+ "attribution": "Stephen Hawking",
+ "content": "The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge."
+ },
+ {
+ "category": "science",
+ "attribution": "Max Planck",
+ "content": "A new scientific truth does not triumph by convincing its opponents, but rather because its opponents eventually die."
+ },
+ {
+ "category": "science",
+ "attribution": "Barbara McClintock",
+ "content": "If you know you are on the right track, if you have this inner knowledge, then nobody can turn you off."
+ },
+ {
+ "category": "science",
+ "content": "The plural of anecdote is not data. A hundred stories that agree can still all be wrong in the same direction, which is exactly what happens when the way the stories were collected favours one answer.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "science",
+ "content": "An experiment that cannot fail proves nothing. The value of a test lies entirely in the outcome it rules out, so a prediction compatible with every result is not a prediction at all.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "science",
+ "content": "Correlation is evidence, not proof. Two things that move together may share a cause, may influence each other, or may simply have been measured over a stretch of time too short to tell the difference.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "science",
+ "content": "Light from the nearest star beyond our own takes over four years to arrive. Every point in the night sky is therefore a picture of the past, and the further away it is, the older the picture.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "science",
+ "content": "The second law of thermodynamics is the only physical law that distinguishes the future from the past. Every other equation runs equally well in either direction, which is why time is a stranger idea than it first appears.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "science",
+ "content": "Water is unusual in almost every way that matters to life. It expands as it freezes, dissolves more substances than any other common liquid, and holds heat well enough to keep an entire planet's temperature steady.",
+ "attribution": "Unknown"
+ }
]
diff --git a/data/packs/shell.json b/data/packs/shell.json
index 3545ef9..b7f8312 100644
--- a/data/packs/shell.json
+++ b/data/packs/shell.json
@@ -1,26 +1,254 @@
[
- {"category":"shell","language":"shell","attribution":"awk","explanation":"awk splits each line into fields on whitespace. $1 is the first, $NF the last - so this prints the first and last column of every line.","content":"awk '{print $1, $NF}' access.log"},
- {"category":"shell","language":"shell","attribution":"awk","explanation":"-F sets the field separator. This reads /etc/passwd and prints the username and shell, which are fields 1 and 7.","content":"awk -F: '{print $1, $7}' /etc/passwd"},
- {"category":"shell","language":"shell","attribution":"awk","explanation":"A pattern before the block acts as a filter: only lines whose 9th field is 404 are printed. No grep needed.","content":"awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn"},
- {"category":"shell","language":"shell","attribution":"awk","explanation":"Associative arrays are awk's real power. This sums bytes per IP in one pass, then END prints the totals once input is exhausted.","content":"awk '{bytes[$1] += $10} END {for (ip in bytes) print bytes[ip], ip}' access.log | sort -rn | head"},
- {"category":"shell","language":"shell","attribution":"awk","explanation":"NR is the current line number, NF the field count. This finds malformed rows: any line that does not have exactly three fields.","content":"awk -F, 'NF != 3 {print NR\": \"$0}' data.csv"},
- {"category":"shell","language":"shell","attribution":"awk","explanation":"Deduplicate without sorting, preserving original order. The array records what has been seen; !seen[$0]++ is true only the first time.","content":"awk '!seen[$0]++' file.txt"},
- {"category":"shell","language":"shell","attribution":"awk","explanation":"Sums a column and prints the average. END runs after the last line, so NR is the total row count by then.","content":"awk '{sum += $3} END {print sum, sum/NR}' numbers.txt"},
- {"category":"shell","language":"shell","attribution":"sed","explanation":"Substitute in place. The g flag replaces every match on a line, not just the first; -i writes the file rather than printing.","content":"sed -i 's/localhost/127.0.0.1/g' config.ini"},
- {"category":"shell","language":"shell","attribution":"sed","explanation":"Prints only lines 10 to 20. -n suppresses the default print, and p prints the range that matched.","content":"sed -n '10,20p' large.log"},
- {"category":"shell","language":"shell","attribution":"sed","explanation":"Deletes comments and blank lines, which is how you read a config that is mostly documentation.","content":"sed -e 's/#.*//' -e '/^[[:space:]]*$/d' /etc/ssh/sshd_config"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"The classic word-frequency pipeline: split to one word per line, fold case, sort so duplicates are adjacent, count runs, order by count.","content":"tr -cs '[:alpha:]' '\\n' < book.txt | tr 'A-Z' 'a-z' | sort | uniq -c | sort -rn | head -20"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"uniq only collapses adjacent duplicates, which is why sort comes first. -c counts, and the second sort orders by that count.","content":"cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"xargs turns a stream of names into arguments. -0 with -print0 is what makes filenames containing spaces safe.","content":"find . -name '*.log' -print0 | xargs -0 grep -l 'ERROR'"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"Runs a command per input line in parallel. -P4 keeps four running at once, and -I{} places each name where the braces are.","content":"ls *.png | xargs -P4 -I{} convert {} -resize 50% small/{}"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"Process substitution gives two commands to diff as if they were files, without writing either to disk.","content":"diff <(sort a.txt) <(sort b.txt)"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"tee writes to a file and passes the stream on, so you can log and keep processing in the same pipeline.","content":"make 2>&1 | tee build.log | grep -E 'error|warning'"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"comm compares two sorted files by column: -13 shows only lines unique to the second, which is the set that was added.","content":"comm -13 <(sort old.txt) <(sort new.txt)"},
- {"category":"shell","language":"shell","attribution":"Pipelines","explanation":"jq selects and reshapes JSON. -r prints raw strings, so the output is usable by the next command rather than quoted.","content":"curl -s https://api.example.com/users | jq -r '.[] | select(.active) | .email'"},
- {"category":"shell","language":"shell","attribution":"Text processing","explanation":"grep -o prints only the match, one per line, which turns a search into a stream you can count.","content":"grep -oE '[0-9]{1,3}(\\.[0-9]{1,3}){3}' access.log | sort -u | wc -l"},
- {"category":"shell","language":"shell","attribution":"Text processing","explanation":"paste joins lines side by side; -s -d joins them all into one line with the chosen separator.","content":"cut -f2 data.tsv | paste -sd, -"},
- {"category":"shell","language":"shell","attribution":"Text processing","explanation":"column formats whitespace-separated input into aligned columns, which makes an unreadable log readable.","content":"mount | column -t | grep -v tmpfs"},
- {"category":"shell","language":"shell","attribution":"Shell safety","explanation":"The unofficial strict mode: exit on error, exit on undefined variable, and fail a pipeline if any stage fails rather than only the last.","content":"set -euo pipefail"},
- {"category":"shell","language":"shell","attribution":"Shell safety","explanation":"Quoting \"$@\" preserves each argument exactly, including ones containing spaces. Unquoted $@ splits them apart.","content":"for f in \"$@\"; do printf '%s\\n' \"${f%.*}\"; done"},
- {"category":"shell","language":"shell","attribution":"Shell safety","explanation":"A trap on EXIT cleans up whether the script succeeded, failed or was interrupted.","content":"tmp=$(mktemp -d) && trap 'rm -rf \"$tmp\"' EXIT"}
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "awk splits each line into fields on whitespace. $1 is the first, $NF the last - so this prints the first and last column of every line.",
+ "content": "awk '{print $1, $NF}' access.log"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "-F sets the field separator. This reads /etc/passwd and prints the username and shell, which are fields 1 and 7.",
+ "content": "awk -F: '{print $1, $7}' /etc/passwd"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "A pattern before the block acts as a filter: only lines whose 9th field is 404 are printed. No grep needed.",
+ "content": "awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "Associative arrays are awk's real power. This sums bytes per IP in one pass, then END prints the totals once input is exhausted.",
+ "content": "awk '{bytes[$1] += $10} END {for (ip in bytes) print bytes[ip], ip}' access.log | sort -rn | head"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "NR is the current line number, NF the field count. This finds malformed rows: any line that does not have exactly three fields.",
+ "content": "awk -F, 'NF != 3 {print NR\": \"$0}' data.csv"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "Deduplicate without sorting, preserving original order. The array records what has been seen; !seen[$0]++ is true only the first time.",
+ "content": "awk '!seen[$0]++' file.txt"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "awk",
+ "explanation": "Sums a column and prints the average. END runs after the last line, so NR is the total row count by then.",
+ "content": "awk '{sum += $3} END {print sum, sum/NR}' numbers.txt"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "sed",
+ "explanation": "Substitute in place. The g flag replaces every match on a line, not just the first; -i writes the file rather than printing.",
+ "content": "sed -i 's/localhost/127.0.0.1/g' config.ini"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "sed",
+ "explanation": "Prints only lines 10 to 20. -n suppresses the default print, and p prints the range that matched.",
+ "content": "sed -n '10,20p' large.log"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "sed",
+ "explanation": "Deletes comments and blank lines, which is how you read a config that is mostly documentation.",
+ "content": "sed -e 's/#.*//' -e '/^[[:space:]]*$/d' /etc/ssh/sshd_config"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "The classic word-frequency pipeline: split to one word per line, fold case, sort so duplicates are adjacent, count runs, order by count.",
+ "content": "tr -cs '[:alpha:]' '\\n' < book.txt | tr 'A-Z' 'a-z' | sort | uniq -c | sort -rn | head -20"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "uniq only collapses adjacent duplicates, which is why sort comes first. -c counts, and the second sort orders by that count.",
+ "content": "cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "xargs turns a stream of names into arguments. -0 with -print0 is what makes filenames containing spaces safe.",
+ "content": "find . -name '*.log' -print0 | xargs -0 grep -l 'ERROR'"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "Runs a command per input line in parallel. -P4 keeps four running at once, and -I{} places each name where the braces are.",
+ "content": "ls *.png | xargs -P4 -I{} convert {} -resize 50% small/{}"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "Process substitution gives two commands to diff as if they were files, without writing either to disk.",
+ "content": "diff <(sort a.txt) <(sort b.txt)"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "tee writes to a file and passes the stream on, so you can log and keep processing in the same pipeline.",
+ "content": "make 2>&1 | tee build.log | grep -E 'error|warning'"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "comm compares two sorted files by column: -13 shows only lines unique to the second, which is the set that was added.",
+ "content": "comm -13 <(sort old.txt) <(sort new.txt)"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Pipelines",
+ "explanation": "jq selects and reshapes JSON. -r prints raw strings, so the output is usable by the next command rather than quoted.",
+ "content": "curl -s https://api.example.com/users | jq -r '.[] | select(.active) | .email'"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Text processing",
+ "explanation": "grep -o prints only the match, one per line, which turns a search into a stream you can count.",
+ "content": "grep -oE '[0-9]{1,3}(\\.[0-9]{1,3}){3}' access.log | sort -u | wc -l"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Text processing",
+ "explanation": "paste joins lines side by side; -s -d joins them all into one line with the chosen separator.",
+ "content": "cut -f2 data.tsv | paste -sd, -"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Text processing",
+ "explanation": "column formats whitespace-separated input into aligned columns, which makes an unreadable log readable.",
+ "content": "mount | column -t | grep -v tmpfs"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Shell safety",
+ "explanation": "The unofficial strict mode: exit on error, exit on undefined variable, and fail a pipeline if any stage fails rather than only the last.",
+ "content": "set -euo pipefail"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Shell safety",
+ "explanation": "Quoting \"$@\" preserves each argument exactly, including ones containing spaces. Unquoted $@ splits them apart.",
+ "content": "for f in \"$@\"; do printf '%s\\n' \"${f%.*}\"; done"
+ },
+ {
+ "category": "shell",
+ "language": "shell",
+ "attribution": "Shell safety",
+ "explanation": "A trap on EXIT cleans up whether the script succeeded, failed or was interrupted.",
+ "content": "tmp=$(mktemp -d) && trap 'rm -rf \"$tmp\"' EXIT"
+ },
+ {
+ "category": "shell",
+ "content": "awk -F: '$3 >= 1000 && $7 !~ /nologin|false/ {print $1, $6}' /etc/passwd",
+ "attribution": "awk",
+ "explanation": "Two conditions joined with &&. $3 >= 1000 keeps ordinary user accounts, and !~ excludes any shell matching nologin or false, so what is left is the humans who can log in.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "awk '{sum += $1; n++} END {if (n) printf \"%.2f\\n\", sum / n}' numbers.txt",
+ "attribution": "awk",
+ "explanation": "Variables in awk need no declaration and start at zero. END runs once after the last line, so this accumulates while reading and prints the mean at the finish.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "awk 'NR == FNR {seen[$1]; next} !($1 in seen)' first.txt second.txt",
+ "attribution": "awk",
+ "explanation": "NR is the overall line number and FNR restarts per file, so NR == FNR is true only while reading the first file. This prints lines of the second file whose first field never appeared in the first.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "sort access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20",
+ "attribution": "shell",
+ "explanation": "uniq -c counts runs of identical adjacent lines, which is why the sort before it is required. sort -rn then orders those counts highest first, giving the twenty busiest addresses.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "find . -type f -name '*.log' -mtime +30 -print0 | xargs -0 rm -v",
+ "attribution": "find",
+ "explanation": "-print0 separates paths with a null byte and -0 tells xargs to expect that, which is the only safe way to pass file names containing spaces or newlines.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "grep -rn --include='*.rs' -e 'unwrap()' -e 'expect(' src/ | wc -l",
+ "attribution": "grep",
+ "explanation": "-r walks the tree, --include limits it to one file type, and repeated -e adds alternative patterns. Counting the result gives a rough measure of how much error handling is deferred.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "sed -i.bak -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\\3\\/\\2\\/\\1/g' dates.csv",
+ "attribution": "sed",
+ "explanation": "-i.bak edits in place and keeps the original alongside. The parenthesised groups are recalled as \\1, \\2 and \\3, which is how the date order is rearranged.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "tar czf - /var/www | ssh backup@host 'cat > site-$(date +%F).tar.gz'",
+ "attribution": "tar",
+ "explanation": "A dash as the file name makes tar write to standard output. The archive is never stored locally: it streams straight down the ssh connection into a file on the far side.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "ps -eo pid,ppid,rss,comm --sort=-rss | head -15",
+ "attribution": "ps",
+ "explanation": "-eo picks exactly which columns to print. rss is resident memory in kilobytes, and the minus sign in --sort reverses the order, so the heaviest processes come first.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "diff <(sort a.txt) <(sort b.txt) | grep '^[<>]'",
+ "attribution": "shell",
+ "explanation": "Process substitution gives each command a file name of its own, so diff can compare two pipelines without either being written to disk first.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "curl -sS -w '%{http_code} %{time_total}s\\n' -o /dev/null https://example.com",
+ "attribution": "curl",
+ "explanation": "-o /dev/null throws the body away while -w prints chosen variables, which turns curl into a quick check of status and latency alone.",
+ "language": "shell"
+ },
+ {
+ "category": "shell",
+ "content": "journalctl -u nginx --since '1 hour ago' -p err --no-pager | tail -50",
+ "attribution": "journalctl",
+ "explanation": "-p err keeps only entries at error priority or worse. --no-pager matters in a script, where an interactive pager would otherwise wait for a keypress that never comes.",
+ "language": "shell"
+ }
]
diff --git a/data/packs/sysadmin.json b/data/packs/sysadmin.json
index 4e1ec1f..15f29a5 100644
--- a/data/packs/sysadmin.json
+++ b/data/packs/sysadmin.json
@@ -1,26 +1,240 @@
[
- {"category":"sysadmin","language":"shell","attribution":"systemd","explanation":"Why a unit failed, without paging through the whole journal. -u scopes to the unit, -n limits the lines, --no-pager keeps it in the pipeline.","content":"journalctl -u nginx -n 50 --no-pager -p err"},
- {"category":"sysadmin","language":"shell","attribution":"systemd","explanation":"Lists units that failed at boot. The first thing to run on a machine that came up wrong.","content":"systemctl --failed --no-pager"},
- {"category":"sysadmin","language":"shell","attribution":"systemd","explanation":"Shows what a unit will actually run, including drop-ins, after every override has been merged.","content":"systemctl cat sshd.service && systemctl show sshd -p ExecStart"},
- {"category":"sysadmin","language":"shell","attribution":"systemd","explanation":"Ranks services by how long they delayed boot. The usual answer to a slow start is one unit near the top.","content":"systemd-analyze blame | head -15"},
- {"category":"sysadmin","language":"shell","attribution":"Disk","explanation":"Largest directories at this level, human readable. -x stays on one filesystem so it does not wander into /proc or a mount.","content":"du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -15"},
- {"category":"sysadmin","language":"shell","attribution":"Disk","explanation":"A disk that reports free space but still refuses writes is usually out of inodes, not bytes.","content":"df -i | awk '$5+0 > 80 {print}'"},
- {"category":"sysadmin","language":"shell","attribution":"Disk","explanation":"Finds space held by deleted files that a process still has open. Deleting the file does not free the space until the handle closes.","content":"lsof +L1 2>/dev/null | awk '$7 > 100000000 {print $1, $7, $NF}'"},
- {"category":"sysadmin","language":"shell","attribution":"Processes","explanation":"The heaviest processes by resident memory. --sort takes a minus for descending order.","content":"ps -eo pid,user,rss,pcpu,comm --sort=-rss | head -12"},
- {"category":"sysadmin","language":"shell","attribution":"Processes","explanation":"What a process is actually waiting on. Reading its file descriptors and stack says more than another look at top.","content":"ls -l /proc/$PID/fd | head && cat /proc/$PID/wchan"},
- {"category":"sysadmin","language":"shell","attribution":"Processes","explanation":"Traces the system calls a command makes, with a count and timing summary rather than a wall of output.","content":"strace -c -f -p $PID 2>&1 | tail -20"},
- {"category":"sysadmin","language":"shell","attribution":"Network","explanation":"Listening sockets with the process behind each one. The modern replacement for netstat -tulpn.","content":"ss -ltnp | awk 'NR>1 {print $4, $6}'"},
- {"category":"sysadmin","language":"shell","attribution":"Network","explanation":"Which route the kernel will actually use for a destination, including the source address it will pick.","content":"ip route get 8.8.8.8"},
- {"category":"sysadmin","language":"shell","attribution":"Network","explanation":"Captures the start of connections only. -n skips DNS lookups, which otherwise generate the traffic you are trying to read.","content":"tcpdump -ni any 'tcp[tcpflags] & tcp-syn != 0' -c 20"},
- {"category":"sysadmin","language":"shell","attribution":"Network","explanation":"Resolves a name through a specific server, which is how you tell a stale local cache from a stale zone.","content":"dig +short @1.1.1.1 example.com A"},
- {"category":"sysadmin","language":"shell","attribution":"Permissions","explanation":"World-writable files outside the places that are meant to be. A common way a service ends up modifiable by anyone.","content":"find /etc /usr -type f -perm -o+w -ls 2>/dev/null"},
- {"category":"sysadmin","language":"shell","attribution":"Permissions","explanation":"Copies the ownership and mode of one file onto another, rather than typing the numbers and getting them wrong.","content":"chmod --reference=/etc/passwd /etc/passwd.new && chown --reference=/etc/passwd /etc/passwd.new"},
- {"category":"sysadmin","language":"shell","attribution":"Users","explanation":"Accounts with a real login shell, which is the set that can actually sign in.","content":"awk -F: '$7 !~ /(nologin|false)$/ {print $1, $7}' /etc/passwd"},
- {"category":"sysadmin","language":"shell","attribution":"Users","explanation":"Accounts with an empty password field. Should return nothing on any machine you care about.","content":"sudo awk -F: '$2 == \"\" {print $1}' /etc/shadow"},
- {"category":"sysadmin","language":"shell","attribution":"SSH","explanation":"Reuses one connection for subsequent sessions, so every later ssh or scp to the same host skips the handshake.","content":"ssh -o ControlMaster=auto -o ControlPersist=10m -o ControlPath=~/.ssh/cm-%r@%h:%p host"},
- {"category":"sysadmin","language":"shell","attribution":"SSH","explanation":"Forwards a remote port to the local machine, so a service bound to localhost on the server is reachable here.","content":"ssh -N -L 5432:127.0.0.1:5432 dbhost"},
- {"category":"sysadmin","language":"shell","attribution":"Backup","explanation":"Mirrors a tree, deletes what no longer exists on the source, and shows what it would do first. Never run this without -n the first time.","content":"rsync -avhn --delete /src/ /dest/"},
- {"category":"sysadmin","language":"shell","attribution":"Backup","explanation":"Streams a directory to another host without a temporary archive on either side.","content":"tar czf - /var/www | ssh backup 'cat > www-$(date +%F).tar.gz'"},
- {"category":"sysadmin","language":"shell","attribution":"Scheduling","explanation":"A cron entry that logs both streams. Without the redirect, cron mails the output to a mailbox nobody reads.","content":"0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1"},
- {"category":"sysadmin","language":"shell","attribution":"Containers","explanation":"Removes stopped containers, unused networks and dangling images. The usual cause of a full disk on a build host.","content":"docker system prune -af --volumes --filter 'until=168h'"}
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "systemd",
+ "explanation": "Why a unit failed, without paging through the whole journal. -u scopes to the unit, -n limits the lines, --no-pager keeps it in the pipeline.",
+ "content": "journalctl -u nginx -n 50 --no-pager -p err"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "systemd",
+ "explanation": "Lists units that failed at boot. The first thing to run on a machine that came up wrong.",
+ "content": "systemctl --failed --no-pager"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "systemd",
+ "explanation": "Shows what a unit will actually run, including drop-ins, after every override has been merged.",
+ "content": "systemctl cat sshd.service && systemctl show sshd -p ExecStart"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "systemd",
+ "explanation": "Ranks services by how long they delayed boot. The usual answer to a slow start is one unit near the top.",
+ "content": "systemd-analyze blame | head -15"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Disk",
+ "explanation": "Largest directories at this level, human readable. -x stays on one filesystem so it does not wander into /proc or a mount.",
+ "content": "du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -15"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Disk",
+ "explanation": "A disk that reports free space but still refuses writes is usually out of inodes, not bytes.",
+ "content": "df -i | awk '$5+0 > 80 {print}'"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Disk",
+ "explanation": "Finds space held by deleted files that a process still has open. Deleting the file does not free the space until the handle closes.",
+ "content": "lsof +L1 2>/dev/null | awk '$7 > 100000000 {print $1, $7, $NF}'"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Processes",
+ "explanation": "The heaviest processes by resident memory. --sort takes a minus for descending order.",
+ "content": "ps -eo pid,user,rss,pcpu,comm --sort=-rss | head -12"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Processes",
+ "explanation": "What a process is actually waiting on. Reading its file descriptors and stack says more than another look at top.",
+ "content": "ls -l /proc/$PID/fd | head && cat /proc/$PID/wchan"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Processes",
+ "explanation": "Traces the system calls a command makes, with a count and timing summary rather than a wall of output.",
+ "content": "strace -c -f -p $PID 2>&1 | tail -20"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Network",
+ "explanation": "Listening sockets with the process behind each one. The modern replacement for netstat -tulpn.",
+ "content": "ss -ltnp | awk 'NR>1 {print $4, $6}'"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Network",
+ "explanation": "Which route the kernel will actually use for a destination, including the source address it will pick.",
+ "content": "ip route get 8.8.8.8"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Network",
+ "explanation": "Captures the start of connections only. -n skips DNS lookups, which otherwise generate the traffic you are trying to read.",
+ "content": "tcpdump -ni any 'tcp[tcpflags] & tcp-syn != 0' -c 20"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Network",
+ "explanation": "Resolves a name through a specific server, which is how you tell a stale local cache from a stale zone.",
+ "content": "dig +short @1.1.1.1 example.com A"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Permissions",
+ "explanation": "World-writable files outside the places that are meant to be. A common way a service ends up modifiable by anyone.",
+ "content": "find /etc /usr -type f -perm -o+w -ls 2>/dev/null"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Permissions",
+ "explanation": "Copies the ownership and mode of one file onto another, rather than typing the numbers and getting them wrong.",
+ "content": "chmod --reference=/etc/passwd /etc/passwd.new && chown --reference=/etc/passwd /etc/passwd.new"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Users",
+ "explanation": "Accounts with a real login shell, which is the set that can actually sign in.",
+ "content": "awk -F: '$7 !~ /(nologin|false)$/ {print $1, $7}' /etc/passwd"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Users",
+ "explanation": "Accounts with an empty password field. Should return nothing on any machine you care about.",
+ "content": "sudo awk -F: '$2 == \"\" {print $1}' /etc/shadow"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "SSH",
+ "explanation": "Reuses one connection for subsequent sessions, so every later ssh or scp to the same host skips the handshake.",
+ "content": "ssh -o ControlMaster=auto -o ControlPersist=10m -o ControlPath=~/.ssh/cm-%r@%h:%p host"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "SSH",
+ "explanation": "Forwards a remote port to the local machine, so a service bound to localhost on the server is reachable here.",
+ "content": "ssh -N -L 5432:127.0.0.1:5432 dbhost"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Backup",
+ "explanation": "Mirrors a tree, deletes what no longer exists on the source, and shows what it would do first. Never run this without -n the first time.",
+ "content": "rsync -avhn --delete /src/ /dest/"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Backup",
+ "explanation": "Streams a directory to another host without a temporary archive on either side.",
+ "content": "tar czf - /var/www | ssh backup 'cat > www-$(date +%F).tar.gz'"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Scheduling",
+ "explanation": "A cron entry that logs both streams. Without the redirect, cron mails the output to a mailbox nobody reads.",
+ "content": "0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1"
+ },
+ {
+ "category": "sysadmin",
+ "language": "shell",
+ "attribution": "Containers",
+ "explanation": "Removes stopped containers, unused networks and dangling images. The usual cause of a full disk on a build host.",
+ "content": "docker system prune -af --volumes --filter 'until=168h'"
+ },
+ {
+ "category": "sysadmin",
+ "content": "rsync -avz --delete --exclude='.git' ./site/ deploy@host:/var/www/site/",
+ "attribution": "rsync",
+ "explanation": "The trailing slash on the source copies the contents rather than the directory itself. --delete removes files on the far side that no longer exist locally, which makes the copy a mirror.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "ss -tulpn | awk 'NR > 1 {print $1, $5, $7}' | sort -u",
+ "attribution": "ss",
+ "explanation": "ss has replaced netstat on Linux. -tulpn lists listening TCP and UDP sockets with the owning process, and the awk trims it to protocol, address and program.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "systemctl list-units --type=service --state=failed --no-legend | awk '{print $1}'",
+ "attribution": "systemctl",
+ "explanation": "--no-legend drops the header and footer that are meant for a human reader, which leaves output a script can consume directly.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "find /var/log -type f -size +100M -exec ls -lh {} + | awk '{print $5, $9}'",
+ "attribution": "find",
+ "explanation": "-exec with a trailing plus batches many paths into one command, rather than the semicolon form that starts a fresh process for every file.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "dig +short TXT _dmarc.example.com @1.1.1.1",
+ "attribution": "dig",
+ "explanation": "+short prints the record value alone. Naming a resolver after the at sign asks that server directly, which bypasses whatever the local system has cached.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "openssl x509 -in cert.pem -noout -subject -issuer -dates",
+ "attribution": "openssl",
+ "explanation": "Reads a certificate without connecting to anything. -dates prints notBefore and notAfter, which is the quickest way to answer when a certificate expires.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "df -h --output=source,pcent,target | awk 'NR > 1 && $2+0 > 80'",
+ "attribution": "df",
+ "explanation": "Adding zero to a field forces awk to treat it as a number, so the percent sign is discarded and the comparison works. This lists only filesystems over 80 percent full.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "ip -br -c addr show | awk '$2 == \"UP\" {print $1, $3}'",
+ "attribution": "ip",
+ "explanation": "-br is brief output, one line per interface, which is far easier to parse than the default. This prints the name and address of every interface currently up.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "lsof -nP -iTCP -sTCP:LISTEN | awk 'NR > 1 {print $1, $2, $9}'",
+ "attribution": "lsof",
+ "explanation": "-n and -P stop lsof resolving names and ports, which is much faster and gives numbers you can match against configuration.",
+ "language": "shell"
+ },
+ {
+ "category": "sysadmin",
+ "content": "for u in $(cut -d: -f1 /etc/passwd); do echo \"$u $(crontab -lu \"$u\" 2>/dev/null | grep -c '^[^#]')\"; done",
+ "attribution": "shell",
+ "explanation": "Walks every account and counts its active cron entries. Redirecting standard error hides the complaint for users who have no crontab at all.",
+ "language": "shell"
+ }
]
diff --git a/data/packs/technology.json b/data/packs/technology.json
index f529758..0e1f4fd 100644
--- a/data/packs/technology.json
+++ b/data/packs/technology.json
@@ -1,24 +1,152 @@
[
- {"category":"technology","attribution":"Alan Kay","content":"The best way to predict the future is to invent it."},
- {"category":"technology","attribution":"Alan Turing, Computing Machinery and Intelligence","content":"We can only see a short distance ahead, but we can see plenty there that needs to be done."},
- {"category":"technology","attribution":"Grace Hopper","content":"The most damaging phrase in the language is: we've always done it this way."},
- {"category":"technology","attribution":"Grace Hopper","content":"A ship in port is safe, but that's not what ships are built for."},
- {"category":"technology","attribution":"Edsger Dijkstra","content":"Simplicity is prerequisite for reliability."},
- {"category":"technology","attribution":"Edsger Dijkstra","content":"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim."},
- {"category":"technology","attribution":"Douglas Adams","content":"We are stuck with technology when what we really want is just stuff that works."},
- {"category":"technology","attribution":"Arthur C. Clarke","content":"Any sufficiently advanced technology is indistinguishable from magic."},
- {"category":"technology","attribution":"Melvin Kranzberg","content":"Technology is neither good nor bad; nor is it neutral."},
- {"category":"technology","attribution":"Marshall McLuhan","content":"We shape our tools, and thereafter our tools shape us."},
- {"category":"technology","attribution":"Bruce Schneier","content":"Security is a process, not a product."},
- {"category":"technology","attribution":"Tim Berners-Lee","content":"The web as I envisaged it, we have not seen it yet. The future is still so much bigger than the past."},
- {"category":"technology","attribution":"Vannevar Bush, As We May Think","content":"The human mind operates by association. With one item in its grasp, it snaps instantly to the next that is suggested."},
- {"category":"technology","attribution":"Norbert Wiener","content":"We have modified our environment so radically that we must now modify ourselves to exist in this new environment."},
- {"category":"technology","attribution":"Fred Brooks, The Mythical Man-Month","content":"Adding manpower to a late software project makes it later."},
- {"category":"technology","attribution":"Fred Brooks, The Mythical Man-Month","content":"Plan to throw one away; you will, anyhow."},
- {"category":"technology","attribution":"Butler Lampson","content":"All problems in computer science can be solved by another level of indirection."},
- {"category":"technology","attribution":"Leslie Lamport","content":"A distributed system is one in which the failure of a computer you didn't know existed can render your own computer unusable."},
- {"category":"technology","attribution":"Ken Thompson, Reflections on Trusting Trust","content":"You can't trust code that you did not totally create yourself."},
- {"category":"technology","attribution":"Steve Jobs","content":"Design is not just what it looks like and feels like. Design is how it works."},
- {"category":"technology","attribution":"Linus Torvalds","content":"Talk is cheap. Show me the code."},
- {"category":"technology","attribution":"Kevlin Henney","content":"There is no code faster than no code."}
+ {
+ "category": "technology",
+ "attribution": "Alan Kay",
+ "content": "The best way to predict the future is to invent it."
+ },
+ {
+ "category": "technology",
+ "attribution": "Alan Turing, Computing Machinery and Intelligence",
+ "content": "We can only see a short distance ahead, but we can see plenty there that needs to be done."
+ },
+ {
+ "category": "technology",
+ "attribution": "Grace Hopper",
+ "content": "The most damaging phrase in the language is: we've always done it this way."
+ },
+ {
+ "category": "technology",
+ "attribution": "Grace Hopper",
+ "content": "A ship in port is safe, but that's not what ships are built for."
+ },
+ {
+ "category": "technology",
+ "attribution": "Edsger Dijkstra",
+ "content": "Simplicity is prerequisite for reliability."
+ },
+ {
+ "category": "technology",
+ "attribution": "Edsger Dijkstra",
+ "content": "The question of whether a computer can think is no more interesting than the question of whether a submarine can swim."
+ },
+ {
+ "category": "technology",
+ "attribution": "Douglas Adams",
+ "content": "We are stuck with technology when what we really want is just stuff that works."
+ },
+ {
+ "category": "technology",
+ "attribution": "Arthur C. Clarke",
+ "content": "Any sufficiently advanced technology is indistinguishable from magic."
+ },
+ {
+ "category": "technology",
+ "attribution": "Melvin Kranzberg",
+ "content": "Technology is neither good nor bad; nor is it neutral."
+ },
+ {
+ "category": "technology",
+ "attribution": "Marshall McLuhan",
+ "content": "We shape our tools, and thereafter our tools shape us."
+ },
+ {
+ "category": "technology",
+ "attribution": "Bruce Schneier",
+ "content": "Security is a process, not a product."
+ },
+ {
+ "category": "technology",
+ "attribution": "Tim Berners-Lee",
+ "content": "The web as I envisaged it, we have not seen it yet. The future is still so much bigger than the past."
+ },
+ {
+ "category": "technology",
+ "attribution": "Vannevar Bush, As We May Think",
+ "content": "The human mind operates by association. With one item in its grasp, it snaps instantly to the next that is suggested."
+ },
+ {
+ "category": "technology",
+ "attribution": "Norbert Wiener",
+ "content": "We have modified our environment so radically that we must now modify ourselves to exist in this new environment."
+ },
+ {
+ "category": "technology",
+ "attribution": "Fred Brooks, The Mythical Man-Month",
+ "content": "Adding manpower to a late software project makes it later."
+ },
+ {
+ "category": "technology",
+ "attribution": "Fred Brooks, The Mythical Man-Month",
+ "content": "Plan to throw one away; you will, anyhow."
+ },
+ {
+ "category": "technology",
+ "attribution": "Butler Lampson",
+ "content": "All problems in computer science can be solved by another level of indirection."
+ },
+ {
+ "category": "technology",
+ "attribution": "Leslie Lamport",
+ "content": "A distributed system is one in which the failure of a computer you didn't know existed can render your own computer unusable."
+ },
+ {
+ "category": "technology",
+ "attribution": "Ken Thompson, Reflections on Trusting Trust",
+ "content": "You can't trust code that you did not totally create yourself."
+ },
+ {
+ "category": "technology",
+ "attribution": "Steve Jobs",
+ "content": "Design is not just what it looks like and feels like. Design is how it works."
+ },
+ {
+ "category": "technology",
+ "attribution": "Linus Torvalds",
+ "content": "Talk is cheap. Show me the code."
+ },
+ {
+ "category": "technology",
+ "attribution": "Kevlin Henney",
+ "content": "There is no code faster than no code."
+ },
+ {
+ "category": "technology",
+ "content": "A program is read far more often than it is written, so the time spent making it clear is repaid to everyone who comes after, including the person who wrote it and has since forgotten why any of it is there.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "Caching is one of the two hard problems in computing, and naming things is the other. The difficulty is never storing the value; it is knowing the moment it stopped being true.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "Every abstraction leaks. The point is not to find one that does not, but to choose one whose leaks appear in places you can afford to look at, and to know in advance where those places are.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "A backup that has never been restored is not a backup. It is an untested assumption written to disk, and the first time anyone finds out whether it works will be the worst possible moment to learn.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "The network is not reliable, latency is not zero, bandwidth is not infinite, and the topology does not stay still. Every distributed system that ignores one of these eventually rediscovers it under load.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "Premature optimisation wastes effort, but so does the belief that performance can always be added later. Some decisions about data layout and interface shape are very expensive to reverse once anything depends on them.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "Security is a property of a whole system, not a feature bolted to the side of one. A perfect lock on a door in a wall made of paper protects nothing, and most real failures are of that shape.",
+ "attribution": "Unknown"
+ },
+ {
+ "category": "technology",
+ "content": "Version control does not exist to store code. It exists to answer the question of what changed and why, which is the only question that matters when something has broken and nobody remembers touching it.",
+ "attribution": "Unknown"
+ }
]