Compare commits

..

1 commit

Author SHA1 Message Date
61425caedf
Finish up our first article 2024-04-06 23:30:42 -04:00
30 changed files with 25 additions and 3876 deletions

3
.gitattributes vendored
View file

@ -1,2 +1 @@
assets/* filter=lfs diff=lfs merge=lfs -text assets/ filter=lfs diff=lfs merge=lfs -text
templates/images/* filter=lfs diff=lfs merge=lfs -text

View file

@ -1,25 +0,0 @@
[[language]]
name = "grz"
scope = "scope.grz"
injection-regex = "grz"
file-types = ["grz"]
roots = []
auto-format = true
comment-token = "//"
indent = { tab-width = 4, unit = " " }
language-servers = ["grezi"]
[[grammer]]
name = "grz"
[[language]]
name = "djot"
scope = "scope.djot"
injection-regex = "dj|djot"
file-types = ["dj"]
roots = []
comment-token = "{%"
indent = { tab-width = 4, unit = " " }
[[grammar]]
name = "djot"

View file

@ -1,19 +0,0 @@
clone:
git:
image: woodpeckerci/plugin-git
settings:
partial: false
steps:
- name: build
image: journal
environment:
BASE_URL: https://compute.nations.lol
CODE_THEME: emacs
HELIX_RUNTIME: /usr/lib/helix/runtime
commands:
- bruin-journal-gen
volumes:
- /var/woodpecker:/var/woodpecker
- /usr/share/fonts:/usr/share/fonts
- /usr/lib/helix/runtime/:/usr/lib/helix/runtime/

BIN
assets/ChatGPT_code.png (Stored with Git LFS)

Binary file not shown.

BIN
assets/Jumping.gif (Stored with Git LFS)

Binary file not shown.

View file

BIN
assets/both-is-good.gif (Stored with Git LFS)

Binary file not shown.

BIN
assets/cat.jpeg (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
assets/google_cosplay.jpg (Stored with Git LFS)

Binary file not shown.

BIN
assets/luddites.jpg (Stored with Git LFS)

Binary file not shown.

BIN
assets/the_pipeline.svg (Stored with Git LFS)

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 130 B

After

Width:  |  Height:  |  Size: 201 KiB

View file

@ -1,144 +0,0 @@
`attributes`{published="2024-06-05 10:30"}
## Introduction to Artificial Intelligence : Origins and Limitations
At the vanguard of technological advancement, artificial intelligence(AI) holds the potential to completely transform the way we work, live, and interact with the world. Fundamentally, AI is the creation of computer systems that are able to carry out operations that usually call for human intelligence, like comprehending natural language, identifying patterns, and making data-driven decisions.
The idea of AI was first proposed in the middle of the 20th century, when scientists like Alan Turing laid the foundation for the creation of intelligent machines. Artificial intelligence has advanced from theoretical conjecture to practical reality throughout the years, thanks to advances in computational power and algorithmic methodologies. This has resulted in achievements in fields like machine learning, natural language processing, and robotics.
Artificial Intelligence has its share of drawbacks and limitations, despite its amazing potential. The fact that AI has a propensity to make mistakes and display biases, which frequently reflects the shortcomings of the training data, is one of the biggest problems it faces. Furthermore, AI systems occasionally display behavior that can only be said to be "delulu," with corny terminology and repetitious language patterns finding their way into their exchanges.
Even though AI has advanced significantly in recent years, there is still much to be done to fix its flaws and expand its potential. It is critical that we approach AI development in this era of balanced perspectives, appreciating both its potential and its current limitations, as we negotiate its rapid advancement. While AI is a useful tool in our technological toolbox, it should not be too depended upon to solve every issue. Rather, we ought to anticipate how AI will develop going forward and how it might help to create a better future for all people.
## AI in Education
Artificial Intelligence serves as a constant reminder of growth and progress in our technologically sophisticated and ever-evolving civilization. Though it once appeared to be a concept from science fiction, AI has become a part of current life and is transforming human technology. Its accessibility has significantly increased the efficiency of our society, both outside and inside of educational institutions. AI has the power to completely change teaching and learning, even in the face of certain worries for both teachers and pupils.
## Unveiling AI's Educational Powerhouse
Artificial intelligence functions incredibly well, constantly providing intelligent answers to the majority of problems posed to it. It seemed like technology had reached its zenith at an age when search engines ruled the internet and offered access to a seemingly limitless supply of information. But the emergence of generative AI has broken through these preconceived notions and propelled technology to previously unheard-of heights. The way we access and use knowledge is being revolutionized by AI's capacity to digest large volumes of data and give customized solutions.
The field of education is one where this shift is most noticeable. Imagine being able to provide pupils with prompt, precise responses to their inquiries, allowing them to swiftly understand difficult subjects. By using AI tools, educators may better meet the needs of each individual student by customizing learning experiences. AI is paving the way for a revolution in education that will increase learning efficiency and engagement by improving both the teaching and learning processes. Additionally, each student can advance at their own rate with the help of AI-powered adaptive learning technologies, improving overall educational outcomes.
## AI as a Reliable Backup in Information Retrieval
Within the contemporary world's extensive digital environment, search engines have evolved into essential resources for promptly and effectively retrieving information. But even with their advanced technology, search engines can occasionally produce results that are neither relevant nor accurate. When conventional search techniques are insufficient, Artificial Intelligence can be relied upon to provide a supplementary means of information retrieval.
Search engines' dependence on keyword-based queries, which might not always accurately reflect a user's intent, is one of their main drawbacks. This might result in misleading or inappropriate search results, particularly when handling ambiguous or complex queries. AI, on the other hand, makes better use of context, semantics, and user preferences by utilizing sophisticated machine learning and natural language processing techniques. AI can provide more precise and tailored solutions by examining patterns in user behavior and content. This guarantees that consumers can obtain the information they require, even in situations when search engines are not able to provide it.
AI is also very good at managing unstructured data, which can be difficult for traditional search engines to handle. Examples of this type of data include photos, videos, and audio recordings. Artificial Intelligence can enhance the process of information retrieval by gaining significant insights from multimedia content through techniques such as picture identification, speech recognition, and sentiment analysis. The depth and scope of information that users can access is increased because AI can find hidden linkages and correlations that are missed by conventional search algorithms thanks to this multidimensional approach to content analysis.
Beyond the reactive nature of conventional search engines, AI provides proactive and adaptable search capabilities. AI systems may anticipate user requirements and preferences by learning from user interactions and feedback. This allows them to make appropriate content suggestions in advance or refine search queries in real-time. In addition to saving users time and effort, this proactive support ensures a more positive search experience by streamlining the information retrieval process.
AI is useful for data verification and fact-checking in addition to improving information retrieval, particularly in the age of false information and fake news. AI can assist users in differentiating between trustworthy and untrustworthy sources by cross-referencing several sources and assessing the information's credibility. This helps to foster critical thinking and digital literacy. Real-time information verification gives the search process an additional degree of trustworthiness and dependability and enables consumers to base their judgments on current and accurate information.
## Easing the Burden on Educators
AI has the ability to significantly reduce the effort and stress that educators, who frequently deal with excessive workloads, bear. While grading can be a time-consuming effort, AI-powered solutions can automate a large portion of it, giving assessments that are correct and completed quickly. This lessens the effort for educators while simultaneously guaranteeing kids receive timely feedback, which is essential for their academic development. AI frees up teachers to concentrate on more important facets of teaching, such mentorship and individualized instruction, by managing routine and administrative duties.
AI can also serve as an additional teaching tool, empowering students to study on their own and lowering their dependency on instructors. Smart tutoring programs may adjust to each student's unique learning style and speed by giving them extra practice and explanations outside of the classroom. When a teacher can not give each student enough attention in a large classroom, this support system can be especially helpful. Artificial Intelligence has the potential to enhance the effectiveness and balance of the educational environment by reducing the workload of educators.
## Dispelling the Threats About AI
Artificial intelligence is a topic of great concern in today's debate, with worries about job displacement, loss of human autonomy, and moral quandaries being major issues. But if AI is only seen with fear, we will fail to see AI's potential as a force for good in society. Sociological principles allow us to examine AI and conclude that, far from being a threat, its integration can be seen as a transformational force that might improve many facets of our shared existence.
We can solve important societal issues like enhancing healthcare accessible, encouraging environmental sustainability, and lowering economic inequality by embracing AI's potential. Because of AI's capacity for data analysis and solution generation, these fields may see novel approaches that promote a more just and inclusive society. Rather than being afraid of AI, we ought to be more interested in how it may be used to advance good. AI-driven healthcare solutions, for instance, have the potential to improve public health outcomes by lowering the cost and increasing accessibility of medical tests and treatments.
## Why AI Should Not Be Perceived as a Threat
Historically, there has been a propensity for certain people to view the emergence of new technologies as a threat. Fear of the unknown combined with over-the-top depictions in popular culture frequently results in anxiety around the possible outcomes of these advancements. But a closer look at previous technological revolutions shows that these worries are frequently unwarranted. For instance, there were many worries throughout the Industrial Revolution that machines would completely replace human labor, resulting in massive unemployment and the collapse of society. While it is true that some jobs were mechanized, there was also an increase in employment options and new industries that developed, which ultimately led to a net increase in jobs and general prosperity. Similar to how the invention of vehicles sparked worries about public safety and the direction of transportation, cars are now an essential component of contemporary life, enhancing accessibility and mobility for billions of people worldwide.
The most important takeaway from these historical connections is that humankind does not always suffer from the advancement of technology. Rather, it is and has always been a driving force behind innovation, economic expansion, and social progress. Like the ground-breaking technologies that came before it, AI should not be seen as a threat, but rather as a tool for improving human skills and tackling some of the most important issues our world is currently facing.
Furthermore, it is critical to understand that AI is governed and overseen by humans; it is not autonomous. More fiction than fact exists when it comes to the idea of a dystopian future in which AI systems revolt against their creators. AI developers and researchers are making a concerted effort to make sure that AI is in line with human values and goals by integrating ethical concepts into the technology's conception and application. AI systems are also not perfect; biases, mistakes, and constraints arising from programming and data inputs can affect them. Therefore, it is essential to approach the development of AI with accountability, openness, and a dedication to reducing potential hazards.
## Social Construction of Technology
The idea of the social construction of technology (SCOT) is one lens through which to see the implications of AI. SCOT theory holds that institutional arrangements, power dynamics, and cultural values are some of the societal influences that influence the development and application of technology. In this setting, people's and institutions' interpretations and uses of AI will decide its place in society, which is not set in stone. Society may take advantage of AI's potential to address urgent social issues like health care accessibility, environmental sustainability, and economic injustice by actively influencing the technology's development and application.
AI, for example, may be customized to meet the various demands and ideals of many communities, guaranteeing that its advantages are shared by all. Diverse stakeholders can be included in the creation of AI to help reduce biases and make sure the technology works for the greater good. This strategy encourages cooperation and trust amongst various society groups in addition to optimizing AI's beneficial effects. AI has the potential to be a tool for social justice and equity through encouraging inclusive development methods.
## Structural Functionalism
According to structural functionalist theory, society is seen as a complex system made up of interdependent pieces that cooperate to keep things stable and cohesive. When properly incorporated, AI may work as a part of this system, increasing production, creativity, and efficiency in a number of industries. Artificial intelligence has the ability to enhance human skills rather than replace human labor, freeing people from menial chores and enabling them to concentrate on more creative and valuable endeavors.
AI enhances the general efficiency and flexibility of social systems through simplifying procedures and optimizing resource distribution. AI, for instance, may manage repetitive duties at work, freeing up staff members to focus on creative and strategic work. AI in healthcare can help with disease diagnosis, allowing medical professionals to treat patients more quickly and accurately. These instances show how AI can improve human capacities, resulting in a society that is more dynamic and efficient. Efficiency gains have the potential to boost economic development and productivity as well.
## Critical Theory
Critical theory posits that societal structures are imbued with power dynamics that perpetuate inequalities and marginalization. While AI has the potential to exacerbate existing disparities, it also offers opportunities for emancipatory change. By interrogating the biases embedded within AI algorithms and decision-making processes, society can work towards creating more inclusive and equitable systems. For instance, ensuring that AI technologies are developed with diverse datasets and perspectives can help prevent biased outcomes and promote fairness.
Furthermore, AI-driven advancements in accessibility, healthcare, and education can democratize access to opportunities and resources, reducing the digital gap and promoting social mobility. AI-driven learning systems, for instance, can offer underprivileged groups individualized instruction, and AI in healthcare can make diagnostic tools accessible to remote locations. These developments demonstrate how AI has the power to promote equality and social progress. Critical theory pushes us to challenge established power structures and make sure that AI development is fair and inclusive.
## AI As A Companion
Artificial Intelligence emerges as a companion for communication and emotional support as well as a tool for knowledge retrieval in an era where digital interactions increasingly shape our social landscape. AI is a nonjudgmental, approachable tool that can help people who are struggling with social anxiety or who need assistance navigating tricky interpersonal circumstances make meaningful connections and gain insightful knowledge.
AI's capacity to study and interpret human language at a degree of sophistication higher than that of conventional search engines is one of the technology's main advantages in communication. Artificial intelligence is able to understand the subtleties of speech, such as tone, attitude, and context, through natural language processing (NLP) algorithms. This enables more individualized and sympathetic interactions. This feature makes it possible for AI to provide individualized guidance and support that speaks to each person's particular needs and feelings, promoting empathy and understanding throughout the engagement.
AI offers a secure and non-threatening environment for those who struggle with social anxiety or find it difficult to express themselves in person to practice communication skills and gain confidence. By using chatbots or virtual assistants, users can practice their communication skills in a low-pressure, encouraging environment by participating in simulated discussions and receiving real-time feedback. For people who want to increase their interpersonal connections and break through social boundaries in their daily lives, this virtual rehearsal environment can be incredibly helpful.
Furthermore, AI can provide insightful analysis and guidance on a variety of subjects, from relationship problems to career conundrums, thanks to its ability to analyze data and recognize patterns. Artificial Intelligence has the capability to leverage extensive databases of information and expertise to generate recommendations and workable plans for common problems and hurdles. AI may provide direction and assistance to help people negotiate life's challenges with more clarity and confidence, whether it is navigating a challenging conversation, managing stress, or developing resilience.
While AI should not be used in place of professional therapy or human interaction, it can be a useful addition to current support systems, particularly during times of crisis or isolation. Artificial intelligence can lend a sympathetic ear and deliver responses that validate people's experiences and feelings when they feel overwhelmed or alone. AI can help reduce feelings of loneliness and isolation by offering empathy and companionship, which promotes a sense of connection and belonging in a world that is becoming more and more digital.
## Positive Externalities of AI In The Economy
The use of AI in education and other fields has the potential to produce large positive externalities. The advantageous outcomes of an activity that are felt by other parties are referred to as positive externalities. AI in education, for example, can raise educational outcomes and literacy rates, creating a workforce that is more educated and more productive. This in turn has the potential to raise living standards generally and accelerate economic growth.
AI can also encourage creativity and innovation, bringing in new markets and employment prospects. Artificial Intelligence frees people up to concentrate on higher-order jobs that need creativity and critical thought by automating repetitive tasks. The development of human capital may be aided by this change in work dynamics as people adjust to more demanding and mentally engaging positions.
Moreover, the predictive powers of AI go beyond academic results. Forecasting economic indicators like GDP and GNP is another application for it. Artificial intelligence can find trends and patterns in massive amounts of data that humans might miss, giving businesses and governments alike insightful information.
It is important to understand that while the labor market may change as a result of AI integration, these changes may not always be detrimental. Artificial Intelligence has promise for eliminating labor-intensive and unfavorable jobs, or frictional unemployment, while also generating new opportunities in developing industries. This phenomenon, sometimes referred to as structural unemployment, is a reflection of the economy's shift toward higher-skilled jobs.
Additionally, the use of AI may result in a more effective use of resources, raising economic production as a whole. The production possibilities curve (PPC), which shows a rise in potential output, shifts outward as people move into more intellectually engaging professions. Increased productivity could also serve to uphold capitalist ideals, since those with more education and adaptive skills will fare better in an AI-driven economy.
Without taking past precedents into account, it is illogical to be afraid about how AI may affect jobs. Even though automated farms and factories have been around for a while, society has managed to adapt and prosper. To prepare the workforce for the needs of the digital age, we should prioritize education and reskilling rather than worrying about job displacement. We can exploit AI's positive externalities to build a more wealthy and inclusive society by embracing its potential and investing in human capital.
## Historical Parallels
Revolutionary inventions have radically changed the trajectory of human progress throughout history. The introduction of search engines in the 1990s is one important instance. When Google first launched in 1998, it completely changed the way we could access information by putting a large amount of material at our fingertips. This change promoted the development of the internet economy, democratized knowledge, and eased international communication.
Similar to this, AI has the power to completely change a number of industries. When personal computers were first introduced in the 1980s, they completely changed households and workplaces by boosting connectivity and productivity. These earlier technological advances are mirrored in AI's capacity to learn, adapt, and comprehend information at previously unheard-of speeds, indicating that we are about to see yet another profound revolution. AI has the potential to completely change how we interact with technology and one another, spurring innovation and advancing society, much as search engines changed how we might obtain information.
Drawing comparisons to past industrialization, AI is poised to adopt comparable patterns. An age of mass production, urbanization, and socioeconomic transformation was brought about by the Industrial Revolution of the 18th and 19th centuries.
With the invention of the steam engine, textile machines, and mechanized agriculture, it signaled a significant transition from rural to industrial economies, changing every aspect of daily life.
Societies were primarily agrarian before industrialization, with most individuals working as subsistence farmers. Traditional agricultural methods were replaced by factory production and mechanization throughout the Industrial Revolution, resulting in a major shift in labor habits. This change freed up manpower for jobs in the expanding industrial sectors in addition to increasing agricultural production.
Food production underwent a revolution when agriculture became mechanized, allowing farmers to cultivate greater lands and produce higher yields. The amount of labor needed for crop planting and harvesting was significantly decreased by innovations like the mechanized reaper and the seed drill. As a result, there was a demand for fewer agricultural laborers, which caused a migration of people from rural to urban areas in search of jobs in factories and manufacturing hubs.
In addition, industrialization promoted technological advancement and the growth of new sectors, including transportation and communication as well as the manufacture of iron and textiles. These developments changed social structures, stimulated economic expansion, and produced new job opportunities. But there were also serious drawbacks to industrialization, such as environmental damage, congestion in cities, and worker exploitation.
Industrialization ultimately resulted in significant gains in economic growth, better access to commodities, and living standards despite its downsides. In a similar vein, AI has the power to completely transform a number of industries, including banking, healthcare, entertainment, and transportation. We can manage the intricacies of technological change and build a future that optimizes AI's benefits for everyone if we embrace the technology's revolutionary promise while addressing its societal downsides.
## AI in Other Countries
The revolutionary effects of AI are not limited to the West; other nations, including China, are also witnessing notable advancements in this field. AI is known as 人工智能 (rén gōng zhì néng) in China, where it is being used to a number of industries, such as urban planning, healthcare, and education. The Chinese government has made significant investments in AI R&D, establishing the nation as a leader in AI innovation worldwide.
AI is being utilized in education to give pupils more individualized learning experiences. AI-powered systems, for instance, enable students to study more efficiently by offering personalized feedback and instructional information. AI is boosting treatment planning and diagnostic accuracy in the healthcare industry, which improves patient outcomes. AI is also being used in smart city projects to enhance energy use, public safety, and traffic management. These developments show how AI has the power to propel development and raise standards of living everywhere.
## Embracing Tomorrow
The use of AI in education represents a change in the way that we instruct and learn. Through accepting its potential and acting responsibly, we open up countless doors for development. Being flexible and keeping an open mind are essential as we traverse the ever changing tech landscape. We can create a future that transcends boundaries and cultivates a more just, inclusive, and sustainable environment for future generations by utilizing AI's capabilities.
Thank you for taking the time to read this article. Your engagement is invaluable, and together, we can shape a brighter future for all with the help of AI.

View file

@ -1,51 +0,0 @@
`attributes`{published="2024-04-25 04:00"}
# Do Not Fear the Threat Artificial Intelligence Poses to Computer Science
Computer science positions are some of the fastest growing occupations as nearly 400,000 openings are projected per year by the U.S. Bureau of Labor Statistics. In 2020, the median annual wage of computer and information technology occupations was $100,530 and $50,000 more than the median annual wage of all occupations at $46,310 the same year (BLS). However, one look at Reddit's r/csmajors would tell a different story. The general conscious seems to be that computer science is a dead end. Too much competition, not enough opportunities, and increasingly demanding prerequisites. But how can this be? The field is predicted to grow by 15% by 2031 (Indeed). In truth, it's far more complex than it seems on the surface. The industry itself continues to grow but future advancement in artificial intelligence could threaten to throw a wrench in it. Will the industry be able to weather the storm? Yes. Artificial intelligence will be a tool used to create better code and improve the industry, not replace it.
## Some Context
Artificial intelligence, or AI for short, has taken over the media in the last two years and its debut could mark the beginning of a new age of technology. With the introduction of OpenAI's ChatGPT, Google's Gemini, and Microsoft's Copilot, it's safe to say that almost everyone has been exposed to this development at some point. With how abrupt AI's inception has been and with the level of exposure it has gotten, it's no surprise that a level of panic has set in. Almost immediately, a lot of fields under the liberal arts umbrella were perceived to be under threat. It seemed that the chatbots would replace writers, art-generating AI like OpenAI's DALL-E would replace artists, and various AI music generators as well as tools would bring the music industry crumbling down. Fortunately, these fields still require a lot of innovation and creativity that AI is just not capable of as of now.
![The first image example of what using ChatGPT to write code looks like.](assets/ChatGPT_code.png)
## Ramifications for Computer Science
Once the dust cleared, a new wave of alarm emerged with technological and computer science industries coming into the crossfire. The nature of the day-to-day work loop of web development and software engineering jobs makes them especially vulnerable to artificial intelligence. Even now, ChatGPT can write intricate code that would take a professional countless hours of labor instantaneously. Artificial Intelligence can, potentially, code faster than humans which could mean a reduction in job openings (Brook's Institute). Junior programming jobs will probably come into the fire first which could increase how demanding the already rigorous boundaries of entry are (Business Insider). Artificial intelligence excels at performing repetitive tasks with accuracy and efficiency. Unfortunately, programming jobs involve a lot of bug fixing and code testing as well as generation, all tasks that are repetitive and easily accomplished by AI applications like ChatGPT currently. That does not bode well for how future-proof these positions will be. Furthermore, with the use of AI, new applications will be developed that could be used to design websites and run maintenance programs that will deem some software engineering positions impractical (Medium).
## On the Bright Side
Despite this, however, there has been a significant effort to protect the potentially 300 million jobs that are endangered by advancement in artificial intelligence. Last year, Elon Musk and over 1,000 other scientists called for a temporary pause on AI development to protect industries and, supposedly, humanity itself (Reuters). ChatGPT also, seemingly, had a change in policy regarding printing intricate code. The application now prompts users to hire a programmer which sheds some light on the effort these companies are making in an attempt to prevent the unthinkable (Business Insider). AI could prospectively increase corporate profits by about 4.4 billion dollars which could create new jobs or opportunities for already existing jobs in the computer science field. There's no ignoring the fact that 30% of labor hours in the United States could be automated and 12 million workers may have to find new fields of employment by 2030, but artificial intelligence has the prospective qualities to become humanity's greatest innovation and tool. As soon as 2025, artificial intelligence and machine learning could create over 97 million jobs globally (McKinsey Global Institute). The possibilities are endless, but computer scientists need to stay up to date with advancements in artificial intelligence so that it can be a help, not a hindrance.
![A drawing of Luddites destroying machinery from the industrial revolution (1811-1816)](assets/luddites.jpg)
## Some Historical Analysis
In the end, computer science is the story of human innovation, automation, and in some ways, replacement. From the Industrial Revolution to the upcoming, or current, age of artificial intelligence, technology has seen a significant amount of resistance. When the limited and spinning wheel-reliant textile industry of the pre-industrial revolution age was replaced with the spinning jenny, the workers of the time took matters into their own hands by destroying machinery in cotton mills they believed would threaten their jobs. Of course, the plights and actions of the Luddites seem ridiculous by today's standards but what they were gripping which can be easily synthesized by the concerns of the present. Humanity always adapts and moves forward with change. The “coding” of the future will look nothing like the coding of today, but that is also true of the coding of the past. What computer scientists and programmers pour endless hours of hard work into does not match what Ada Lovelace or Alan Turing created (LinkedIn). Most of the computer scientists of the present do not code in BASIC anymore, just as those of the future will probably not use Python or Java. Man's fight with what it invents is a tale as old as time and remains a constant theme as something that captivates our imaginations. Enthusiastically await, dread, or ignore it. It is simply an unshakeable state of affairs that has persisted through our past, dominates our present, and will define our future. Change does not merely replace or introduce and it is neither malicious nor benevolent, it just is.
## What Does This All Mean?
Any current or prospective computer scientists must know that any threat artificial intelligence may pose to their industry is not purely hostile. Continue to learn all you can about what you care about. Invest your time in what you believe to be the most valuable use of it. Make use of every opportunity in your path and every second in your possession for change comes for us all. It could be as swiftly as tomorrow or as gradually as three decades from now. Never stop learning so that when it does come, you'll be ready to adapt, improve, and prosper despite its obstacles.
## Bibliography
1. Elon Musk and Others Urge Ai Pause, Citing “risks to Society” | Reuters, www.reuters.com/technology/musk-experts-urge-pause-training-ai-systems-that-can-outperform-gpt-4-2023-03-29/. Accessed 25 Apr. 2024.
2. Job Outlook for Careers in Computer Science | Indeed.Com, www.indeed.com/career-advice/finding-a-job/job-outlook-for-computer-science. Accessed 25 Apr. 2024.
3. “Fastest Growing Occupations: Occupational Outlook Handbook.” U.S. Bureau of Labor Statistics, U.S. Bureau of Labor Statistics, 17 Apr. 2024, www.bls.gov/ooh/fastest-growing.htm.
4. “Computer and Information Technology Occupations: Occupational Outlook Handbook.” U.S. Bureau of Labor Statistics, U.S. Bureau of Labor Statistics, 17 Apr. 2024, www.bls.gov/ooh/computer-and-information-technology/home.htm.
5. “These Industries Will Face the Biggest Talent Shortages by 2030.” LinkedIn, www.linkedin.com/business/talent/blog/talent-strategy/industries-biggest-talent-shortages-2030. Accessed 25 Apr. 2024.
6. “Will AI Replace Programmers? Navigating the Future of Coding.” Will AI Replace Programmers? Navigating the Future of Coding | Continuing Education | UC San Diego Division of Extended Studies, extendedstudies.ucsd.edu/news-and-events/division-of-extended-studies-blog/will-ai-replace-programmers-the-future-of-coding. Accessed 25 Apr. 2024.
7. Zinkula, Jacob. “Chatgpt May Be Coming for Our Jobs. Here Are the 10 Roles That AI Is Most Likely to Replace.” Business Insider, Business Insider, www.businessinsider.com/chatgpt-jobs-at-risk-replacement-artificial-intelligence-ai-labor-trends-2023-02#tech-jobs-coders-computer-programmers-software-engineers-data-analysts-1. Accessed 25 Apr. 2024.
8. Chui, Michael, and Lareina Yee. “Ai Could Increase Corporate Profits by $4.4 Trillion a Year, According to New Research.” McKinsey & Company, McKinsey & Company, 18 July 2023, www.mckinsey.com/mgi/overview/in-the-news/ai-could-increase-corporate-profits-by-4-trillion-a-year-according-to-new-research.
9. Pednekar, Pratik. “How Ai Is Threatening the Future of Programming Jobs.” Medium, Medium, 12 Feb. 2023, epratik.medium.com/how-ai-is-threatening-the-future-of-programming-jobs-771cb1aecc.
10. M., Sanjay K. “The Evolution of Programming Languages: Past, Present, and Future.” The Evolution of Programming Languages: Past, Present, and F, 28 Mar. 2023, www.linkedin.com/pulse/evolution-programming-languages-past-present-future-mohindroo-.

View file

@ -1,65 +0,0 @@
`attributes`{published="2024-05-06 08:00"}
# Forward
My name is Jonah Ascoli, and I'm the founding editor of Compute.
Compute is a computer science journal for
anyone in Lake Braddock to enjoy.
In this article, I'll talk about the mission of this journal,
how we'll be operating in the future,
and how _you_ can participate.
## The Mission
Compute's goal is to serve as an informative journal,
catered to Lake Braddock students, while allowing journalists to
express creativity in their articles. By keeping the journal broad,
encompassing the entirety of computer science,
there are very few restrictions in what journalists can write about,
and by extension, what anyone can read about.
## Operating Schedule
We plan on making editions every month, each with at least
one article per journalist.
This edition will then be destributed across
Lake Braddock's computer science program,
through a Discord server, (more on that later)
a mailing list,
and schoology updates,
giving any CS student a
chance to read any/all of the articles written.
The hope (and long term goal) of this project is to
continue operating for years to come,
making it a staple in Lake Braddock's computer science program.
You may be asking, "I want in! Where do I start?"
## How _You_ Can Participate
The nature of a student-run journal is that, well,
it needs students to run it.
Without journalists, webmaster(s), and organizers, this journal
would inevitably die off. Furthermore, there's no upper limit on how many
contributers there can be for a journal - of course quality is more important
than quantity, but of course:
![Both is good.][assets/both-is-good.gif]
To become a journalist, all you have to do is join the
Compute [Discord Server](https://discord.gg/WSaHCnUanJ)!
From there, there will be detailed instruction,
and anything you don't understand, I can help you with!
It would be awesome to get as many people as possible for this journal,
so it would be hugely appreciated if you want to join.
There's also a Compute club! It only meets once a month for an hour,
and journalists aren't required to come to the meetings, but if you want,
you can also come to the club to get started (for more information on the club,
join the Discord server.)
Anyways, that's what Compute's all about. Since you read the whole article,
here's a picture of a cute cat:
![Cute Cat][assets/cat.jpeg]

View file

@ -1,12 +1,10 @@
`attributes`{published="2024-05-02 08:00"} # How to Run a Journal
# Web-dev, and the Power of Simplicity. Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In this article, I'd like to talk about just that: the infra behind this journal, how it all works, and why it is the way it is.
Hi! I'm Isaac Mills, I'm the guy managing the infrastructure behind Compute! In this article, I'd like to talk about just that: the infra behind this media outlet, how it all works, and why it is the way it is.
## Plain text ## Plain text
Plain text is as simple as it gets, yet it can be an extremely powerful tool. It's capable of being anything, and can also be transmuted into anything. Its infinite extensibility makes it a formidable tool that every developer should have in their arsenal. For our case, we use a lot of plain text. In fact, the article you're reading right now is written in plain text, _not with some web UI_. A while back, I found a markup language called [djot](https://djot.net). It was created by the same person who created CommonMark, a flavor of markdown, to be easier to parse and more featureful. Below is some example djot Plain text is kind of insane. It's capable of being anything, and can also be transmuted into anything. It's infinite extensibility makes it a powerful tool that every developer should have in their arsenal. For this journal, we use a lot of plain text. In fact, the article you're reading right now is written in plain text, _not with some web UI_. A while back, I found a markup language called [djot](https://djot.net). It was created by the same person who created CommonMark, a flavor of markdown, to be easier to parse and more featureful. Below is some example djot
```djot ```djot
# Heading # Heading
@ -20,12 +18,11 @@ paragraph
1. list 1. list
2. list 2. list
3. list
``` ```
The benefit of using djot is that it compiles directly to HTML, thus the jorunalists who have joined Compute don't need to learn HTML to write articles. They also don't need to learn a clunky slow website editor like Wix or Squarespace. The benefit of using djot is that it compiles directly to HTML, thus the jorunalists who have joined Compute don't need to learn HTML to write articles. They also don't need to learn a clunky slow website editor like Wix or Squarespace.
This is another superpower of plain text, if we used Wix for our website, our journalists would need to learn how to use the Wix UI, and how to write articles _for_ that UI. If we needed to change our tooling at any time, they would need to re-learn everything for _that_ tool. Not only that, but we would need to port the entire website (_every_ article), to use that new tooling. This is not so with plain text, if things change in the pipeline, or even if you're just joining our publication, there's no need to re-learn how to write text. At worst, you just need to convert the plain text to another format of plain text (djot to HTML for example). All our journalists need to know how to do is write their articles in djot, and submit it to the team via the pipeline This is another superpower of plain text, if we used Wix for our website, our journalists would need to learn how to use the Wix UI, and how to write articles _for_ that UI. If we needed to change our tooling at any time, they would need to re-learn everything for _that_ tool. Not only that, but we would need to port the entire journal (_every_ article), to use that new tooling. This is not so with plain text, if things change in the pipeline, or even if you're just joining the journal, there's no need to re-learn how to write text. At worst, you just need to convert the plain text to another format of plain text (djot to HTML for example). All our journalists need to know how to do is write their articles in djot, and submit it to the team via the pipeline
## The Pipeline ## The Pipeline
@ -39,7 +36,7 @@ Pictured above is the full pipeline that articles go through in order to reach y
4. Once the article has been edited, the pull request gets merged into the main branch of our git repository, which is where the articles you see live 4. Once the article has been edited, the pull request gets merged into the main branch of our git repository, which is where the articles you see live
5. From there, the article goes through CI and gets deployed (we'll get into that in more detail later) 5. From there, the article goes through CI and gets deployed (we'll get into that in more detail later)
Basically, this is just the workflow you would use for code, but adapted for journalism. In other words, no learning curve for our journalists! And if they do need to learn it, then this is information that they *should* know _anyway_. The workflow you see above has been in the making since git was created in 2005, with the sole purpose of efficiently moving code from development, into production. In the places where this workflow is used, more overhead in the pipeline means time, and time means money. Thus the workflow used in those places should be as simple as possible to reduce overhead, and I see it no differently for our publication. If this workflow has worked for nearly 2 decades for a pathologically huge project like the Linux kernel (which git was tailor-made to handle), the better. Basically, this is just the workflow you would use for code, but adapted for journalism. In other words, no learning curve for our journalists! And if they do need to learn it, then this is information that they *should* know _anyway_. The workflow you see above has been in the making since git was created in 2005, with the sole purpose of efficiently moving code from development, into production. The more efficiently we can accomplish that, and the more bad code we can filter out of production, the better. If this workflow has worked for nearly 2 decades for a pathologically huge project like the Linux kernel (which git was tailor-made to handle), the better.
## CI ## CI
@ -47,9 +44,9 @@ Consider the following: If I'm accepting untrusted code from the public into my
Their pipeline checks if the library with your new code compiles to every platform it's compatible with, with every feature enabled. It also makes sure that your code is well-formatted, contains no conflicts of license, uses no libraries banned by the project, and contains no security advisories. The _only_ way this many checks can be done on every git commit, is through CI, GitHub Actions in egui's case. Their pipeline checks if the library with your new code compiles to every platform it's compatible with, with every feature enabled. It also makes sure that your code is well-formatted, contains no conflicts of license, uses no libraries banned by the project, and contains no security advisories. The _only_ way this many checks can be done on every git commit, is through CI, GitHub Actions in egui's case.
The way I've described CI so far has probably made it seem like the least simple thing you could add to your project, but CI is actually _quite_ simple, and it's an excellent example of how capable of a tool you can make by just building simple, on top of simple, on top of simple. Really, CI is just shell scripting with extra steps. Despite it's inherent simplicity, CI can serve not only as a means to filter bugs out of pull requests, but it can also be a simple way to communicate to open source developers _what a project wants_ out of their code. Instead of having to read a big `CONTRIBUTORS.md` file to get an idea of that, developers can know that their code is good quality if it just passes CI. If you're making an open source project, and it becomes big enough to pull in contributions from a lot of developers, CI can not only serve as a means to filter bugs out of pull requests, but also as a way to communicate to open source developers _what a project wants_ out of their code. Instead of having to read a big `CONTRIBUTORS.md` file to get an idea of that, developers can know that their code is good quality if it just passes CI.
Fortunately, the level of CI I've described above isn't required for journalism. Our CI simply compiles our journalists' unreviewed articles, and serves them on an un-indexed (not visible on production) web page so that they and the team can preview their work before merging it. Our CI is also responsible for indexing and publishing finished articles onto our production website. Fortunately, the level of CI I've described above is not required for journalism. Our CI simply compiles our journalists' unreviewed articles, and serves them on an un-indexed (not visible on production) web page so that they and the team can preview their work before merging it. Our CI is also responsible for indexing and publishing finished articles onto our production website. We could get the CI to do an automated grammar check, but there are too many tech-terms that the checker would need to know in order for it to pass consistently.
## Deployment ## Deployment
@ -59,30 +56,26 @@ Deployment is the most complex part of our pipeline; getting the written, produc
- Minify and compress compiled HTML - Minify and compress compiled HTML
- Index articles with our search engine - Index articles with our search engine
Because our CI tool is running this code, we can know which articles need compilation, who wrote those articles, and if any articles need to be deleted. Our CI tools will put our code in the working directory of our git repo. And via environment variables, the CI tool will tell us which files have changed, how the pipeline was triggered (via pull request, code push, etc.), as well as which git branch production resides in, and which branch our code is currently in. Our code can then use this information to... Because our CI tool is running this code, we can know which articles need compilation, who wrote those articles, and if any articles need to be deleted. Via environment variables, our CI tool will pass to our code the git branch we're running on, the git commit that came before the latest one, and the latest git commit. Our code can then use this information to...
- Stat the changed files, which is how we know which files need to be compiled, and which files have been deleted - Run a diff between the two commits, which is how we know which files need to be compiled, and which files have been deleted
- Run a blame on new articles, which is how we figure out who wrote them - Run a blame on the new articles, which is how we figure out who wrote them
- See if we have changed the production branch, and index new articles if so - See if we are we have changed the main branch, and index new articles if so
Everything I've described that the program can do so far can be done in just \~400 lines of Rust. This is the effect of buidling simple on top of simple, _and making an effort to retain simplicity_ by making the most out of the simple building blocks. (P.S: Our Rust code now also generates a title card image for each article, so they look better on platforms like Twitter and Discord. By using the same stradegy, I only needed to add \~230 lines to our Rust code) In our case, what CI allows us to do is keep as much of our pipeline as automated as possible. Our journalists should only need to focus on writing good articles, not wrestling with tooling. Coming back to the benefits of plain text, git is an extremely powerful tool for working with plain text.
[![Google cosplay is not business-critical](assets/google_cosplay.jpg)](https://twitter.com/garybernhardt/status/1344341213575483399)
My Rust code makes heavy use of git, a very simple yet amazing tool for adding functionality to plain text.
- It allows us to separate the WIP and the finished articles - It allows us to separate the WIP and the finished articles
- It allows us to keep an accurate and automated reference of who wrote and edited each article - It allows us to keep an accurate and automated reference of who wrote and edited each article
- It allows a copy of the entire publication to be stored in many different places as backups. - It allows a copy of the entire journal to be stored in many different places as backups.
- It allows us to easily sync new articles and changes to any git-compatible software forge of our choice (we use [forgejo](https://forgejo.org/)) - It allows us to easily sync new articles and changes to any git-compatible software forge of our choice (we use [forgejo](https://forgejo.org/))
By taking advantage of the vast functionality that a simple tool like git gives us, our code can stay lean, while also being very mean. Speaking of staying lean... By and large, with the power of git, plain text can fill more use cases than you could possibly imagine.
## Webpages (and staying based) ## Our webpages (and staying based)
![An image of the giga-chad](assets/giga_chad.jpg) ![An image of the giga-chad](assets/giga_chad.jpg)
There is no better example of the cons of complexity than the modern web. Most webpages are not only bloated with ads, cookie banners, autoplaying BS, popups and the like; but they are also inundated with copious amounts of JavaScript. We only use JavaScript in 2 places The modern web sucks. Most webpages are not only bloated with ads, cookie banners, autoplaying BS, popups and the like; most webpages are also inundated with copious amounts of JavaScript. We only use JavaScript in 2 places
1. On our homepage to power the search bar and display articles 1. On our homepage to power the search bar and display articles
2. Our web design tool, Webflow, bundles a small amount of JavaScript in every page (more on that later) 2. Our web design tool, Webflow, bundles a small amount of JavaScript in every page (more on that later)
@ -91,8 +84,10 @@ Other than that, the actual article pages, such as this one, depend on nothing b
Instead of _that_, I used [Webflow](https://webflow.com/) to design our webpages. For a one-time fee of $24, you can have access to the Webflow editor for 1 month, and then export your web pages to HTML/CSS/JS. Webflow is very different from your average Wix/Squarespace, those editors are designed for non-programmers who don't know and don't want to know HTML or CSS. Webflow is an editor for _developers_ that know what they're doing. It gives you the full power of HTML and CSS in a responsive, visual editor; making it an incredibly flexible tool capable of generating very based and performant webpages. Unlike the latter tools which generate bloated and obfuscated garbage. Instead of _that_, I used [Webflow](https://webflow.com/) to design our webpages. For a one-time fee of $24, you can have access to the Webflow editor for 1 month, and then export your web pages to HTML/CSS/JS. Webflow is very different from your average Wix/Squarespace, those editors are designed for non-programmers who don't know and don't want to know HTML or CSS. Webflow is an editor for _developers_ that know what they're doing. It gives you the full power of HTML and CSS in a responsive, visual editor; making it an incredibly flexible tool capable of generating very based and performant webpages. Unlike the latter tools which generate bloated and obfuscated garbage.
In just HTML, CSS, and JS: The homepage of this journal compressed is around 152.42 KB large, whereas our old Wix website's homepage compressed is around 861.9 KB large. That's nearly a 6x size difference. That's the effect of building your website in a UI that attempts to match up to the flexibility of HTML and CSS... without actually exposing you to the HTML and CSS. This is where Webflow thrives, as it is literally just a simple graphical editor _for_ HTML and CSS. It's another excellent example of what building simple around simple can do! ## Search engine
I was expecting to have to put most of the effort of getting our website ready into getting a search bar working. Instead, I found [Meilisearch](https://www.meilisearch.com/), and I fell in love immediately. Not only is it incredibly easy to deploy _and_ use, but it's also much more than just a search engine. You can basically use it as a way to index and display pages on your website. And by using [instantsearch-meilisearch](https://github.com/meilisearch/meilisearch-js-plugins/tree/main/packages/instant-meilisearch) (that one dependency that our homepage uses), we can just make an article browser and search experience, _incredibly_ easily. It's not just easy on the front-end, the [meilisearch-sdk](https://lib.rs/crates/meilisearch-sdk) is also incredibly easy to use to index articles. Meilisearch, despite being a complex full-text search engine, is incredibly simple to use. Just initialize a search index, and send documents to it in a structured JSON format. On the front end, you can get that JSON back with a simple HTTP request containing the search query and field constraints (sorting, only sending snippets of big fields, etc.). All in all, Meilisearch's unexpected simplicity suprised me in a big way, and it made my job so _sooo_ much easier!
## In conclusion ## In conclusion
Computers have an inconcievable amount of potential, but they're only as smart as their programmer. When you're building something with a computer, it's often much better to do more with less, than less with more. Don't use 17 different JavaScript frameworks with your hypervisor GPU WEB2.0 interface-driven scripting framework to drive your map/reduce-aware proxy-oriented software API. Just start simple, build simple, and if you need complexity, build it with more simple. The point I'm trying to make here is that bloat is your enemy, and it's often better for you, your team, and your users to just KISS (Keep it simple, stupid!) Computers have an inconcievable amount of potential, but they're only as smart as their programmer. When you're building something with a computer, it's often much better to do more with less, than less with more. Don't use 17 different JavaScript frameworks with your hypervisor GPU WEB2.0 interface-driven scripting framework to drive your map/reduce-aware proxy-oriented software API. Just start simple, build simple, and if you need complexity, create it with the simple. Often times in computer software, plain text is the simplest place to start. From there, you can add complexity by processing the plain text in some way (hell, I made a whole ass [PowerPoint clone](https://github.com/StratusFearMe21/grezi-next) centered around plain text). If you need more than plain text, try the terminal. And if you need more than that, try [wxWidgets](https://www.wxwidgets.org/). The point I'm trying to make here is that bloat is your enemy, and it's often better for you, your team, and your users to just KISS (Keep it simple, stupid!)

View file

@ -1,118 +0,0 @@
<!DOCTYPE html><!-- This site was created in Webflow. https://www.webflow.com -->
<!-- Last Published: Fri Apr 05 2024 16:19:10 GMT+0000 (Coordinated Universal Time) -->
<html data-wf-page="66101585e19be8199060db0a" data-wf-site="66007382143b5f99deb20223" prefix="og: http://ogp.me/ns#"
xmlns:og="http://opengraphprotocol.org/schema/">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>{{title}}</title>
<link href="/atom.xml" rel="alternate" title="Compute: Lake Braddock's Comp-Sci Journal" type="application/atom+xml">
<meta property="twitter:title" content="{{title}}">
<meta name="theme-color" content="#F6C415">
<meta property="og:title" content="{{title}}">
<meta property="og:type" content="article">
<meta property="og:image" content="{{base_url}}/{{branch}}/{{id}}.png">
<meta property="twitter:image" content="{{base_url}}/{{branch}}/{{id}}.png">
<meta property="og:url" content="{{base_url}}/{{branch}}/{{id}}.html">
<meta property="twitter:domain" content="{{domain}}">
<meta property="twitter:url" content="{{base_url}}/{{branch}}/{{id}}.html">
<meta property="article:published_time" content="{{modified_date}}">
<meta name="twitter:card" content="summary_large_image">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:site_name" content="Compute: Lake Braddock's Comp-Sci Journal">
<meta property="og:article:published_time" content="{{published_og}}">
<meta property="og:article:modified_time" content="{{modified_og}}">
{% for author in authors %}
<meta name="author" content="{{author.full_name}}">
<meta property="og:article:author:first_name" content="{{ author.full_name | split(pat=' ') | nth(n=0) }}">
<meta property="og:article:author:last_name" content="{{ author.full_name | split(pat=' ') | nth(n=1) }}">
<meta property="og:article:author:username" content="{{author.username}}">
<meta property="profile:first_name" content="{{ author.full_name | split(pat=' ') | nth(n=0) }}">
<meta property="profile:last_name" content="{{ author.full_name | split(pat=' ') | nth(n=1) }}">
<meta property="profile:username" content="{{author.username}}">
{% endfor %}
<meta property="og:description" content="{{description}}">
<meta property="twitter:description" content="{{description}}">
<meta content="width=device-width, initial-scale=1" name="viewport">
<meta content="Webflow" name="generator">
<link href="{{base_url}}/css/normalize.css" rel="stylesheet" type="text/css">
<link href="{{base_url}}/css/norwester-pro.css" rel="stylesheet" type="text/css">
<link href="{{base_url}}/css/webflow.css" rel="stylesheet" type="text/css">
<link href="{{base_url}}/css/compute-c23f91.webflow.css" rel="stylesheet" type="text/css">
<link href="{{base_url}}/css/code-theme.css" rel="stylesheet" type="text/css">
<script
type="text/javascript">!function (o, c) {var n = c.documentElement, t = " w-mod-"; n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch")}(window, document);</script>
<link href="{{base_url}}/images/favicon.ico" rel="shortcut icon" type="image/x-icon">
<link href="{{base_url}}/images/webclip.png" rel="apple-touch-icon">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Arimo:ital,wght@0,400..700;1,400..700&family=Fira+Code:wght@300..700&display=swap"
rel="stylesheet">
</head>
<body>
<div data-animation="default" data-collapse="medium" data-duration="400" data-easing="ease" data-easing2="ease"
role="banner" class="w-nav">
<div class="container-2 w-container">
<a href="{{base_url}}/" class="w-nav-brand"><img src="{{base_url}}/images/logo-z.svg" loading="lazy"
alt="Compute logo" height="64"></a>
<nav role="navigation" class="w-nav-menu">
<a href="{{base_url}}/" class="w-nav-link">Home</a>
<a href="{{base_url}}/atom.xml" class="w-nav-link">RSS/Atom</a>
<a href="https://discord.gg/mRHP9mSqG9" class="w-nav-link">Discord Server</a>
</nav>
<div class="w-nav-button">
<div class="w-icon-nav-menu"></div>
</div>
</div>
</div>
<div class="w-layout-vflex flex-block-2 purple" style="background-color:#552a85">
<div id="header-elements">
<h1 id="title" class="heading-8 nw-regular">{{title}}</h1>
<div class="w-layout-hflex flex-block-3">
{% for author in authors %}
<img src="{{author.avatar_url}}" loading="lazy" width="32" height="32" alt="{{author.full_name}}'s Avatar"
class="image">
<div class="text-block-2">{{author.full_name}}</div>
{% endfor %}
</div>
<p class="text-block-2" style="font-size: 16px;margin: 0;">
{{read_time}} minute read · Published: {{published}}
</p>
</div>
</div>
<article class="content">{{body}}</article>
<hr>
<center>
<a style="text-decoration: none;" href="https://listmonk.nations.lol/subscription/form">
<h3 style="font-size: 24px; color: grey;">Get Notified of new articles!</h3>
</a>
<a style="vertical-align: text-bottom;" href="https://listmonk.nations.lol/subscription/form"><svg
xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"
style="vertical-align: text-bottom;">
<path style="fill: grey;"
d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm320-280L160-640v400h640v-400L480-440Zm0-80 320-200H160l320 200ZM160-640v-80 480-400Z" />
</svg></a>
<a href="http://compute.nations.lol/atom.xml" style="vertical-align: text-bottom;"><svg
xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"
style="vertical-align: text-bottom;">
<path style="fill: grey;"
d="M200-120q-33 0-56.5-23.5T120-200q0-33 23.5-56.5T200-280q33 0 56.5 23.5T280-200q0 33-23.5 56.5T200-120Zm480 0q0-117-44-218.5T516-516q-76-76-177.5-120T120-680v-120q142 0 265 53t216 146q93 93 146 216t53 265H680Zm-240 0q0-67-25-124.5T346-346q-44-44-101.5-69T120-440v-120q92 0 171.5 34.5T431-431q60 60 94.5 139.5T560-120H440Z" />
</svg></a>
<a href="{{base_url}}/">
<h3 style="min-height:200px">Read more from Compute</h3>
</a>
</center>
{% if scripts %}
<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=66007382143b5f99deb20223"
type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>
<script src="{{base_url}}/js/webflow.js" type="text/javascript"></script>
<script src="{{base_url}}/js/code_copy.js" type="text/javascript"></script>
{% endif %}
</body>
</html>

View file

@ -1 +0,0 @@
../assets/

View file

@ -1,273 +0,0 @@
.content code .a {
color: #483D8B;
}
.content code .b {
color: #B22222;
}
.content code .c {
color: #008B8B;
}
.content code .d {
color: #483D8B;
}
.content code .e {
color: #228B22;
}
.content code .f {
text-decoration-color: #FF0000;
text-decoration: underline wavy;
}
.content code .g {
text-decoration-color: #008B8B;
text-decoration: underline wavy;
}
.content code .h {
text-decoration-color: #228B22;
text-decoration: underline wavy;
}
.content code .i {
text-decoration-color: #FF8C00;
text-decoration: underline wavy;
}
.content code .j {
color: #EE9A00;
}
.content code .k {
color: #EE0000;
}
.content code .l {
color: #00CD00;
}
.content code .m {
color: #FF0000;
}
.content code .n {
color: #0000FF;
}
.content code .o {
color: #483D8B;
}
.content code .p {
color: #0000FF;
}
.content code .q {
color: #483D8B;
}
.content code .r {
color: #483D8B;
}
.content code .s {
color: #008B8B;
}
.content code .t {
color: #228B22;
}
.content code .u {
color: #A020F0;
}
.content code .v {
color: #483D8B;
}
.content code .w {
font-weight: bold;
}
.content code .x {
color: #FFD700;
font-weight: bold;
}
.content code .y {
color: #0000FF;
}
.content code .z {
color: #A0522D;
}
.content code .aa {
color: #A020F0;
}
.content code .ab {
color: #B22222;
}
.content code .ac {
color: #228B22;
}
.content code .ad {
color: #008B8B;
}
.content code .ae {
color: #999999;
}
.content code .af {
font-style: italic;
}
.content code .ag {
color: #3A5FCD;
}
.content code .ah {
color: #3A5FCD;
text-decoration: underline;
}
.content code .ai {
color: #000000;
}
.content code .aj {
color: #999999;
}
.content code .ak {
color: #008B8B;
}
.content code .al {
color: #008B8B;
}
.content code .am {
}
.content code .an {
color: #008B8B;
}
.content code .ao {
color: #008B8B;
}
.content code .ap {
color: #A020F0;
}
.content code .aq {
color: #000000;
}
.content code .ar {
color: #0000FF;
}
.content code .as {
color: #8B2252;
}
.content code .at {
color: #8B2252;
font-weight: bold;
}
.content code .au {
color: #0000FF;
}
.content code .av {
color: #228B22;
}
.content code .aw {
color: #483D8B;
}
.content pre {
border: 1px solid #999;
color: #000000;
background-color: #FFFFFF;
}
.content code .ay {
color: #000000;
background-color: #FFFFFF;
}
.content code .az {
color: #5C5C5C;
background-color: #E5E5E5;
text-decoration: underline;
}
.content code .ba {
color: #000000;
background-color: #FCFCFC;
}
.content code .bb {
background-color: #BFBFBF;
}
.content code .bc {
color: #FFFFFF;
background-color: #B3B3B3;
}
.content code .bd {
color: #FF0000;
background-color: #000000;
}
.content code .be {
color: #000000;
background-color: #40E0D0;
}
.content code .bf {
color: #FFFFFF;
background-color: #000000;
}
.content code .bg {
color: #FFFFFF;
background-color: #000000;
}
.content code .bh {
background-color: #B4EEB4;
}
.content code .bi {
background-color: #B4EEB4;
}
.content code .bj {
color: #8B0000;
background-color: #FFF8DC;
}
.content code .bk {
color: #999999;
}
.content code .bl {
color: #CCCCCC;
}
.content code .bm {
color: #000000;
background-color: #FFF8DC;
}
.content code .bn {
color: #8B0000;
background-color: #ADD8E6;
}
.content code .bo {
color: #000000;
background-color: #F7F7F7;
}
.content code .bp {
color: #000000;
background-color: #F7F7F7;
}
.content code .bq {
background-color: #FFEC8B;
}
.content code .br {
background-color: #EEDC82;
}
.content code .bs {
color: #000000;
background-color: #BFBFBF;
}
.content code .bt {
color: #333333;
background-color: #E5E5E5;
}
.content pre code {
display: block;
padding: 20px;
width: fit-content;
color: #000000;
}
.content code .bv {
color: #000000;
background-color: #B4EEB4;
}
.content code .bw {
color: #BFBFBF;
}
.content code .bx {
background-color: #F2F2F2;
}
.content code .by {
}
.content code .bz {
color: #000000;
}
.content code .ca {
color: #A0522D;
}
.content code .cb {
color: #483D8B;
}
.content code .cc {
color: #A0522D;
}
.content code .cd {
color: #FF8C00;
}

View file

@ -1,318 +0,0 @@
:root {
--white: white;
--black: black;
--gap: calc(1rem * 12.5 / 16);
}
body {
font-family: 'Arimo', 'Arial', sans-serif;
}
code {
font-family: 'Fira Code', monospace;
}
.w-layout-blockcontainer {
max-width: 940px;
margin-left: auto;
margin-right: auto;
display: block;
}
.w-layout-grid {
grid-row-gap: 16px;
grid-column-gap: 16px;
grid-template-rows: auto auto;
grid-template-columns: 1fr 1fr;
grid-auto-columns: 1fr;
display: grid;
}
.w-layout-hflex {
flex-direction: row;
align-items: flex-start;
display: flex;
}
@media screen and (max-width: 991px) {
.w-layout-blockcontainer {
max-width: 728px;
}
}
@media screen and (max-width: 767px) {
.w-layout-blockcontainer {
max-width: none;
}
}
article {
display: flex;
flex-direction: column;
align-items: center;
margin: 25px;
gap: var(--gap);
}
.content section {
display: flex;
flex-direction: column;
gap: var(--gap);
word-wrap: break-word;
margin-top: calc(2 * var(--gap));
margin-bottom: 0;
}
.content img {
margin: var(--gap) 0;
}
.content ul,
.content ol {
display: flex;
flex-direction: column;
padding: 0 0 0 2em;
}
.content * {
line-height: 1.5;
margin: 0 0;
padding: 0 0;
}
h1 {
margin-top: auto;
font-size: 128px;
font-weight: 700;
}
p {
font-size: 18px;
}
li {
font-size: 18px;
}
.utility-page-wrap {
justify-content: center;
align-items: center;
width: 100vw;
max-width: 100%;
height: 100vh;
max-height: 100%;
display: flex;
}
.utility-page-content {
text-align: center;
flex-direction: column;
width: 260px;
display: flex;
}
.utility-page-form {
flex-direction: column;
align-items: stretch;
display: flex;
}
.container-2 {
padding-top: 8px;
padding-bottom: 8px;
}
.flex-block-2 {
justify-content: center;
align-items: center;
}
.flex-block-2.purple {
padding-top: 0;
align-items: center;
display: flex;
background-color: #552a85;
overflow-x: hidden;
}
.heading-3 {
color: #f6c415;
font-size: 22vw;
overflow-x: hidden;
}
.heading-3.wrapped-compute {
display: none;
}
.heading-3.unwrapped-compute.compute-gradiant {
-webkit-text-fill-color: transparent;
background-image: linear-gradient(90deg, #f6c415, #f6c41533);
-webkit-background-clip: text;
background-clip: text;
margin-bottom: 20px;
}
.text-block {
color: #fff;
text-align: left;
margin-left: 20px;
margin-right: 20px;
font-size: 18px;
}
.container-3 {
height: 20vh;
margin-top: 8px;
margin-bottom: 8px;
padding-left: 16px;
padding-right: 16px;
}
.heading-4 {
margin-top: 0;
margin-bottom: 0;
font-size: 5vw;
}
.heading-5 {
margin-top: 0;
margin-bottom: 0;
}
.heading-6 {
margin-top: 0;
margin-bottom: 0;
font-size: 64px;
}
.paragraph {
font-size: 24px;
}
.heading-7 {
font-size: 64px;
}
.grid {
padding-left: 16px;
padding-right: 16px;
}
.heading-8 {
color: #f6c415;
text-align: left;
-webkit-text-fill-color: transparent;
background-image: linear-gradient(90deg, #f6c415, rgba(246, 196, 21, .3));
-webkit-background-clip: text;
background-clip: text;
font-size: 64px;
margin-bottom: 8px;
}
.image {
-webkit-text-fill-color: inherit;
background-clip: border-box;
border-radius: 50%;
margin-bottom: 0;
margin-right: 10px;
}
.flex-block-3 {
align-items: center;
}
.text-block-2 {
color: white;
font-size: 18px;
margin-right: 20px;
}
article>* {
width: 96vw;
max-width: 940px;
}
#header-elements {
max-width: 940px;
display: flex;
justify-content: space-around;
flex-direction: column;
margin: 20px;
align-items: flex-start;
gap: 14px;
}
@media screen and (max-width: 991px) {
.heading-3.unwrapped-compute.compute-gradiant {
height: 22vw;
min-height: 0%;
}
article>* {
max-width: min(575px, 85vw);
}
#header-elements {
max-width: 575px;
}
.grid {
grid-template-columns: 1fr;
}
}
@media screen and (max-width: 767px) {
.heading-3.wrapped-compute.compute-gradiant {
-webkit-text-fill-color: transparent;
background-image: linear-gradient(90deg, #f6c415, #f6c41533);
-webkit-background-clip: text;
background-clip: text;
margin-bottom: 20px;
display: block;
}
.ais-Hits-item {
margin-bottom: 1em;
width: calc(50% - 1rem);
}
.heading-3.unwrapped-compute.compute-gradiant {
display: none;
}
}
@media screen and (max-width: 479px) {
.flex-block-2.purple {
flex-flow: column;
justify-content: space-around;
}
.heading-3 {
font-size: 48vw;
}
.heading-3.wrapped-compute {
display: block;
}
.heading-3.wrapped-compute.compute-gradiant {
-webkit-text-fill-color: transparent;
background-image: linear-gradient(90deg, #f6c415, #f6c41533);
-webkit-background-clip: text;
background-clip: text;
min-height: 48vw;
margin-top: 0;
margin-bottom: 10px;
overflow-y: hidden;
}
.heading-3.unwrapped-compute {
display: none;
}
.text-block {
font-size: 6vw;
}
}

View file

@ -1,355 +0,0 @@
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS and IE text size adjust after device orientation change,
* without disabling user zoom.
*/
html {
font-family: sans-serif;
/* 1 */
-ms-text-size-adjust: 100%;
/* 2 */
-webkit-text-size-adjust: 100%;
/* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block;
/* 1 */
vertical-align: baseline;
/* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability of focused elements when they are also in an
* active/hover state.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit;
/* 1 */
font: inherit;
/* 2 */
margin: 0;
/* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
* 4. CUSTOM FOR WEBFLOW: Removed the input[type="submit"] selector to reduce
* specificity and defer to the .w-button selector
*/
button,
html input[type="button"],
input[type="reset"] {
-webkit-appearance: button;
/* 2 */
cursor: pointer;
/* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: default;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type='checkbox'],
input[type='radio'] {
box-sizing: border-box;
/* 1 */
padding: 0;
/* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type='number']::-webkit-inner-spin-button,
input[type='number']::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. CUSTOM FOR WEBFLOW: changed from `textfield` to `none` to normalize iOS rounded input
* 2. CUSTOM FOR WEBFLOW: box-sizing: content-box rule removed
* (similar to normalize.css >=4.0.0)
*/
input[type='search'] {
-webkit-appearance: none;
/* 1 */
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type='search']::-webkit-search-cancel-button,
input[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0;
/* 1 */
padding: 0;
/* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}

View file

@ -1,153 +0,0 @@
@font-face {
font-family: 'Norwester Pro';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro'),
local('NorwesterPro-Regular'),
url(/fonts/NorwesterPro-Regular.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Oblique';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Oblique'),
local('NorwesterPro-RegularOblique'),
url(/fonts/NorwesterPro-RegularOblique.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Regular';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Regular'),
local('NorwesterPro-Regular'),
url(/fonts/NorwesterPro-Regular.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Regular Oblique';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Regular Oblique'),
local('NorwesterPro-RegularOblique'),
url(/fonts/NorwesterPro-RegularOblique.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Rounded';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Rounded'),
local('NorwesterPro-Rounded'),
url(/fonts/NorwesterPro-Rounded.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Rounded Oblique';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Rounded Oblique'),
local('NorwesterPro-RoundedOblique'),
url(/fonts/NorwesterPro-RoundedOblique.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Square';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Square'),
local('NorwesterPro-Square'),
url(/fonts/NorwesterPro-Square.woff2) format('woff2');
}
@font-face {
font-family: 'Norwester Pro Square Oblique';
font-weight: bold;
font-style: normal;
font-display: block;
src: local('Norwester Pro Square Oblique'),
local('NorwesterPro-SquareOblique'),
url(/fonts/NorwesterPro-SquareOblique.woff2) format('woff2');
}
.nw-regular {
font-family: 'Norwester Pro Regular';
}
.nw-regular-obl,
.nw-regular em {
font-family: 'Norwester Pro Regular Oblique';
font-style: normal;
}
.nw-rounded {
font-family: 'Norwester Pro Rounded';
}
.nw-rounded-obl,
.nw-rounded em {
font-family: 'Norwester Pro Rounded Oblique';
}
.nw-square {
font-family: 'Norwester Pro Square';
}
.nw-square-obl,
.nw-square em {
font-family: 'Norwester Pro Square Oblique';
}
.nw-ss01,
.nw-salt {
/* C ð J Ľ S Ü Z @ & */
font-feature-settings: 'ss01';
}
.nw-uppercase {
text-transform: uppercase;
/* Default to no ligatures */
font-variant-ligatures: none;
}
.nw-all-small-caps {
font-variant-caps: all-small-caps;
}
.nw-liga {
text-transform: uppercase;
/* CA CO. EA LA LI LL TH */
font-variant-ligatures: common-ligatures;
}
.nw-liga-off {
/* Turn common-ligatures off but keep discretionary */
font-feature-settings: 'liga' off;
}
.nw-dliga {
text-transform: uppercase;
/* FOR, OF THE, AND, etc */
font-variant-ligatures: discretionary-ligatures;
}
.nw-lining-nums {
font-variant-numeric: lining-nums;
}
.nw-tabular-nums {
font-variant-numeric: tabular-nums;
}
.nw-oldstyle-nums {
font-variant-numeric: oldstyle-nums;
}

File diff suppressed because it is too large Load diff

BIN
templates/images/favicon.ico (Stored with Git LFS)

Binary file not shown.

BIN
templates/images/logo-z.svg (Stored with Git LFS)

Binary file not shown.

BIN
templates/images/webclip.png (Stored with Git LFS)

Binary file not shown.

View file

@ -1,32 +0,0 @@
const copyButtonLabel = "Copy Code";
// use a class selector if available
if (navigator.clipboard) {
let blocks = document.querySelectorAll("pre");
blocks.forEach((block) => {
// only add button if browser supports Clipboard API
let button = document.createElement("button");
button.innerText = copyButtonLabel;
block.parentNode.insertBefore(button, block);
button.addEventListener("click", async (event) => {
await copyCode(block, event.target);
});
});
}
async function copyCode(block, button) {
let code = block.querySelector("code");
let text = code.innerText;
await navigator.clipboard.writeText(text);
// visual feedback that task is completed
button.innerText = "Code Copied";
setTimeout(() => {
button.innerText = copyButtonLabel;
}, 700);
}

File diff suppressed because one or more lines are too long

View file

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1200"
height="630"
viewBox="0 0 1200 630"
version="1.1"
id="svg1"
xml:space="preserve"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="opengraph.svg"
inkscape:export-filename="opengraph-image-export.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showguides="false"
inkscape:zoom="0.61131147"
inkscape:cx="184.03057"
inkscape:cy="83.427193"
inkscape:window-width="1054"
inkscape:window-height="1056"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="layer1"><sodipodi:guide
position="1165.2862,111.68266"
orientation="0,-1"
id="guide4"
inkscape:locked="false" /></sodipodi:namedview><defs
id="defs1"><rect
x="463.15115"
y="27.766033"
width="736.84885"
height="494.60768"
id="rect3" /><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4"><circle
style="fill:#f6c318;fill-opacity:1;stroke:none;stroke-width:5;stroke-opacity:1"
id="circle4"
cx="741.96826"
cy="274.80307"
r="256" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath6"><path
style="fill:#f6c318;fill-opacity:1;stroke-width:5"
d="M 0,630.00003 123.42918,456.44012 173.55991,630.00003 Z"
id="path7" /></clipPath></defs><g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"><rect
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:5.3586;stroke-opacity:1"
id="rect4"
width="447.72949"
height="630"
x="0"
y="0" /><path
d="m 154.57988,37.870709 -0.0353,63.146141 0.0864,-0.0857 15.37032,15.48848 -15.47496,15.35616 -0.007,14.24017 40.51551,0.15416 -40.51644,40.21004 0.063,35.56856 c 0,0 3.97958,2.5272 7.56742,2.40241 3.58784,-0.12479 34.50115,-13.34641 40.76748,-18.07953 6.26634,-4.73311 24.51397,-22.11186 28.00094,-26.99698 3.48623,-4.88587 16.20968,-46.79405 15.85421,-53.2772 -0.35547,-6.48241 -5.74346,-21.76903 -5.74346,-21.76903 0,0 9.75473,-3.89671 18.17576,-17.176977 8.42029,-13.280266 10.09027,-20.881164 5.48734,-29.902254 -4.60218,-9.021839 -45.78654,0.04205 -45.78654,0.04205 0,0 -35.14503,-19.209455 -64.32467,-19.320478 z m 90.93422,24.8529 c 3.32933,-0.02776 6.55651,0.232227 9.24754,0.972809 10.76283,2.963826 -19.36239,31.095392 -19.36239,31.095392 L 224.6305,65.469748 c 0,0 10.89494,-2.66441 20.8836,-2.746139 z m -43.6008,7.325367 1.67481,18.068165 -15.48026,8.486716 -16.73691,-15.635113 z m -47.4322,-32.178643 0.0366,63.146417 -0.0872,-0.0856 -15.36921,15.48827 15.47409,15.35717 0.008,14.23948 -40.51595,0.1549 40.51652,40.20931 -0.062,35.56808 c 0,0 -3.97936,2.5276 -7.567,2.40319 -3.58763,-0.12589 -34.50209,-13.3463 -40.76833,-18.0792 -6.26624,-4.73292 -24.51408,-22.11134 -28.00054,-26.99606 -3.486468,-4.88471 -16.210538,-46.79317 -15.855875,-53.27662 0.356167,-6.48269 5.742995,-21.76947 5.742995,-21.76947 0,0 -9.754265,-3.89611 -18.175274,-17.176851 -8.420253,-13.280746 -10.089981,-20.880872 -5.48802,-29.902113 4.602717,-9.021985 45.786985,0.04101 45.786985,0.04101 0,0 35.144549,-19.209908 64.324289,-19.321129 z M 63.547077,62.724185 c -3.329092,-0.02761 -6.556019,0.232474 -9.247488,0.973528 -10.762895,2.96423 19.363001,31.094569 19.363001,31.094569 L 84.431481,65.47135 c 0,0 -10.895622,-2.665009 -20.884404,-2.747165 z m 43.601163,7.325659 -1.6746,18.068135 15.48003,8.486278 16.73691,-15.635708 z"
style="fill:#572c84;stroke:#f6c318;stroke-width:3.74149px;stroke-linejoin:round"
id="path1" /><path
style="fill:#572c84;fill-opacity:1;stroke:none;stroke-width:5;stroke-opacity:1"
d="M 0,630 447.72948,0 H 1200 v 630 z"
id="path3" /><path
style="fill:#f6c318;fill-opacity:1;stroke-width:5"
d="M 0,630 118.01632,463.93927 223.86475,630 Z"
id="path8" /></g></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1,10 +0,0 @@
faces = ["/usr/share/fonts/norwester.ttf"]
[[text]]
x = 430.0
y = 8.0
width = 736.84885
height = 594.60768
value = "{{title}}"
font = "Norwester"
stretch = "Condensed"