text:
Antenna Television/OTA DVR

The following are options available for recording OTA content.

Wired Solutions
These solutions typically connect to your antenna and a power source before connecting directly to your TV. They allow you to record your shows either onto an internal hard drive or by attaching external storage via USB.

Mediasonic
One popular budget DVR solution is the Mediasonic HW-150PVR HomeWorx. It is known for its reliability and is even recognized as an Amazon's Choice product. This device offers basic functionality and is a straightforward option for recording TV shows.

The Mediasonic HW-150PVR connects to your antenna using a coaxial cable and provides output to your TV through HDMI, component, or coaxial connections, supporting both standard definition (SD) and high definition (HD) formats. It supports real-time recording as well as programmed time recording. The electronic program guide (EPG) data is limited and is typically provided by the broadcasters on a channel-by-channel basis. You can generally access the program guide only for the channel you are currently watching.

It's important to note that the Mediasonic HW-150PVR does not have built-in storage. To utilize its DVR functionality, you will need to purchase an external hard drive (up to 2TB supported) or a USB flash drive (up to 64GB supported) and connect it to the device. Additionally, this DVR has a single tuner, which means you can only watch or record a single channel at a time.

While these budget DVR units offer basic functionality, they can also be used as tuners for older analog TVs or to add an affordable tuner to TVs without built-in tuners. They can be particularly useful for TVs with no tuner (such as Vizio's new Google Cast models), projection screen setups, or TVs with broken coaxial cable connections.

iView Digital Converter Box
Another budget DVR option is the iView 3500STII, which operates similarly to the Mediasonic HW-150PVR. It is compatible with both older analog TVs and newer models supporting standard definition (SD) and high definition (HD). The iView 3500STII offers real-time and programmed recording capabilities, as well as the ability to display electronic program guide (EPG) data to help schedule recordings.

Once connected to an external hard drive or USB flash drive, the iView 3500STII can function as a DVR, allowing you to record and store TV shows. Additionally, it serves as a media player, enabling you to access and play video or music files from the external storage drive, even if they were not recorded through the iView. However, it's important to note that the iView 3500STII may not support the newest file types for video or audio, so it's advisable to review the list of supported file types on the manufacturer's website to ensure compatibility with your media library.

Alternatively, the iView 3200STB is a newer model and offers similar features to the iView 3500STII. However, there are a couple of notable differences. The iView 3200STB does not include a component output, whereas the iView 3500STII does. Additionally, the iView 3200STB comes with an antenna included in the box (though it can also work with other antennas), while the iView 3500STII requires a separate antenna to be purchased.

Ematic Digital Converter Box
The Ematic AT103B and Ematic AT102 are two additional low-cost DVR options that share similarities with the iView and Mediasonic models mentioned earlier. These DVRs offer a straightforward and budget-friendly solution with a range of features.

Like the previously mentioned DVRs, the Ematic AT103B and AT102 support real-time and programmed recording, provide the ability to display an electronic program guide (EPG), and are compatible with both standard definition (SD) and high definition (HD) formats. They also allow you to play old media files directly from a USB drive and offer the capability to record TV shows onto a USB drive.

These Ematic models are designed to be simple and functional DVR solutions without unnecessary complexity. While they may not have the most advanced features available in the market, they provide the basic functionality needed for recording and watching TV shows.

TiVo Edge for Antenna
TiVo is a well-known brand that offers quality DVR solutions, though their OTA-compatible lineup of devices has undergone several changes. The TiVo Bolt, for instance, has evolved into the TiVo Bolt OTA and TiVo Bolt VOX. The TiVo Roamio, which was previously recommended, has been discontinued. Older models may still be available through TiVo's Renewal program or third-party sellers. When purchasing a used system, it's important to inquire about any subscription-based costs and whether the device includes a lifetime subscription.

The TiVo Edge for Antenna is a robust whole-home connected DVR system. After connecting it to your antenna, home internet, and optionally your TV, your DVR system will be ready to use. However, most TiVo options still require a subscription, either on a monthly or annual basis, or a more expensive lifetime purchase. As many cord-cutters are looking to reduce or eliminate monthly costs, I will not delve as deeply into the Edge as I will with other offerings. However, I will provide an overview for those willing to pay a higher recurring cost for a more feature-rich system.

The TiVo Edge offers a whole-home wireless experience once connected to the internet. It connects to your antenna, ideally to your first TV, and then to your home internet via either Wi-Fi or Ethernet. You can browse the programming catalog, schedule recordings, and watch TV using the remote control, iOS and Android apps, or your computer. This allows you to position the Edge near your antenna while still accessing your programming throughout your home via apps and internet browsers. The Edge also supports out-of-home streaming and allows for downloads to stream on your phone or tablet.

Key features of the TiVo Edge for Antenna include:

 * Built-in 500 GB storage, which provides approximately 75 hours of recording capacity.
 * Video output supports up to 4K UHD resolution.
 * Two tuners, allowing you to watch and record multiple channels simultaneously.
 * Out-of-home streaming capability, enabling you to access your DVR content when away from home.
 * Downloads that allow you to stream recorded content on your mobile devices.

Tablo
Tablo is a network OTA tuner/DVR device that offers a unique approach to DVR functionality. Instead of connecting directly to a TV, Tablo connects to your home network via Wi-Fi or Ethernet and streams content to any connected device within your home or anywhere with internet access. Tablo connects to your antenna using a coaxial cable and then to your router via Ethernet or Wi-Fi. The Wi-Fi connection provides flexibility in case your antenna and router are located in different areas of your home.Tablo uses its connection to your router to stream recordings and live TV over your local network and the internet, which makes it a "whole home DVR" solution. However, since Tablo doesn't have a direct output option, you need to access the Tablo TV app on your TV. This can be done through streaming devices (such as Fire TV, Android TV, Apple TV, Nvidia SHIELD), smart TVs, TV sticks (like Fire Stick, Roku, Chromecast), or gaming systems (like Xbox One). Check the Tablo website for an updated list of supported devices. You can also access Tablo TV via iOS or Android smartphones, tablets, or a computer using their web app, both at home and remotely. In the past, Tablo transcoded all audio to 2.0 stereo. However, new software updates now allow for 5.1 Dolby Surround Sound passthrough on supported devices, enhancing the audio experience. Video output can reach up to 1080p resolution.

Tablo offers several hardware DVR models to suit different needs:

 * Tablo DUAL HDMI: This model plugs directly into your TV and provides up to two weeks of offline access to recorded and live shows. Note that internet access is required for initial setup and periodic updates.
 * Tablo Quad HDMI: Similar to the DUAL HDMI but with four tuners for simultaneous recording and streaming.
 * Tablo DUAL LITE: A "bring your own storage" 2-tuner DVR that allows you to connect your own external hard drive for storage.
 * Tablo DUAL 128GB: A 2-tuner DVR with 80 hours of built-in HDTV storage.
 * Tablo Quad OTA DVR: Another "bring your own storage" option, this time with four tuners.
 * Tablo Quad 1TB DVR: A 4-tuner DVR that includes 1TB of built-in storage, providing approximately 700 hours of HDTV storage.

All Tablo models can also support up to 8TB of external storage, allowing you to expand the storage capacity with a separate external drive.

Optional Subscription: Tablo offers a guide data subscription that provides enhanced features, such as a 14-day program guide, series recording, and more. The subscription is tied to your account, not the device itself. If you upgrade or add another Tablo device, you can use the subscription across all of them under the same account.

ClearStream Wireless
The ClearStream Wireless TV Antenna Adapter Tuner is a device that allows you to turn any antenna into a wireless tuner and DVR. The ClearStream offers a 24-hour program guide, which provides you with information about upcoming shows and allows you to schedule recordings. It has one tuner, which means it can only stream to one device at a time. This limitation should be considered if you plan on streaming to multiple devices simultaneously.The ClearStream allows you to pause, rewind, and fast forward live TV for up to one hour. This feature gives you flexibility in controlling your viewing experience. When using the ClearStream app on your smartphone, tablet, or Smart TV, the TV content is recorded directly to the device running the app. The amount of DVR space available will depend on the storage capacity of the device itself.To set up the ClearStream, you attach it to your antenna and plug it into a power outlet. Then, you use the ClearStream app on your iOS, Android, or streaming device to connect your antenna to your home Wi-Fi network. The initial setup cannot be completed through a Roku device; you will need to use an Android or iOS app for that purpose. Once set up, you can stream or record OTA channels through the ClearStream app on your preferred device. ClearStream supports streaming via Roku devices. However, the initial setup of the ClearStream requires the use of an Android or iOS app. Once set up, you can stream content from the ClearStream to your Roku device.

AirTV
The AirTV brand offers several models for TV and DVR access to your antenna, including the AirTV, AirTV Player, and AirTV Anywhere.

 * AirTV2: The AirTV2 is designed for whole-home TV and DVR access to your antenna. It allows you to connect your antenna directly to the AirTV device using a coaxial cable. The AirTV then connects to your home internet via Wi-Fi or Ethernet. After setting it up using the AirTV app or SlingTV app (no subscription required), you can access all your antenna channels through apps on various devices such as iOS, Android, Roku, FireTV, and more. The AirTV2 has two tuners, enabling you to watch on up to two devices simultaneously or record and watch at the same time.

 * AirTV Player: The AirTV Player, along with the AirTV Tuner, is designed to be connected to your TV and antenna. It serves as a replacement for a Roku stick or other streaming devices, providing direct access to AirTV channels from your antenna. It also offers access to popular streaming apps like Netflix and SlingTV. The AirTV Player connects to your home Wi-Fi via Ethernet or internal Wi-Fi, and it is suitable for those who have at least one TV located near their antenna and want to avoid purchasing an additional smart TV or streaming device.

 * AirTV Mini: The AirTV Mini is a compact device that connects directly to your TV via HDMI. It allows you to access programming from your AirTV, AirTV2, or AirTV Anywhere device. The AirTV Mini has built-in access to SlingTV and Chromecast, making it a convenient option for accessing your channels and streaming content from the connected device.

 * AirTV Anywhere: The AirTV Anywhere offers a whole-home wireless DVR solution when combined with an antenna (up to four tuners) and SlingTV. It provides up to 1TB of DVR recording space, which is approximately 150 hours of recording. You can access the recorded content outside your home using a mobile app or stream it to other TVs within your home using the SlingTV app, AirTV Mini, AirTV Player, Apple TV, Amazon Fire TV, or Roku.

HDHomerun Scribe Duo/Quatro
The HDHomerun Scribe Duo and HDHomerun Scribe Quatro are whole-home DVR solutions that are similar to the Tablo device mentioned earlier. The Scribe Duo has two tuners, while the Scribe Quatro has four tuners. The Scribe Duo or Scribe Quatro is connected to your antenna, and then it is connected to your home's Wi-Fi router using an Ethernet cable. This setup allows you to access and record OTA (over-the-air) TV channels. You can use the free HDHomerun app to record and access your shows. The app is available on various smart devices. You will need to use a compatible smart device to watch your OTA TV channels. HDHomerun provides an up-to-date list of compatible devices on their website. You can check the website to ensure that your preferred smart device is supported. It's important to note that access to the DVR functionality via the HDHomerun app requires a subscription after the first year. The subscription cost may vary, so it's recommended to visit the HDHomerun website for the most up-to-date information regarding the subscription cost and requirements for ongoing DVR app service.

The HDHomerun Scribe devices, such as the HDVR-4US-1TB, are designed for use in the United States and Canada. They are compatible with the ATSC broadcast standard used in these regions.

Fire TV Recast
The Fire TV Recast is indeed an over-the-air DVR solution offered by Amazon. Here are some key features and requirements of the Fire TV Recast:

Recording Capacity: The Fire TV Recast is available in two versions. The first version has 2 tuners and a storage capacity of 500 GB, allowing for approximately 75 hours of recorded content. The second version has 4 tuners and a storage capacity of 1 TB, allowing for approximately 150 hours of recorded content.

Antenna and Streaming Device Requirement: To use the Fire TV Recast, you will need an antenna to receive over-the-air TV signals. Additionally, you will need a compatible Fire TV streaming media player (such as Fire TV Stick or Fire TV Cube) or an Echo Show device to access and watch the recorded content. The Fire TV Recast communicates with the streaming device or Echo Show over your home Wi-Fi network. The recorded content from the Fire TV Recast can be streamed to various devices. This includes the Fire TV app on Fire tablets (5th generation or above), iOS devices running iOS 10 or above, and Android devices running Android 4.4 or above. With the Fire TV Recast, you can schedule and record over-the-air TV shows and movies. It provides the ability to pause, rewind, and fast forward through the recorded content. You can also set up series recordings for your favorite shows. The Fire TV Recast includes a program guide that allows you to browse and schedule recordings. Additionally, it integrates with streaming services like Prime Video, Hulu, and more, allowing you to access streaming content alongside your over-the-air recordings.

title: Antenna Television/OTA DVR


text:
Engineering Education in 2050/Post-Classroom CS

= Introduction = Computer science education has vastly changed over the past decades. With a number of advancements made to the computer over the years, universities have adapted their curricula and programs to keep up with the changes. Dating back to the 1960s, computer programs were transcribed onto punch cards and loaded onto large computers. Classes explored numerical analysis, introductory programming, logic design, and switching circuits. Progressing into the 1990’s, the development of desktop computers encouraged universities to install computer labs. During this era, computer science education focused on software engineering, operating systems, computer organization, and computing principles. Today, all university students carry their own personal laptops. This change has improved the potential for computer science education by increasing the efficiency of development. Students can accessibly develop programs on integrated development environments (IDEs) with access to a plethora of learning resources over the Internet. With advancements in web development, artificial intelligence, machine learning, cybersecurity, and cloud computing, universities have additionally integrated electives to explore upcoming developments in computer science.

To articulate a vision for the computer science classroom in 2050, a focus was placed on the continuity of trends. Over the years, the driving change in computer science has largely been due to advancements in technology that have improved content delivery, access to learning resources, and applications of content. This trend will continue as current limitations of computer science students will be identified and addressed with newer technologies. Specific focus will be placed on the following areas: learning speed of students, learning resources retrieval time, and visualization of content.

= Structure of CS Education =

Fundamentals remain key
Certain portions of today’s CS curriculum have remained relevant for decades. Techniques like dynamic programming date back to the 1950s, and foundational computing concepts like Turing machines have even earlier origins. These concepts are part of broader topics like algorithms and the theory of computation, topics that are arguably computer science mainstays because they teach useful patterns and styles of approaching problems. Similar arguments can be applied to systems topics that inform students about time-tested computing abstractions.

Compared to natural sciences, computer science is a unique field that is primarily built on the work and abstractions of earlier computer scientists, software engineers, and other practitioners in the field. Thus, computer science fundamentals are especially important for newcomers to grasp, as they appear in one form or another throughout history. This importance extends to modern-day technology as many programming languages used today are built on previous abstractions; for example, one of this decade’s hottest systems programming languages, Rust, is built on concepts from type theory and program verification. Programmers using Rust also benefit from a strong practical understanding of computer memory models. Computer science abstractions are famously “leaky” to varying degrees; new abstractions and technologies will not make fundamental knowledge and understanding of lower-level abstractions obsolete.

This vision predicts the continued relevance of computer science fundamentals for decades to come. However, while these patterns and abstractions will remain important in the future, other facets of CS education are slated for change.

CS curriculum change
Viewing the developments of the computer science curriculum over the years, the constant trend that has persisted is the adaptation of current advancements in technology to tailor the content delivered to students. For example, with the rise of the Internet and the Web, web development began to rise in popularity in the early 2000s as opportunities emerged for developing user interfaces for applications. With that, universities adopted courses introducing students to languages and technologies related to web development. One example is the University of Virginia's course, CS 3240: Advanced Software Development Essentials, which encourages students to develop a functional web application over a semester. Looking towards the future, major changes to computer science curricula will be due to the emerging developments in computer science.

Artificial intelligence and machine learning are already revolutionizing fields of finance, healthcare, security, and many more. These technologies will only improve by 2050 to automate many of the current human tasks to allow more efficient decision making and response time. This significant change will greatly impact today's professions and generate a call for better skilled individuals that are able to understand and operate with these processes, systems, and tools. Thus, universities will be required to generate this new workforce by training students in understanding artificial intelligence and machine learning. With this new need, the computer science curriculum will require students to take courses in artificial intelligence and machine learning to analyze how these tools work and different applications of them.

Emerging developments in computer science additionally include cloud computing, quantum computing, Internet of Things, robotics and virtual reality. These topics are relatively early in their development, hindering universities from keeping up with the constant developments in their curriculum. However, by 2050, these technologies will be advanced and integrated within society, providing universities with enough content to improve the engagement of these topics for their students. Since these technologies will be influential developments in the industry, providing quality education in these topics will support the growth of skilled engineers to contribute to these developments in the industry.

Another significant issue in computer science curriculum is its obsolescence. Programming languages and frameworks are constantly advancing. Universities face the struggle of keeping their curriculums updated with the advancements in the industry. Daniel Gelernter, CEO of the tech startup Dittach, says in his Wall Street Journal titled Why I'm Not Looking to Hire Computer Science Majors that most university computer science departments are 10 years behind in a field that changes every 10 minutes. Consequences include the formation of computer science graduates that lack the latest skills required in the industry. However, changing an entire curriculum requires significant planning. The UVA Computer Science Department took around 8 years (2014-2022) to plan and execute a new computer science curriculum since 1989. This process included eliciting requirements, designing the new curriculum, piloting courses, gaining approvals, and executing the final program. The significant time required to administer curriculum changes is not feasible while trying to ensure the content is updated with the industry. As artificial intelligence advances, however, the design process would be expedited. AI would be used to efficiently pick and design content based on the current trends in the industry. As previously mentioned, the core content of the curriculum will stay constant. However, the technology and software used to supplement this content in class will be updated with the help of AI. This progress will also aid instructors in quickly adapting to the new content so the access to qualified instructors to teach rapidly changing courses will not be an issue. This advancement will ensure that students are equipped with relevant skills and better prepared for demanding roles in the industry.

= Technological Advancements =

Technology's role in education
In 1995, students encountered the early phases of the internet, a groundbreaking tool at the time for accessing information. Previously reliant on books, teachers, and peers, the internet brought instant access to a vast array of knowledge, expediting the learning process. Desktop computers, once the primary means of interaction, have given way to laptops and smartphones, shaping the landscape of information retrieval. Platforms such as YouTube, Geeks for Geeks, and Stack Overflow have become integral to the CS learning experience, highlighting a trend: students have and will continue to prioritize information delivery systems that are efficient, rapid, and user-friendly.

The education sector has witnessed the integration of Virtual Reality (VR) as a tool. Recently, The University of Central Florida is attempting to imbed virtual reality in their quantum computing program. The Institute of Electrical and Electronics Engineers (IEEE) conducted a pilot program adopting VR in introductory programming with positive results. K-12 education has adopted 3D models, and YouTube now hosts 360-degree interactive videos for enhanced visualization. Unlike the full immersion VR offers, augmented reality is a more advanced technology similar to VR in which users are able to interact with the real world. Although most augmented reality software are most commonly used in conjunction with smartphones, more development is pushed to incorporate AR with holographic glasses. With investments from tech giants like Google and Apple, and advancements in AI models from ChatGPT, Google, and Microsoft, our anticipation for 2050 is that Virtual Reality (VR) and Augmented Reality (AR) combined with AI processing will emerge as the predominant tool for students.

Augmented reality, virtual Reality, and personalized AI learning
AR/AI integration holds the promise of addressing three crucial aspects of learning: learning speed, content delivery speed, and content visualization. Despite the vast resources available on the internet, the limitations of a 2D screen limits learning efficiency. Speech and image based delivery during lectures can lead to misinterpretations, prompting students to seek clarification online. AR, coupled with personalized AI models tailored to individual learning patterns. We vision a future where students can utilize AR glasses to dive deeper into lecture content, promptly resolving ambiguities or presenting information in a 3D space for improved visualization. Utilizing video, photo, and speech, AR/AI can provide a comprehensive understanding. Here’s a scenario. Picture a student seated in a classroom, faced with the challenge of understanding the professor's lecture. Here, AR/AI emerges as an ally. The student, equipped with AR glasses, can seamlessly invoke AI-driven assistance to elaborate intricate concepts in real-time. Whether struggling with the abstraction of theoretical principles or visualizing complex structures, AR/AI steps in. It transforms the classroom into a space where three-dimensional representations materialize, offering an immersive and personalized learning experience.

The development of VR not only opens doors for asynchronous learning but also reinforcing virtual synchronous learning, bridging the gap between physical classrooms and online education. The shift to asynchronous learning during the COVID-19 pandemic highlighted the importance of flexibility in education, enabling students to access course materials and lectures at their convenience. This trend remains post-pandemic, offering students the freedom to engage with computer science content in a way that suits their schedules. As VR technology becomes more mainstream and is integrated with live translation capabilities, we predict that asynchronous and online synchronous learning as well as thr global accessibility of computer science education are expected to increase. While traditional online schooling, often conducted through online platorms such as zoom have been successful, the integration of VR in computer science education to another level. VR classrooms immerse students in interactive and dynamic virtual environments, providing a more engaging and realistic simulation of physical classrooms. This can enhance collaboration, hands on experiences, and make computer science topics more tangible and memorable. Virtual classrooms equipped with real-time translation features break down language barriers, fostering a collaborative and diverse community of learners from around the world. This increased accessibility not only expands the reach of educational resources but also promotes cross-cultural exchanges and a richer learning experience.

= Impact of AI Developments on CS Education = As of 2023, ChatGPT is the “fastest-growing consumer application in history,” having reached 100 million monthly active users shortly after launch. What some deem the artificial intelligence revolution is fueled in part by the exploding interest in generative pre-trained transformer tools like ChatGPT. Tools in this technology class have demonstrated significant competency on certain tasks; for example, OpenAI’s GPT-4 was released for use alongside claims of a 163 LSAT score and a 1410 SAT score. Generative artificial intelligence also demonstrates potential in areas like information retrieval and coding assistance. This vision of the future would be remiss to not discuss the possible implications of AI’s development over the next 27 years.

Changes to coding
Today, coding is a core competency of computer science majors; it is taught, practiced, and assessed through the majority of a CS student’s education. This fundamental activity is also a particularly likely candidate for an AI-powered transformation.

Consider some properties of writing that humans often care about: content correctness, grammatical structure, eloquence, sentiment, spelling, concision, etc. Different contexts require different properties of writing; fiction doesn’t need to adhere to facts, for example, and poetry may be subject to rhythmic constraints that prose isn’t restricted by. There are numerous selectively desirable properties of writing, and most of them aren’t easily verifiable or even identifiable. Assessing such properties of writing is a non-trivial task for humans, depending on the property, and is similarly non-trivial for automated tools.

Contrast this with code, which is generally written for the singular purpose of execution on a computer and has a smaller set of possible desirable structures than writing. Desirable properties of code snippets also exist, such as type correctness, syntactic correctness, readability, and semantic correctness. Unlike writing, however, many of these properties can be automatically identified via compilation and static analysis. There’s no silver bullet for code; after all, Rice’s theorem shows that non-trivial semantic properties of programs are undecidable. Yet, the property verification task has greater coverage for code than writing.

Generative artificial intelligence has been shown to produce near-human output for both writing and coding tasks. However, seemingly at random, it produces subtly incorrect or undesirable output. These tools can hallucinate facts, people, citations, and more in produced writing. The same is true for generated code, which may include non-existent syntax or functions. Since both types of output are susceptible to these problems, there is a stronger case for generative artificial intelligence’s use in code generation, where many properties of non-deterministically produced code can be deterministically identified.

Because of generative artificial intelligence’s greater potential for safe use in code generation than in other spaces, this vision predicts widespread adoption for this task by 2050. Specifically, its quality will likely be sufficient for full automation of basic software implementation. This level of implementation will likely not include making higher-level architectural decisions; consequently, an engineer’s soft-skills and general problem solving ability will become more important as the value of basic coding ability diminishes.

Consequent changes to CS competency assessment
In 2023, generative artificial intelligence tools can generate code for introductory programming tasks; 2050’s offerings may trivialize significant portions of today’s introductory and intermediate programming problems. New methods of assessing CS competency should be implemented to accommodate new capabilities. Fundamental computer science knowledge that today’s problems test for will be just as important in 2050. If artificial intelligence tools make a competent student’s work indistinguishable from an incompetent one, restricted learning and testing environments become necessary. Similar to how students today learn arithmetic basics without calculator access, computer science students should be, at times, assessed without access to artificial intelligence tools.

The reduced importance of basic coding ability will elevate technical concept explanation as an avenue of assessing competency. Students could be asked to write down their approach to completing an implementation task, for example. The education system could also incorporate interviews, asking students to discuss key pieces and mechanisms of learned topics. Interviews may not scale, but the content is more important than the medium here; demonstrating deep and nuanced understanding will be key in a world where just producing working code is trivial. The aforementioned predicted importance of soft-skills will make this communication task doubly important; students will be able to demonstrate technical expertise and communication ability throughout their CS education.

This same diminishing importance of basic coding will also lead to increasingly complex projects for students to work on during their CS education. Open-resource environments will enable students to accomplish more than today’s students; projects used to assess these students and provide working experience will grow accordingly. This may take the form of more abstract problems or requirements for greater deviation from common patterns. In any case, this vision sees projects having a different role in CS education than today. Projects and assignments today are often an opportunity for students to demonstrate competency in CS fundamentals in a less restricted environment. This may mean implementing a slightly modified version of a classical algorithm or performing relatively basic coding. In 2050, these projects will have to be less coupled to fundamental CS content. Assessing competence in CS fundamentals will happen differently, while broader projects give students experience in modern AI-assisted programming.

From the current GenAI education environment to 2050
Of course, the path to this new style of CS competency assessment is a long one. The continued development of generative AI tools may provide new affordances to students, affordances that require innovative adjustments to assessment methods. After all, these tools do not exist in a vacuum. Individual models differ significantly, and their outputs are influenced by factors like size, training input, incentivized behavior, etc. The set of available models may be more diverse by 2050, inviting more specific course adjustments.

However, in 2024, two generative AI policies are prevalent in CS classes: either “no generative AI use allowed” or “if you use generative AI, state the prompts you used”. Clear policies are a necessity, but these all-or-nothing stances can be improved on. The novelty of these generative AI tools makes policy enforcement difficult; detecting and watermarking generative AI output is a developing field of study. Generative AI policy in education will have to grow in sophistication alongside the tools being developed.

For example, programming in 2050 may require programmers to be skilled in prompting generative AI tools. Schools could provide environments and exercises that help build this skill. On one hand, if cutting-edge models can complete these exercises with only trivial prompts, they will be unsuited for educational use. On the other hand, tasks that push cutting-edge models to the limit may be too difficult for students to prompt for. Schools could instead deploy models with known capability limits; ideally, these models would require non-trivial prompts to be helpful for the provided assignment. In this scenario, the generative AI policy is neither a strict ban on use nor an open invitation to trivialize assignments. Instead, students would be limited to particular models that develop their prompting abilities.

Involving educators early in generative AI development and policy discussions should enable a smoother transition into a new programming and CS education environment. Aligning on plans and requirements would help tool developers understand their users’ needs, while also helping educators plan and experiment with generative AI in the classroom.

From the current GenAI education environment to 2050
Of course, the path to this new style of CS competency assessment is a long one. The continued development of generative AI tools may provide new affordances to students, affordances that require innovative adjustments to assessment methods. After all, these tools do not exist in a vacuum. Individual models differ significantly, and their outputs are influenced by factors like size, training input, incentivized behavior, etc. The set of available models may be more diverse by 2050, inviting more specific course adjustments.

However, in 2024, two generative AI policies are prevalent in CS classes: either “no generative AI use allowed” or “if you use generative AI, state the prompts you used”. Clear policies are a necessity, but these all-or-nothing stances can be improved on. The novelty of these generative AI tools makes policy enforcement difficult; detecting and watermarking generative AI output is a developing field of study. Generative AI policy in education will have to grow in sophistication alongside the tools being developed.

For example, programming in 2050 may require programmers to be skilled in prompting generative AI tools. Schools could provide environments and exercises that help build this skill. On one hand, if cutting-edge models can complete these exercises with only trivial prompts, they will be unsuited for educational use. On the other hand, tasks that push cutting-edge models to the limit may be too difficult for students to prompt for. Schools could instead deploy models with known capability limits; ideally, these models would require non-trivial prompts to be helpful for the provided assignment. In this scenario, the generative AI policy is neither a strict ban on use nor an open invitation to trivialize assignments. Instead, students would be limited to particular models that develop their prompting abilities.

Involving educators early in generative AI development and policy discussions should enable a smoother transition into a new programming and CS education environment. Aligning on plans and requirements would help tool developers understand their users’ needs, while also helping educators plan and experiment with generative AI in the classroom.

= References =

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
Wikijunior:Africa/Zambia

Zambia, officially the Republic of Zambia, is a country located in the South-Central and Southern East Africa. Zambia's capital city is Lusaka. Zambia's main currency is the Zambian Kwacha.

Geography
Zambia borders Zimbabwe, Democratic Republic of the Congo, Namibia, Angola, Malawi, Mozambique, Tanzania, and Botswana. Zambia is the 39th largest country in the world at 290,586 square miles. The Zambezi River, the fourth-longest river in Africa, starts in Zambia, flows through eastern Angola, along the North-eastern border of Namibia and the northern border of Botswana, then along the border between Zambia and Zimbabwe to Mozambique, where it empties into the ocean.

History
About 100 years after the first Europeans came to Zambia, Zambia gained independence from British rule.

People
The official language of Zambia is English. The official religion is Christianity.

Sports
Zambian sports include but are not limited to football (soccer), athletics, netball, volleyball, and other indigenous games.

Sights
A popular tourist attraction in Zambia and along the Zambezi is Victoria Falls.

title: Wikijunior:Africa/Zambia


text:
User:Blink456

I like to edit and add web pages to improve content for everyone.

title: User:Blink456


text:
Talk:General Topology/Bases

Proposition (basis of the initial topology):
In the formula, it is written $$U_1,\ldots U_n\in \tau_{\alpha}$$. I think that it should be $$U_k\in \tau_{\alpha_k}$$.

Laurent.Claessens (discuss • contribs) 05:27, 6 December 2023 (UTC)

title: Talk:General Topology/Bases


text:
User talk:Blink456

Use of Wikilinks in Wikijunior (and in general)
Hello, I have removed the wikilinks to Wikipedia from the page you wrote. We don't include links from Wikijunior to other content because it is intended as a "safe space" for young children. Providing clicakble links to unsafe content (i.e., the uncontrolled content of Wikipedia) defeats this purpose. Secondly, and more generally, links to Wikipedia are discouraged as the intent is for books to be self-contained and complete. You might find this page Wikibooks for Wikimedians useful to understand how we differ to other projects. Finally, you can't use Wikipedia as a reference source for anything as it is not considered a reliable source. Thanks. MarcGarver (discuss • contribs) 11:20, 6 December 2023 (UTC)
 * You appear to have completely ignored the comments above. If you wilfully ignore practices and policies, you may find your editing rights restricted. Please stop adding external links to Wikijunior pages. MarcGarver (discuss • contribs) 12:16, 12 February 2024 (UTC)

title: User talk:Blink456


text:
Chess Opening Theory/1. e4/1...e6/2. c4

French Defense: Steiner Variation
The Steiner Variation is a counterattacking option against the French. It most often results in a trade of two pawns after 2... d5 3. exd5 exd5 4. cxd5 Qxd5 5. Nc3, where black is behind in development but has a stronger pawn structure. Another more infamous line is the Orthoschnapp Gambit after 2... d5 3. cxd5 exd5 4. Qb3!?, with the idea of Bc4, Nc3, and possibly sacrificing a pawn on d3.

title: Chess Opening Theory/1. e4/1...e6/2. c4


text: Category:Annatto recipes

title: Category:Annatto recipes


text:
User:69.54.49.195

Hello to anyone that sees this- Thatman1234

title: User:69.54.49.195


text:
Fractals/color julia

Visualising complex functions

Suppose we want to visualise a complex valued function like
 * $$\begin{align}

f : \mathbb{C}&\;\to \mathbb{C}\\ z&\;\mapsto w = f(z) \\ \end{align}$$

In order to color $$w$$ we decompose it into its absolute value $$|w|$$ and its argument $$\arg(w)$$.

Then, we assign the color

\mathrm{HSV}\left(\tfrac{1}{2\pi} \arg(w),\; 1-g_{a_s,b_s}(|w|),\; g_{a_v,b_v}(|w|) \right) $$ to the point representing $$z$$. In this HSV color space, all values are in the range from 0 to 1. The first component (hue) of the HSV color depends only on the argument of $$w$$ and the second and third component (saturation and value) depend only on the absolute value of $$w$$. We use a transformation $$g_{a,b}$$ on $$w$$ to map it into the interval $$[0,1]$$. For $$g$$ see section helper functions.

Examples
The values indexed s (saturation) control the transition saturated colors→white (resp. gray scale), i.e. intermediate values → infinity. The values indexed h (value/valenz) control the transition black→bright, i.e. zero→nonzero. Parameter a controls where the transition takes place: a is just the radius of the circle dividing the two regions (dark/bright, saturated/gray, etc.) Parameter b controls how sharp the transition is: b small = soft, b large = sharp.

The following images all show the range [-10,10]×[-10,10]$$i$$ and use $$a_s=5$$ (radius of rainbow) and $$a_v=1$$ (radius of black disc).

In the image with swapped meanings of S and V zero is printed in white and infinity in black.

Visualising Julia sets
Julia sets and Fatou sets can be nice. Their computergraphical generation can be hard.

In the remainder of this page, we work out a method which can be used to visualise the Julia set of a complex function ƒ. The advantage is that you don't need to know attractors of the iteration

z \mapsto f(z) $$ The generated images will be smooth in the Fatou part.

Overview: Imaging methods
Note that there exist other approaches to color complex dynamical systems like

Inverse Iteration Method (IIM)
Compute the preimages of ƒ, i.e. compute the reverse orbit. Because the stability of the fixed points turns from attractive to repelling and vice versa, one just choses a complex number and looks where it goes under the invers iteration. The trouble is that the results will not uniformly distributet in $$J$$ and that you have to compute the inverse of ƒ.

Coloring by speed of attraction (CSA)
Taking a value from the lattice of points to color, perform iterations until the iterative is close to an attractor. Color the point according to the number of iterations needed to bring it close enough to the attractor.

This method is commonly used to visualize Julia sets of polynomials and Julia sets that are attached to Newton's famous method for finding the zeros of a function. Polynomials or degree > 1 always have infinity as a super-attractive fixed point. The rational function that occurs in Newton's method has always the function's roots as attractive fixed points. However, in both cases there may be other attractors, which – moreover – need not to consist of just one point.

Escape Time Algorithm (ETA)
If ∞ is an attractor, i.e. a fixed point of the process, then color the point according to the number of iterations – the time – it takes until one sees the point escapes towards ∞. If the point does not escape during the maximum number of iterations, the point is colored as belonging to the Julia set or to the basin of some other attractor. This method works for polynomials. The most prominent Julia sets are the ones for z→z2+c where c is an element of the Mandelbrot set or not far away from the mandelbrot set. If you see a picture of such a Julia set, it is likely that ETA had been used to get the picture.

Cauchy Convergence Algorithm (CCA)
In the remainder of this page, I will present a different approach whose idea as basically the same es that of Escape Time Algorithm. However, no basin of attraction must be known in advance and the different basins of attraction can be separated and be colored differently. The approch uses the notion of Cauchys convergence. Instead of observing the orbit of a point, this method observes how the distance of two nearby points z and z+ε evolves as these two values are iterated. If the difference tends to 0, then the point heads for an attractor. If the difference does not approach 0, then the point is close to (or a part of) the Julia set.

The Metric
Let $$\varrho$$ be a canonical projection of the compactified complex plane onto the Riemann sphere S2:

\varrho: \overline\mathbb{C} = \mathbb{C}\cup\{\infty\} \rightarrow S_2 $$ This gives us a metric d: As distance between two points in the complex plane we take their distance on the sphere, i.e. the length of the orthodrome. This means that the metric is bounded by π and even the distance to ∞ (which is now the north pole) is finite.

In order to compute the distance between two points z and w we rotate the sphere S2 in such a way that After these transformations the distance can be computed quite easily. The rotation can be accomplished by a squence of isometric Möbius transformations.
 * 1) w maps to 0
 * 2) z maps to the positive real axis

All an all, we get

t_w : z \mapsto \begin{cases} |z|\;, &\text{ if } w=0\\ {\textstyle\frac{1}{|z|}}\;, &\text{ if } w=\infty\\ {\textstyle\frac{1}{|w|}}\;, &\text{ if } z=\infty\\ &\\ {\textstyle\frac{1}{|w|}} \cdot \left| \frac{z\overline{w}-|w|^2}{z\overline{w}+1}\right|\;, &\text{ else} \end{cases} $$ which is left as an exercise to the reader. The bar denotes complex conjugation. The metric is then

d(z,w) =\,\! 2 \arctan (t_w(z)) $$

The nice feature that is introduced by d is that sequences that formerly diverged against infinity now converge towards infinity, i.e. towards the north pole of S2.

Stability of Orbits
Recall the definition of the Julia set for a contraction mapping ƒ. The definition implies some facts on the stability of the iteration

z \mapsto f(z) \mapsto f^2(z) \mapsto f^3(z) \mapsto \cdots $$ where ƒn denotes the n-th iterative of ƒ:

f^{\,n} = f \circ f \circ \cdots \circ f $$ The set

\{f^{\,n}(z)\}_{n\in\mathbb{N}_0} $$ is called Orbit of z (under ƒ).

The orbits of two points z and w behave similar − in some sense − if z and w lie close together and belong to the Fatou set Fƒ which is the complement of the Julia set Jƒ of ƒ. If z is an element of Jƒ then z and w will behave quite different, even if w itself is an element of Jƒ.

To get a notion of the stability of an orbit, we set

\Sigma_n(z) = \Sigma_n(z,\varepsilon) = \sum_{k \leqslant n} d\,(f^k(z),f^k(z+\varepsilon)) $$ for a small ε and with the metric d from above. This means that we take two points which are close together, and then we summarize their distances as ƒ makes them jump around on the Riemann sphere. Note that for any fixed ε the sum can diverge for large n even if z is a Fatou point.

However, we can use Σn to measure how close a point is to Jƒ: the larger the sum is, the more instable is the iteration and the closer is the point to the Julia set of ƒ.

To destinguish points of (or close to) the Julia set from points in the Fatou set, we need a creterion. To get it, we compute all the Σ-values for the points that we want to color, i.e. for all points in a lattice Γ. After computing these values, we do a little bit of statistics to get the expected value E and the standard deviation σ for the set of Σ-values: Let
 * $$\begin{align}

E_n &= E_n(\Gamma, \varepsilon) = E \left\{\log (\delta +\Sigma_n (z, \varepsilon) )\right\}_{\!z\,\in\,\Gamma}\\ \sigma_n &= \sqrt{D_n}\\ \end{align}$$ Remind that
 * $$\begin{align}

EX &= {\textstyle\frac{1}{|X|}} \sum\limits_{x\in X} x \\ D\!X &= EX^2 - (EX)^2\\ \end{align}$$ It turns out that the values Σ are widely spread over several scales. Therefore, we do not use Σ directly. Instead, we use the logarithm of Σ. The value δ is just a small constant to avoid the logarithm's input to be zero.

Coloring
Now, we have all we need to color a point:
 * 1) choose
 * 2) a lattice $$\Gamma$$ of points $$z$$ to color
 * 3) the number $$n$$ of iterations to perform
 * 4) a small $$\varepsilon$$
 * 5) for all points, compute $$\Sigma_n(z,\varepsilon)$$
 * 6) compute $$E_n$$ and $$\sigma_n$$
 * 7) compute
 * $$J(z)=\,\ln(\delta+\Sigma_n(z)) - K$$

for some constant $$K$$. Because $$K$$ will be used to separate points that belong to the Julia set ($$J(z) > 0$$) from points that to not ($$J < 0$$), reasonable values for $$K$$ are greater than $$E_n$$. Try settings like $$K=E_n+2\sigma_n$$ or $$E_n+\sigma_n$$ or the like. If $$J(z) > 0$$ then we color $$z$$ as belonging to the Julia set. If $$J(z) < 0$$ we can use that value to shade the Fatou set. If we know some attractor, we can check if ƒ$n$$$(z)$$ is close to it and use that information, too.

To map values to the valid ranges for saturation and brightness we use the function $$h$$ from section helper function h.

Modifications
The computation of $$E_n$$ takes a lot of time. The visualisation process needs two passes:
 * 1) compute $$E_n$$ from all $$\Sigma_n(z)$$
 * 2) color the points using $$E_n$$ and recomputed $$\Sigma_n(z)$$

Alternatively

 * 1) compute and store all $$\Sigma_n(z)$$
 * 2) compute $$E_n$$ and color the points

An other approach looks like that:
 * Find the smallest $$n$$ so that $$d_k(z,z+\varepsilon)$$ is below a given bound for all $$k \geq n$$. If no such $$n$$ can be found, then assume $$z$$ to be an element of the Julia set. Otherwise, use $$n$$ to color the Fatou set.

This algorithm is a variant of the escape time algorithm (ETA). Note that in ETA the point does not really escape (at least if we are on the sphere), it just converges to ∞. This approach is similar. However, we don't need to know an attractive fixed point of ƒ.

Up to now, I didn't try the modified version. One disadvantage may be that the Fatou set will no more appear smooth colored. Then I am not sure if this modification is really an advantage, because the iteration must be done until a given maximum number of iterations is reached. Note that even if $$d_n$$ is under the bound for some $$n$$ the distance $$d_k$$ can rise again. I cannot say if this effect is crucial or can be neglected...

Gallery
$$N$$ denotes the Newton operator
 * $$N:f \mapsto \mathit{id} - \frac{f}{f'}$$

Using Critical Points Absorption (CPA)
The previous method yeilds neat, smooth colorings and requires least knowledge about the dynamics of the process. However, it is quite time consuming. Teh following approach is an extension of escape time algorithm (ETA) for polynomials.

Let ƒ be a polynomial of degree d > 1 over C. Such a polynomial has at most d critical points: infinity and the at most d–1 zeroes of ƒ′. It is well known that each attractor of the process z→ƒ(z) absorbs at least one critical point. Suppose zK is a critical value, then ƒn(zK) comes arbitrarirly close to one of the attractive cycles of ƒ.

A process for a quadratic polynomial ƒ(z) = z2 + c is the simplest case: The critical values are 0 and ∞. As ∞ absorbs itself, only 0 is left, and we have the following cases. M denotes the Mandelbrot set.

 * $$c\notin M$$: Easy case. 0 is absorbed by ∞, and J(ƒ) consists just of Cantor dust. Escape time to ∞ can be used to color all points.

 * $$c\in M\setminus \partial M$$: If c is an element of the interior of M, then 0 will be absorbed by a (super) attractive cycle. Compute
 * $$ w = w (c,n) = f^n(0)$$
 * for a sufficiently large n. As w (basically) only depends on c, it can be precomputed before starting the visualization of J(ƒ).  Notice that w is the element of a cycle that might have more than one element, i.e. w is only unique modulo that cycle.

 * Coloring for a point z in C is then as easy as ETA:
 * If z is absorbed by ∞, use escape time to color z.
 * If ƒn(z) comes close to w, i.e if |ƒn(z) – w| < ε for the first time, use that n to color z.
 * If ƒn(z) neither comes close to ∞ nor comes close to w, then color z as part of J(ƒ). Only few z will fall into this category.

Helper function t

is a smooth, monotone sigmoidal transition from −1 to 1 that satisfies $$t'(0)=1$$ and $$t(x)=-t(-x)$$. There are many choices for it. Some of them are

 * $$\begin{align}

t:\mathbb{R} &\to (-1,1) \\ x&\mapsto \tanh\, x\\ &\mapsto \tfrac{2}{\pi} \arctan \left(\tfrac{\pi}{2} x\right)\\ &\mapsto \tfrac{2}{\pi} \operatorname{gd}\left(\tfrac{\pi}{2} x\right)\\ &\mapsto \frac{x}{\sqrt{1+x^2}}\\ &\mapsto \frac{x}{1+|x|}\\ \end{align}$$ with gd denoting the gudermannian function.

 * All functions in a Desmos plot.

Helper function h

Helper function $$h_a$$ is almost the same like $$t$$ but it maps to $$(0,1)$$ and we can adjust the speed of transition by parameter $$a$$.

 * $$\begin{align}

h_a : \mathbb{R} &\to (0,1) \\ x\; & \mapsto \tfrac{1}{2} + \tfrac{1}{2} t (2ax) \end{align}$$ with $$a > 0$$. Then $$h_a$$ is symmetric to the point (0, 1/2) and

 * $$\begin{alignat}{2}

h_a &(0) &&= \tfrac{1}{2} \\ h'_a &(0) &&= a \\ h_a &(-\infty) &&= 0^+\\ h_a &(\infty) &&= 1^-\\ \end{alignat}$$

Negative values are mapped to values between 0 and 1/2. Positive values are mapped to values between 1/2 and 1. The parameter $$a$$ controls how fast the transition will be.

If we want a falling function, we can use the symmetry

h_a(x) \,= 1-h_a(-x) = 1-h_{-a}(x) $$ i.e. we negate $$x$$ or $$a$$.

Helper function g

This function maps the positive numbers to the interval $$[0,1)$$.

 * $$\begin{align}

g_{a,b} : \mathbb{R}^{\geqslant\,0} &\to (0,1) \\ x\; & \mapsto \tfrac{1}{2} + \tfrac{1}{2}\,t(2b \cdot a \cdot u(x/a)) \end{align}$$

for some function $$u$$ that is defined below. If $$u$$ is appropriately chosen then for $$g$$ the following holds
 * $$\begin{array}{lll}

g_{a,b} (0) &=& 0 \\ g_{a,b} (\infty) &=& 1\\ g_{a,b} (a) &=& 1/2 \\ g'_{a,b} (a) &=& b \\ g'_{a,b} (x) &>& 0 \text { for } x > 0 \end{array}$$ This means that $$g_{a,b}$$
 * grows continuously from 0 to 1 as $$x$$ grows from $$0$$ to $$\infty$$
 * we can control where $$g$$ crosses the middle between 0 and 1 by specifying parameter $$a$$
 * we can control how fast $$g$$ passes the point $$(a,1/2)$$ by specifying parameter $$b$$

We are left with determining the finction $$u$$ on $$\mathbb{R}^{>0}$$ with

$$u$$ must satisty
 * $$\begin{array}{lll}

u(0^+) &=& -\infty \\ u(\infty) &=& \infty \\ u(1) &=& 0 \\ u'(1) &=& 1 \end{array}$$

For $$u$$ we set

u(x) = \tfrac{1}{2} \left( x-\tfrac{1}{x} \right) $$

Helper function w

This function maps the positive numbers to the interval $$[0,1)$$.

 * $$\begin{align}

w_{a} : \mathbb{R}^{\geqslant\,0} &\to [0,1) \\ x\; &\mapsto t(ax) \end{align}$$

By $$a$$ we can control its slope in the origin:

w'(0) =\,a $$

 * Interactive Desmos plot of $w$

Circular arc through (0,0) and (1,1)
A circular arc through (0,0) and (1,1) that has given slope of $$a$$ in (0,0) and $$-1/a$$ in (1,1):

\operatorname{arc}(x) = \begin {cases} x &;\text{ if } a = 1 \\ y_0 + \operatorname{sign}(\ln a)\sqrt{r^2-(x-x_0)^2} &;\text{ if } a \neq 1 \\ \end{cases} $$ where
 * $$\begin{align}

x_0 &= \frac{a}{a-1} \\ y_0 &= 1-x_0 \\ r &= \sqrt{x_0^2 + y_0^2} \\ \end{align}$$

The center of the circle is incident on the line $$y=1-x$$.

 * Desmos plot

title: Fractals/color julia


text:
Kitchen Remodel/The general idea

Obvious goals
The obvious goals for everybody who is planning a kitchen remodel are, among others:
 * Replacing run-down or outdated elements
 * Getting prettier cabinets, countertops, lighting and flooring
 * Making a kitchen more functional
 * Adjusting a kitchen to one's own way of using it

Functionality: In the case of my remodel, one of the major goals was to make the kitchen larger, first of all to create more cabinet space but also to improve the traffic situation and to create more space for people to work in the kitchen. By changing the layout, we went up from 248 sqft (28 m²) to 346 sqft (32 m²). We achieved this by sacrificing some closet space, but mostly by converting the previous hallway into a pantry.

Design and architectural considerations
A kitchen remodel is not just about replacing something old with something new. It is also more than taking ownership of a space or improving something in terms of functionality.

It is also about design and architecture.

Everybody can design. Everybody can understand design and architecture, those two fields are not necessarily secret sciences. Common sense plays a huge part in them. The most critical difference between an amateur and a professional is that the latter will be much faster coming up with really good design ideas, and they may also be more articulate about what they are doing and why they are doing it and how they are making choices.

Whoever lives in a space, will be affected by its design. The design of a space will influence their behavior and affect their mood. Some people may be more articulate about their experience of a space than others, probably because they are more trained; but everybody will feel it and respond to it.

What struck me in our recently bought new home, was the shape of the living space. This living space is a linear ensemble which comprises a sitting area, a dining area and a small courtyard. It is relatively narrow and very long (more than 50 ft/15 meters). This ensemble is nothing less than a elongated tedium: it is very interestingly structured indeed, with a vaulted ceiling and other elements which define a number of distinct subspaces.

But the linearity of the space was linked to me with the idea of a visual axis. From my sitting area I can gaze into the far away courtyard, and vice versa (see drawing, blue arrow). I loved that right from the beginning. I loved that so much that, at some point, I thought: how cool would it be to have more of this – another visual axis.

The natural answer was to remove the weirdly recessed wall that separated the living space from the kitchen (see drawing, purple arrow)… This modification would create an open floor plan: a concept that was very smoothly compatible both with the style of the house, a Contemporary, and our personal lifestyle, which is rather kitchen centered.

title: Kitchen Remodel/The general idea


text:
Cookbook:Grill

| Kitchen appliances

A grill is a cooking device used to cook food with heat applied from below. It's a favorite for outdoor cooking, offering a unique smoky flavor. The evolution of grills from open fires to today's diverse options, including gas, charcoal, and electric models, reflects their enduring popularity and versatility in culinary traditions.

Types of grills

 * 1) Charcoal Grills: Provide a smoky flavor, using charcoal briquettes.
 * 2) Gas Grills: Convenient, with easy heat control, using propane or natural gas.
 * 3) Electric Grills: Ideal for indoor use or areas prohibiting open flames.
 * 4) Portable Grills: Compact and great for outdoor adventures.

Care and maintenance

 * 1) Regular cleaning is essential.
 * 2) For charcoal grills, safely dispose of ashes and clean grates after use.
 * 3) For gas grills, routinely check gas connections and burners.

Usage tips

 * 1) Always preheat the grill.
 * 2) Use proper tools like tongs and grill brushes for easy usage.

title: Cookbook:Grill


text:
User:Austin.Woolfe/sandbox

this is some text

title: User:Austin.Woolfe/sandbox


text: Category:Book:Kitchen Remodel

title: Category:Book:Kitchen Remodel


text: Category:Apple cider recipes

title: Category:Apple cider recipes


text:
The University of 2050/Welcoming Curricular Innovation

In the University of 2050, curricula will need to take on a more adaptive outlook. Classes will look differently with the advent of new technologies and new societal priorities. As our society develops and changes over the next 25 years, the form of education will change with respect to three major participant groups: students, professors, and deans.

Students in 2050 will have much more influence and power over the curricula in front of them. Today, the hierarchy of curricula control stems from deans and flows to professors and then to students. In 2050, this hierarchy will be flipped where students will have more control and the ability to lead the way on course selections. Students tend to connect with modern trends, advancements, and technologies faster than many professors and deans. Whether by fellow peers, social media, or other future modes of communication, students are aptly prepared to distinguish which courses are suited to their education needs to prepare them for employment after college. This does not mean there will be no structure within the university setting, but this base structure will be freeing, not restrictive. This will increase the dialogue between students and deans in communicating class trend differences. In addition to reaching out to deans at any time, students will have one meeting a semester discussing with one another class preferences, needs, and alterations. A dean will be in the room with this cohort of students, and instead of a one sided teacher-to-students communication style, there will be an equitable open conversation, student-with-dean, without any one dominating voice. This will allow deans to have up to date information from students semester to semester. Curricula will still have a set of core course requirements that provide the necessary building blocks of a major providing students greater flexibility to choose core and elective classes, fitting their desires and preparations more effectively. Yet, majors can restrict course exploration early on and create a negative connotation amongst younger college students. With increased flexibility, students can discover more varied and specific topics amongst class choices earlier in college allowing for a greater appreciation for their major. This will also allow students to explore more varied class possibilities not before possible within the strict class selection process. Whether students come into college with many high school credits or none, students can develop these varied interests starting from their first year all the way through fourth year.

As class choice flexibility increases, so will the working environment and submission timing. Students at the University of Virginia, and many other universities throughout America, have put an immense amount of pressure upon the class selection process. Class selection depends heavily on enrollment time, impacting whether a student can enroll in a class or not. The COVID-19 pandemic provided insight on class selection alterations when universities demonstrated a quick adaptation to a virtual learning environment, and in many cases, asynchronous learning. In 2050, class selection will be stress-free, as along with asynchronous learning, class sizes will increase. Students that previously couldn’t enroll in a course due to smaller class sizes, will now enroll to take classes on a timeline that best accommodates their learning needs. Students can take classes where they want when they want according to their work schedule. This also accommodates the varied learning speeds and levels among students. Asynchronous learning allows students to slow down or speed up the class content to a pace where they can digest the information effectively. Having three or four tests in the same week will no longer occur since the student can adjust the test time for their classes to best accommodate their schedule with other classes. In order to form a link between student-to-student and student-to-teacher, students will attend in-person, project oriented classes a few times a semester. Students will still collaborate and navigate a team atmosphere in these classes without being completely isolated. This provides teachers a critical opportunity to check in and connect with their students. Asynchronous learning can be isolating and these in-person sessions will allow teachers to be a friendly presence and resource to their students amidst a primarily virtual learning environment. With the increase in class sizes, professors and teaching assistants (TAs) will have more work to complete, but artificial intelligence will provide modifications to classes to support them.

Professors in 2050 will take advantage of the enormous leaps in technology surrounding artificial intelligence. Over the course of the next 25 years, artificial intelligence will develop significantly, particularly in the realm of evaluative applications for use in educational purposes. Professors in the university of 2050 will have access to these applications as tools to reduce their load and open up their schedules. They will no longer need to spend hours tediously grading assignments submitted by their students and be able to explore teaching larger class sizes as well as opening up new course topics that align with their personal interests. The current state of technology has seen a slight peek into automatic grading with websites such as Gradescope using autograders to run test cases through coding assignments. This small instance of automated grading will be expanded greatly into other realms of education such as papers for arts and social sciences majors, hands-on projects for hard science and engineering majors, as well as musical evaluation for music majors. These models for evaluating students’ submissions will be formed on the curriculums and syllabi written by the professors responsible across all universities in 2050. This will ideally reduce the amount of bias from any single professor in the grading of assignments. A plausible concern in this potential future is the reduced need for teaching assistants and student labor in the classroom. Teaching assistants will still be necessary for the in-class aid they offer to students and their presence as a budding educator. Therefore, student jobs will still exist and will simply take on more personal instruction and less tedious grading work.

This freedom afforded by new technology will allow professors to spend more time on lesson plans and intentionally think about how best to reach their students with the content they need to teach. As a result of their lowered responsibilities in core courses, professors will have the opportunity and time to teach classes that fit with their personal interests. When the professors have the chance to teach classes they are interested in, they are often more engaging and effective in reaching their students. Some professors today receive the opportunity to teach classes they enjoy, but they are often bogged down in the work surrounding large required courses that absorb their attention and time, making it difficult to really pour into the subject matter they have greater interest in. Thus, having less stress on the large classes and more freedom to spend on their personal priorities, professors will be at their best in educating the student body. It should be noted that this technology will neither increase nor decrease their overall workload, so much as allow the professors greater autonomy over their teaching style and content. These new tools will be for use at the disposal of the professor, not a mandated class method imposed by deans and school boards. Thus, professors will retain their autonomy and control over their workload. Creating more autonomy for professors presents a better curriculum and university for both students and professors in 2050.

Professors enjoy increased flexibility and freedom in 2050, but structure is still necessary in order to produce valuable and skilled graduates. The department heads will provide the necessary balance by determining which classes should be required and which should be electives. However, there are often other considerations beyond just the coursework. For example, perhaps some deans will require extra-curriculars such as clubs and internships. The department heads will work to develop an overall vision for what graduates from their department will look like. This allows different universities, schools, and the departments within them to maintain their unique experiences and value propositions. These visions will be developed according to accreditation requirements (particularly in the United States ) and in close collaboration with relevant industry professionals. This collaboration will produce graduates who are well equipped to face the challenges identified within the chosen industry. This reflects the value that curricula should be relatively quick to adapt to modern technologies and challenges. Our assumption is that the wider context of accreditation boards and other relevant decisionmakers will have shifted to share our vision for flexible curricula.

To further increase the flexibility and value of curricula in 2050, the students’ vision for their degree is also considered. There will be a culture of communication where an incoming class can express their desires and ideas for their degree, to be taken into consideration by the deans and department heads. Faculty have more experience, but students have a unique perspective due to their age and the experiences of their generation. Allowing students to help shape the vision for their degree creates unique value and curricula that is quicker to adapt to the times. Naturally the deans have final say, as an overly reactive curriculum would quickly become irrelevant. In 2050 there will be a national, and perhaps international, structure to balance the students’ and deans’ competing visions. This will result in a balanced, well-formulated curriculum that is influenced by students, professors, and department heads.

In 2050, university curricula will be shaped by important values. Reduced stress and increased freedom for students and educators, timeless yet relevant skills and experiences, and greater collaboration between students and administrators will create more valuable curricula. This curricula will result in an unprecedented graduate pool that is uniquely equipped to solve the problems of 2050. Our vision is feasible, as it requires few technological advances. Our vision is credible, as it is founded on ideas that are present but not yet universal in our current day. Lastly, our vision is desirable because of the positive impact adaptable and flexible curricula will have on society.


text: Category:Applesauce recipes

title: Category:Applesauce recipes


text:
Cookbook:Homemade Aquafaba

This recipe can be used to make aquafaba from dried chickpeas.

Ingredients

 * Dried chickpeas

Procedure

 * 1) Fill a pot with water, and add the chickpeas.
 * 2) Bring the water to boil, then reduce the heat.
 * 3) Let it simmer for a couple of hours. Regularly check for enough water, adding a little if necessary.
 * 4) When the chickpeas are soft, let the mixture cool down.
 * 5) Separate the liquid from the chickpeas. The liquid is your aquafaba. You can use the chickpeas to make some other food.
 * 6) If your aquafaba is too thin, boil it to evaporate excess water.

title: Cookbook:Homemade Aquafaba


text: Category:Aquafaba recipes

title: Category:Aquafaba recipes


text:
Kitchen Remodel/Appliances

One of the most common mistakes in kitchen planning is not to pick the large appliances and large installations like the sink first. They need to be selected first – in particular before the cabinets – because it will be very easy to plan a kitchen around appliances. Doing it the other way around may force you to make compromises where you don't actually want to. Researching appliances is also serious business and may take you much more time than picking cabinets.

The choice of large appliances and of sinks is very much a question of individual needs, habits and preferences, as well as of budget. So the best preparation is to thoroughly know yourself and very carefully study the way you actually use those appliances. The way you do if will possibly be completely different from how my family does it. Here is what we were looking for:

Refrigerator
Our criteria were that the fridge… We ended up picking an Italian import which actually met all of our criteria. This device was probably a bit smaller than the more conventional one that we had before, but we figured that a somehow smaller fridge would help us tremendously to stay on top of our food storage organization. It was surprisingly delivered without handles. Obviously they are not really necessary, but who wants fingerprints all over a beautiful surface? So we decided to invest in those, too.
 * was a built-in model; no gaps needed at the sides and top for air exchange
 * had a depth of no more than 30" (76 cm); we wanted the appliance to be as flush as possible with the cabinet fronts
 * had the best ratio of interior space and exterior dimensions (some built-in devices are monstrous but offer astonishingly little interior space)
 * had a top fridge; we open the fridge much more often than the freezer and therefore want it at a convenient height
 * had a bottom freezer, with drawers only, and an ice maker inside; yes, many devices have an ice dispenser in the door front – but honestly: do you really want that colossus of a mechanism if the alternative is a skinnier and overall more elegant door? For the same reason, we decided against a water dispenser, too.
 * had doors that either open the direction we want it to, or doors that can be reversed
 * was energy wise and quiet
 * had a brushed stainless steel front to match all other appliances; this kind of surface probably gives you the most options if something needs to be replaced

Wine chiller
A wine chiller made sense for our household for two reasons: to disencumber the refrigerator and because we really value a properly tempered wine. Our criteria were that the device…
 * had two temperature zones that can be controlled individually
 * had a door that either opens the direction we want it to, or a door that can be reversed
 * offered a reasonable ratio of quality and cost (wine chillers can be crazy expensive)
 * had just the right size for our needs
 * was energy wise and quiet

Oven
We are no expert bakers; whoever is really into cake baking or oven roasted meats will probably investigate much deeper into ovens than we did. Our criteria were that the device…

 * was a built-in model
 * featured true convection (that is a built-in fan to circulate hot air, plus an additional heat source)
 * featured self-cleaning (a special cycle of very high heat which turns spills to a powdery ash that you can later vacuum or wipe away)
 * offered a reasonable ratio of quality and cost

We picked a device from Ikea, Adrätt, for the two reasons that it was – considering the quality – surprisingly cheap and that Ikea grant five years of warranty on appliances. They don't make their own kitchen appliances but rebrand products of other manufacturers. Adrätt was probably a rebranded Frigidaire Gallery. Was I say because it was discontinued after we pre-ordered it. We called Ikea multiple times for updates about the availability, and at some point they even encouraged us to consider purchasing a different product. Luckily we didn't, because six months after our first attempt we surprisingly could order it and got it delivered.

Microwave oven
My criteria for a microwave oven were that it…

 * could be used for built-in
 * had a good ratio of interior space to outer dimensions
 * had a large turntable
 * had a decent wattage
 * had a door swinging to the side rather than to the bottom, since we wanted to install the device above the oven, which is kind of high up; I am not too tall and need to easily reach the interior
 * matched the oven, visually

We decided to buy another product from Ikea, Huvudsaklig (obviously a Frigidaire Gallery, too). This one was rather expensive and we probably could have saved a lot of money choosing something different. The reasons why we bought it anyways were that we liked this product, that it came with a five year warranty, too, and above all that we were sure that the trim kit would fit. As you can see in the picture, this device is not as wide as the cabinet; Ikea (and other manufacturers) therefore offer a frame to cover the gaps around the device.

Cooktop
The old cooking range had been a conventional gas range that combined cooktop and oven in one appliance. As I will more explain in a later chapter, I wanted to divide those functions and assign them to two different locations within the kitchen. We also decided to switch from a gas range to electric and induction. One reason was that we recently installed PV on the roof and make our own electricity. Another was that a ceramic cooktop is so much easier to clean than a gas range. An induction cooktop gives you the best of both: low maintenance plus super-fast responding temperature control. The only downside that the change had for us was the necessity to acquire a whole new set of pots and pans, because induction only works with cookware with bottoms that are made out of magnetic metal. My criteria for the choice of appliance were that the cooktop…

 * featured induction
 * had a good ratio of quality and cost

Again, we picked an Ikea product, Särklassig (another Frigidaire). It features four cooking zones plus a resting zone which is more than sufficient for our needs. Only later I read that Ikea's alternative product, Särdrag, would possibly have been the better choice because the glass surface is supposed to be harder, but it is more expensive, and so far we didn't have any issues with scratches yet. The surface is also much easier to clean than the conventional ceramic hob that we had in our previous home.

The only other downside of this product (as probably of many other of that kind) that we discovered is that the touch controls are sensitive to water. So when there is a spill over the controls, which happens a lot, at least to me, the appliance has a tendency to switch off arbitrarily, and we have to rub them dry carefully before they become responsive again.

Range hood
Since I was planning to place the cooktop on a peninsula, we needed a ceiling mounted island range hood. Before installation, our contractor built, besides an electrical connection, an exhaust duct through the roof (which is almost directly above the kitchen, with no other story in between). My criteria for the choice of appliance were that the range hood…

 * had roughly the same dimensions as the cooktop below
 * could be adjusted in height in order to have the proper distance from the cooktop
 * had a high maximum suction power (CFM, cubic feet of air per minute); in an open kitchen this is particularly desirable
 * runs as quiet as possible
 * had filters that can be cleaned rather than exchanged
 * gave good working light; this had been a weak spot in our previous home; but above a cooktop you'll want all the light that you can get, and ceiling light alone is never sufficient
 * was nice to look at, because it would be installed on eye's height and therefore be one of the first things in the space everybody would look at
 * had a good ratio of quality and cost

Again, Ikea had something quite nice, Undantag. But this time I decided to go with a different brand, for the reason that the device of my choice featured a filter that can be washed in the dishwasher, whereas the Ikea product requires the purchase of replacement filters.

Dishwasher
I have a thing with Bosch dishwashers, we had those over decades, we trust them and they feature a third rack on top for utensils. The smaller the items are that you put in the dishwasher (in particular when you wash umpteen of them) the higher up you will want them to be placed in the dishwasher in order to avoid unnecessary bending down.

Our other criteria were that the dishwasher…

 * had a good ratio of quietness and cost; this is particularly important in an open kitchen
 * featured a delay function (to make it conveniently possible to run the washer after everybody went to bed)
 * supported an installation not in the immediate proximity of the water connections (= where the sink is) but a couple of feet away from those; many people are not aware of this, but is not chiseled in granite that a dishwasher must be placed beside the kitchen sink; since it will be installed with water hoses (for fresh water and waste water) anyways you are at liberty to pretty much place it where ever you want it to be as long as a certain maximum distance (10–12 ft/3–4 meters: I am talking hose length) is not exceeded.

Sink
In our previous home, we had an apron front farm sink which we liked very much. Compared to any other type of kitchen sink, an apron sink brings the basin a bit to the front. Differently from a regular farmhouse sink, the front is exposed, which visually connects the sink to other showy kitchen appliances such as the refrigerator. For actual dish washing, we always use an additional plastic bowl, but the large basin works great for us, it can be used for all sorts of purposes. Our product came with a (removable) grid that not only protects the bottom of the basin from scratches but also can be used to let things drip after washing or rinsing them. For this remodel, we decided to splurge a little and to pick a "work station sink", that is a product with an integrated ledge that can accommodate things such as a cutting board or an additional grid.

Apron sinks, like farmhouse sinks, can be mounted two different ways. In our previous home, we had a drop-in mount which brings the sink's upper edges to a level slightly above the counter top. The advantages of this mount are that you don't need to bend down so much to reach the basin's bottom and that the mount will show off all four top edges of the product in all their beauty; this is certainly the visually more appealing option. The most obvious disadvantage is that you cannot wipe off water from the countertop directly into the basin, because the rim will be in your way. It also removes integrated soap dispensers further way from the basin which can make it impossible to properly use them. In this remodel, we therefore decided for an undermount (see image). In this case, the sink is installed at a lower height, and parts of the upper rim will later be covered by the countertop.

Since we already had a trusted brand and knew that a 30 inch sink would meet our requirements best, the selection process was rather straightforward. Nonetheless, before finalizing the purchase, we still had to make sure that the kitchen cabinet system that we meanwhile had decided for would include a cabinet that we can use or make usable as a sink base.

title: Kitchen Remodel/Appliances


text: Category:Arrowroot recipes

title: Category:Arrowroot recipes


text:
User:Rtetsoacrsf/Collections/Eng Wiki

 * Introduction to Software Engineering/Planning/Requirements
 * General Engineering Introduction/Documentation
 * Professional and Technical Writing/Instructions
 * General Engineering Introduction/Presentations
 * General Engineering Introduction/Notebooks/Writing Pattern
 * General Engineering Introduction/Notebooks/Problem Writing
 * General Engineering Introduction/Solve Problems
 * General Engineering Introduction/Do it First
 * General Engineering Introduction/Attitude
 * General Engineering Introduction/Notebooks
 * General Engineering Introduction/Communication
 * General Engineering Introduction/Requirements
 * Managing Groups and Teams/Communication
 * General Engineering Introduction/Research
 * General Engineering Introduction/CDIO

title: User:Rtetsoacrsf/Collections/Eng Wiki


text:
Talk:Think Python/Case study: word play

Word list
Please how can get the list of words. Ismail0916 (discuss • contribs) 10:35, 7 December 2023 (UTC)

title: Talk:Think Python/Case study: word play


text:
Oberon/A2/Oberon.MultiMail.Mod

(* ETH Oberon, Copyright 2001 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich. Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *) MODULE MultiMail IN Oberon;	(** portable *) (* ejz, *) IMPORT Files, Objects, Texts, Oberon, Strings, Fonts, Base64, NetTools, MIME, Mail, Links, Gadgets, Lists, Streams, TextStreams; VAR W: Texts.Writer; PROCEDURE SearchText(text: Texts.Text; CONST pat: ARRAY OF CHAR; VAR pos: SIGNED32): BOOLEAN; CONST MaxPatLen = 128; VAR i, l, sPatLen: SIZE; R: Texts.Reader; sPat: ARRAY MaxPatLen OF CHAR; sDv: ARRAY MaxPatLen + 1 OF SIGNED16; ch: CHAR; PROCEDURE CalcDispVec; VAR i, j, d: SIGNED32; BEGIN i := 1; d := 1; WHILE i <= sPatLen DO 				j := 0; WHILE (j + d < sPatLen) & (sPat[j] = sPat[j + d]) DO 					INC(j) END; WHILE i <= j + d DO 					sDv[i] := SHORT(d); INC(i) END; INC(d) END END CalcDispVec; BEGIN COPY(pat, sPat); sPatLen := Strings.Length(sPat); CalcDispVec; IF sPatLen > 0 THEN Texts.OpenReader(R, text, pos); Texts.Read(R, ch); INC(pos); l := text.len; i := 0; WHILE (i # sPatLen) & (pos <= l) DO 				IF ch = sPat[i] THEN INC(i); IF i < sPatLen THEN Texts.Read(R, ch); INC(pos) END ELSIF i = 0 THEN Texts.Read(R, ch); INC(pos) ELSE i := i - sDv[i] END END ELSE i := -1 END; RETURN i = sPatLen END SearchText; PROCEDURE Send*; VAR S: Mail.SMTPSession; Sw: Streams.Stream; server: Mail.ServerName; email: Mail.AdrString; cont: MIME.Content; obj: Objects.Object; text, mail, ascii: Texts.Text; buf: Texts.Buffer; list: Lists.List; item: Lists.Item; boundary: ARRAY 128 OF CHAR; magStr, val: ARRAY 16 OF CHAR; pos, magic: SIGNED32; F: Files.File; h: MIME.Header; R: Texts.Reader; ch: CHAR; autoCc: BOOLEAN; BEGIN Texts.OpenWriter(W); obj := Gadgets.FindObj(Gadgets.context, "body"); Links.GetLink(obj, "Model", obj); text := obj(Texts.Text); obj := Gadgets.FindObj(Gadgets.context, "files"); list := obj(Lists.List); NEW(mail); Texts.Open(mail, ""); NEW(buf); Texts.OpenBuf(buf); Mail.GetSetting("SMTP", server, FALSE); Mail.GetSetting("EMail", email, FALSE); Mail.GetSetting("AutoCc", boundary, TRUE); Strings.StrToBool(boundary, autoCc); (* gen boundary *) magic := Oberon.Time; boundary := ""; Strings.IntToStr(magic, magStr); Strings.Append(boundary, magStr); (* mime header *) Sw := TextStreams.OpenReader(text, 0); MIME.ReadHeader(Sw, NIL, h, pos); Texts.OpenReader(R, text, pos); Texts.Read(R, ch); IF ((ch = Strings.CR) OR (ch = Strings.LF)) OR R.eot THEN ch := Strings.CR; WHILE (pos > 0) & ((ch = Strings.CR) OR (ch = Strings.LF)) DO 				DEC(pos); Texts.OpenReader(R, text, pos); Texts.Read(R, ch) END; INC(pos); IF pos > text.len THEN pos := text.len END END; Texts.Save(text, 0, pos, buf); Texts.Append(mail, buf); Texts.WriteLn(W); Texts.WriteString(W, "X-Mailer: MultiMail for Oberon (ejz)"); Texts.WriteLn(W); Texts.WriteString(W, "MIME-Version: 1.0"); Texts.WriteLn(W); Texts.WriteString(W, 'Content-Type: multipart/mixed; boundary="'); 		Texts.WriteString(W, boundary); Texts.Write(W, 022X); Texts.WriteLn(W); 		Texts.WriteLn(W); 		Texts.WriteString(W, "This is a multi-part message in MIME format."); 		Texts.WriteLn(W); Texts.WriteLn(W); (* message *) 		Texts.WriteString(W, "--"); Texts.WriteString(W, boundary); 		Texts.WriteLn(W); Texts.Append(mail, W.buf); 		Mail.GetSetting("ContType", val, TRUE); 		NEW(cont); cont.typ := MIME.GetContentType("text/plain"); 		IF val[0] = "0" THEN 			cont.encoding := MIME.EncBin 		ELSIF val[0] = "1" THEN 			cont.encoding := MIME.Enc8Bit 		ELSIF val[0] = "2" THEN 			cont.typ := MIME.GetContentType(MIME.OberonMime); cont.encoding := MIME.EncAsciiCoderC 		ELSE 			cont.encoding := MIME.EncAuto; 			Mail.QueryContType(text, pos, cont) 		END; 		IF cont.encoding IN {MIME.EncAsciiCoder, MIME.EncAsciiCoderC, MIME.EncAsciiCoderCPlain} THEN Texts.WriteString(W, "X-Content-Type: "); Texts.WriteString(W, MIME.OberonMime); Texts.WriteLn(W); Texts.Append(mail, W.buf) END; Sw := TextStreams.OpenWriter(mail); MIME.WriteISOMime(Sw, cont); TextStreams.WriteLn(Sw); TextStreams.WriteLn(Sw); IF cont.encoding IN {MIME.EncAsciiCoder, MIME.EncAsciiCoderC, MIME.EncAsciiCoderCPlain} THEN IF cont.encoding IN {MIME.EncAsciiCoder, MIME.EncAsciiCoderC} THEN MIME.WriteText(text, pos, text.len, Sw, cont, FALSE, TRUE) END; TextStreams.WriteString(Sw, Mail.OberonStart); TextStreams.WriteLn(Sw); Mail.MakeAscii(text, pos, text.len, cont.encoding # MIME.EncAsciiCoder, ascii); cont.typ := MIME.GetContentType("text/plain"); MIME.WriteText(ascii, 0, ascii.len, Sw, cont, FALSE, TRUE) ELSE Texts.OpenReader(R, text, pos); Texts.Read(R, ch); INC(pos); WHILE ~R.eot & (ch <= " ") & (R.lib IS Fonts.Font) DO 				Texts.Read(R, ch); INC(pos) END; DEC(pos); MIME.WriteText(text, pos, text.len, Sw, cont, FALSE, TRUE) END; TextStreams.WriteLn(Sw); Sw.Flush(Sw); (* attachments *) pos := 0; ASSERT(~SearchText(text, boundary, pos)); NEW(text); item := list.items; WHILE item # NIL DO 			Texts.WriteString(W, "--"); Texts.WriteString(W, boundary); Texts.WriteLn(W); Texts.WriteString(W, "Mime-Version: 1.0"); Texts.WriteLn(W); Texts.WriteString(W, "Content-Type: application/octet-stream"); Texts.WriteLn(W); Texts.WriteString(W, "Content-Transfer-Encoding: base64"); Texts.WriteLn(W); Texts.WriteString(W, 'Content-Disposition: attachment; filename="'); 			Texts.WriteString(W, item.s); Texts.Write(W, 022X); Texts.WriteLn(W); 			Texts.WriteLn(W); Texts.Append(mail, W.buf); 			F := Files.Old(item.s); 			IF F # NIL THEN 				Texts.Open(text, ""); Base64.EncodeFile(F, text); 				Texts.Save(text, 0, text.len, buf); Texts.Append(mail, buf); 				pos := 0; ASSERT(~SearchText(text, boundary, pos)); 				Texts.WriteLn(W) 			ELSE 				Texts.OpenWriter(W); 				Texts.WriteString(W, item.s); Texts.WriteString(W, " not found"); 				Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf); 				RETURN 			END; 			item := item.next 		END; 		Texts.WriteString(W, "--"); Texts.WriteString(W, boundary); Texts.WriteString(W, "--"); Texts.WriteLn(W); 		Texts.WriteLn(W); Texts.Append(mail, W.buf); 		cont.typ := MIME.GetContentType("text/plain"); cont.encoding := MIME.EncBin; 		Mail.OpenSMTP(S, server, email, Mail.DefSMTPPort); IF S.res = NetTools.Done THEN Texts.WriteString(W, "mailing "); Texts.Append(Oberon.Log, W.buf); Mail.SendMail(S, mail, cont, autoCc); Mail.CloseSMTP(S) END; Texts.WriteString(W, S.reply); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) END Send; END MultiMail. MultiMail.Panel System.Free MultiMail ~

title: Oberon/A2/Oberon.MultiMail.Mod