text:
What is the Patent Box?
Patent Box is a tax incentive scheme designed to encourage innovation within the UK. Introduced in 2013, it is a government-backed initiative whereby company profits which are derivable from patented technology are taxed at a lower rate than standard corporation tax. The system is intended to provide a strong and supportive environment for innovation within the UK.
Since inception of the scheme many businesses have filed patent applications in order to access the Patent Box, rather than primarily for exclusivity or other commercial benefits. Of course the innovations must relate to genuine inventions and need to meet the basic criteria for patentability in order to be granted a patent. However, the patent strategy upon application and after grant will be different if Patent Box qualification is the main motivation for filing.
There are multiple criteria which must be met in order to qualify for access to the Patent Box. It can only be accessed by companies that are headquartered in the UK and where the main research and development nexus is also within the UK.
If your business qualifies, you could benefit from a significant discount on corporation tax in relation to the profits derived from the patented invention. What is more, if your patented technology only contributes to one small element of a wider product, you may qualify for the tax exemption on the value of the product as a whole. In this respect, the Patent Box can be a very generous benefit and which makes it popular for innovative companies looking to manage their tax exposure in the UK.
Patent Box - the Keltie difference
Our attorneys have witnessed first hand how the Patent Box system successfully stimulates innovation. In spite of this , many innovative British businesses are not using it. Whilst awareness of similar initiatives such as R&D tax Credits is high, awareness of the Patent Box is still relatively low - as of 2021 it is estimated that a majority of companies involved in innovating in the UK are not accessing the scheme.
Keltie offers comprehensive audits of your technology and technology processes, to help determine whether or not you are generating the kind of innovations that might enable you to qualify for the Patent Box.
This where we add value - by getting involved in the earliest stages of planning and developing an innovation, we can help access and unlock the benefits of the scheme. Our experienced attorneys will advise on whether Patent Box considerations should be built into your intellectual property strategy and portfolio, so you can capitalise on the value of your innovations.
Contact our skilled patent attorneys today to find out whether your innovation could enable you can start enjoying the benefits of the Patent Box.
Continue reading about Patent Box
Services you may be interested in
Decades of experience as attorneys, engineers and scientists in industry and research underpin the approach of our patent team. We are resolutely commercial and take time to understand your technology and your business.
Patent Attorneys - Patent Search
Keltie's patent attorneys are skilled not only in patent searching, but in interpreting the output of a patent search, and in helping you understand what it means for your technology and your business.
Patent Attorneys - Patent Filing
Why file a patent application? Patents can serve multiple purposes during their lifetime. They grant the owner a period to enjoy the exclusivity of their invention before others can use it. They give the owner powerful rights recognised in law to prevent infringement. But they are also valuable intellectual property which can enhance the ability of the owner to exploit their technology commercially through licensing or sale of the invention.
Patent Attorneys - Patent Infringement & Protection
A key reason to invest in patent protection is to prevent others from copying your innovation. The patent system is intended to allow you, as a creator, to enjoy exclusivity around your technology for a set period of time. Patents allow you to leverage that exclusivity in order to develop your commercial position.
Patent Attorneys - Patent Box
What is the Patent Box? Patent Box is a tax incentive scheme designed to encourage innovation within the UK. Introduced in 2013, it is a government-backed initiative whereby company profits which are derivable from patented technology are taxed at a lower rate than standard corporation tax. The system is intended to provide a strong and supportive environment for innovation within the UK.
Trade Mark Lawyers
The attorneys in our Trade Mark Group are among the leading brand protection experts in the UK and Europe. Through our associate network, we coordinate brand protection all over the world. The Group comprises multi-lingual European and UK trade mark attorneys with backgrounds in law, engineering and business. Their expertise extends through the full lifecycle, from searching and filing through to opposition and litigation, including enforcement and appeal. The Group also has vast experience in online enforcement.
Trade Mark Lawyers - Trade Mark Search
Before you start using a trade mark, it is good practice to conduct a search to check that the trade mark is free to use. Conducting this type of search can be challenging because there are so many trade marks in use across many different fields of commerce. This makes it difficult for people without trade mark qualifications to navigate other brand-owners' rights, and avoid or manage potential conflict.
Trade Mark Lawyers - Trade Mark Filing
How to file a trade mark The trade mark filing process can be relatively straightforward. In theory, all an applicant needs to do is access the relevant trade mark website, enter the word they wish to create a mark for, add the relevant goods and services to apply to the mark and pay the fee.
Trade Mark Lawyers - Trade Mark Infringement & Protection
What is trade mark protection? Trade mark protection is a means of securing a monopoly right in a word, logo, shape, colour or sound that acts as an identifier of origin, allowing consumers to immediately determine the source of the goods or services offered under that particular trade mark or brand.
Design Protection
Keltie's attorneys have an unusual wealth of expertise and experience in design rights. We help clients protect their designs, exploit their rights and mitigate risks.
Design Protection - Design Search
If you are launching a new product there is a risk that it will infringe third party design rights. You can reduce the likelihood of costly conflict down the line, or at least be better informed of potential risk, by conducting a design search and clearance assessment before product launch. To do this, we search for relevant earlier rights - both registered and unregistered designs - help you assess the risk these pose to you, and guide you in any action that you might take to reduce and mitigate risk.
Design Protection - Design Filing
To protect your design with a registered right, a formal application must be made to the appropriate IP office. Obtaining a design registration is relatively quick (a matter of weeks or months in the EU and UK), which can be very useful for creators because it means rights and therefore protection can be granted swiftly.
Design Protection - Design Infringement & Protection
As the owner of a design right, you are able to take action against another party if they market a product that is too visually similar to yours, without your permission. If their product is identical to your design, or if it differs in some ways but the impression the consumer takes from their product matches your design, you may be able to take action.
What is online brand protection? Protecting the value of your brand online is a lot to do with reputation management. In the age of the internet and social media, brands are global, accessible and more easy to engage with than ever before. Online brand protection services from Keltie seek to protect the credibility and equity you have built within your business and include our enforcement, monitoring and detection capabilities.
Online Brand Protection - Brand Monitoring
What is online brand monitoring? Monitoring involves the process of observing and tracking uses of your brand online. It is a key aspect of your business' operations to both understand your customers' sentiment towards the brand and uncover any instances where your intellectual property rights have been infringed.
Online Brand Protection - Domain Name Services
A domain name provides a platform for visibility of a brand in an online space. It is a destination address for the web traffic generated around a brand name. However, simply put, a domain is a word, and a word can be trade marked. Often, people secure a domain name first in their process of creating a new product or service. Whilst an online presence is a key part of launching a new brand, it is a mistake to think that because you own a domain name, you will be able to secure a matching trade mark. The process should work the other way around - where a domain name becomes an additional asset secured following the clearance and registration of a trade mark.
People who work in this area
Shakeel Ahmad
Shakeel (Shak) founded Keltie's IT, Telecoms and Electronics practice over 20 years ago and heads up a talented team who advise on patent issues regarding various areas of technology, but primarily in electronic and software technology.
Emma Arbabzadah
Emma graduated from Imperial College London in 2009 with a master's degree in Physics, before continuing her studies in the field and at Imperial College by undertaking a PhD in the Photonics Group, followed by a year and a half as a Research Assistant. During this time her research focused on the development of high power diode pumped solid state lasers, using both end-pumped and side-pumped geometries, for use in medical and industrial applications in particular.
Philip Baker
Philip specialises in patent matters in the fields of physics, electronics, mechanical engineering and information technology. He has particular experience in automotive engineering, together with expertise in mobile telecommunications, semiconductor devices, thermal printing technology and consumer electronics; including ink-jet and laser printers, projectors, digital cameras and LCD displays. In addition to drafting and prosecuting patent applications before the EPO and UKIPO, he also advises on the infringement and validity of UK and European patents and deals with registered designs. Philip also has experience of carrying out patent watches, freedom to operate searches and European opposition work.
Joeri Beetz
Joeri is a UK, Dutch and European patent attorney with more than 15 years of experience in supporting his clients' IP needs with high quality drafting, prosecution and opposition work and sound commercial and strategic advice. He has helped many clients to use their patent portfolio for the benefit of their business or to strategically move around the competition's IP. Joeri spent a considerable part of his career in-house at a large and innovative multinational corporation, where he developed a deep love for combine harvesters and other agricultural technology.
Eileen Brandenburger
Eileen works in the chemical and life sciences team where she supports a range of clients from start-ups to multinational companies in the fields of pharmaceuticals, industrial biotechnology, diagnostics, clean tech, chemical processes, catalysis, petrochemicals, additive manufacturing, and medical devices. She has a particular focus on technologies at the interface of chemistry and biology supporting clients active in small molecule drug discovery as well as the biologics space.
Judith Caldwell
Judith is among Keltie's most experienced patent attorneys having joined the firm when the entire workforce could travel together in a single London black cab. Using her previous experience as in-house attorney for a multinational consumer goods company as well as having been a senior patent examiner with the UK Intellectual Property Office, Judith has helped the firm grow and expand its reach both technically and geographically to service a truly diverse client base, and takes much pride in seeing young engineers and scientists join the firm, qualify and become accomplished attorneys in their own specialist fields.
Mark Callaghan
Mark is an experienced patent attorney who brings a background as a mechanical engineer to bear in his work with a broad range of clients and technologies, and always enjoys getting to the heart of an invention and its importance to his client.
Charly Capon
Charly graduated from the University of Bristol in 2017 with a first class Master's degree in Engineering Design. Her degree covered a range of multidisciplinary topics and towards the end of her studies she specialised in composite structures and advanced materials.
Gemma Christie
Gemma specialises in patents in the field of Mechanical and Chemical Engineering and has a wealth of experience covering a broad range of technical fields including automotive, aerospace, composites, powder metallurgy, industrial and medical gases, medical devices, food processing, battery technology and downhole oil-well technologies. Gemma works with clients of all sizes from start-ups to multinational corporations and is known for her easy and approachable manner.
Devanand Crease
Dev represents biotech and chemicals clients based in the UK, Europe, and US. He joined the patent profession in the late 1990s at the time of the first biotech boom. Since joining Keltie in 2004 he has developed a thriving international practice specialising in providing strategic advice and support for early stage and rapid growth technology companies particularly in the fields of biological therapeutics, synthetic biology, computational biology & bioinformatics and medical devices. Dev enjoys working closely with clients to help counsel them in devising robust intellectual property strategies through serial funding rounds. He has worked with many clients that have successfully exited by trade sale, or through IPOs on the London Stock Exchange as well as NASDAQ.
Sean Cummings
Sean deals with all forms of intellectual property but spends most of his time on patents and designs. His patent practice extends over a huge range of technologies, from catalysts to computers. He is also involved with designs ranging from textiles to logos.
Sullivan Fountain
Sullivan leads Keltie's Sustainability Practice, and deals with technologies in many sectors, across the full range of engineering disciplines, including mechanical, electronic, materials, control systems, and software-related inventions.
Thomas Franks-Moore
Tom read Natural Sciences at the University of Cambridge, studying chemistry and physics before specialising in Materials Science with areas of study including: thin films, energy harvesting, thermodynamics, biomedical materials, materials for optoelectronic devices, and nuclear materials. Tom's Master's project involved the study and construction of sustainable composite structures for use in magnetoelectric energy harvesting devices and free standing thin films for use in such devices.
Joseph Goldman
Joseph's core interests lie in the fields of materials, manufacturing, sustainability and digital technologies. These stem from a varied route to a patent career, via mathematics and nuclear engineering. Joseph enjoys the process of getting absorbed 'into a creation' and appreciating the detailed work and thought that goes into it. He also enjoys the diversity of working with clients of all sizes from large international companies, to UK-based SMEs and independent inventors.
Jonathan Goodacre
Jonathan has extensive experience of working with clients in a wide range of technology areas including agri-tech, sustainability, pharmaceuticals, chemistry, therapeutic treatments, personal care devices, medical devices, medical diagnostics, healthcare, biotechnology, regenerative stem cell therapies, food packaging, gene-editing (CRISPR), CAR-T cell-based therapies, materials, catalysts, energy technologies and cosmetics.
Timo Haslam
Timo joined Keltie in 2017 after graduating from the University of Birmingham with a first class Master's degree in Mechanical Engineering. At university, Timo's studies covered subject areas including advanced mechanics, sustainable energy systems, advanced vehicle engineering, biofuels and combustion, and micro and nano technologies. Timo completed his dissertation project in partnership with the Dearman Engine company, focussing on the application of polymers in cryogenic ambient expansion engines and in particular on in-cylinder lubrication methods. Timo gained industrial experience alongside his studies, undertaking internships at Cummins Turbo Technologies and at Jaguar Land Rover where he was part of the Vehicle Engineering team in Special Vehicle Operations, working on a limited edition Range Rover project.
Jane Holland
Joanne Hopley
Jo is one of the partners in the Engineering Group at Keltie and has worked as a qualified attorney in general physics and engineering fields for 20 years. She has a particular specialism in automotive engineering, in particular fuel injection systems and injection control strategies, but also with powertrain systems, brakes and engine control systems. Jo has worked with several prominent and multi-national companies in the automotive sector and has managed their extensive, global patent portfolios. She also advises on infringement and freedom-to-operate strategies.
Laura is a Partner in the Life Science and Chemical Group. She has a broad academic background in biochemistry and specialises in patent matters relating to biotechnology, precision medicine, immunology, gene therapy, pharmaceuticals, medical devices, stem cells and regenerative medicine, diagnostics, medicinal chemistry, and chemical technology such as petrochemicals and catalysts.
Peter Kent
Peter specialises in patents and has significant experience in drafting and prosecuting patent applications for mechanical, electrical and computer-related inventions. He has particular expertise in renewable technologies such as wind turbines and wave energy converters, and in automotive technologies such as fuel injectors, engine control systems and engine diagnostic systems. Peter also has a strong academic background in mathematical physics, solid state physics, nanotechnology, spectroscopy, optics and lasers.
Richard Lawrence
Richard is a highly experienced patent attorney working across a range of high-tech fields, with particular interests in cryptography, telecommunications, artificial intelligence, and quantum computing – the more complex the technology, the better. His practice is split between large corporate clients and start-ups and scale-ups, and his primary motivation is to make sure that his clients obtain, maintain, and use their intellectual property in the way that makes the most commercial sense for them.
Mark Levy
In 2012, Mark began his PhD in Physics at the University of Birmingham where he was part of the particle physics group. He studied the properties of top-antitop quarks produced at the Large Hadron Collider. As part of his research program, Mark worked at CERN in Geneva for 15 months, assisting in the operation of the ATLAS experiment, before completing his PhD in 2016.
Mike has a broad academic background in chemistry, medicinal chemistry, biochemistry, molecular biology and cellular biology, which experience was greatly enhanced during nine years of cutting-edge research in fields of biochemistry and molecular biology. He has authored many peer-reviewed publications and is an inventor of many patents.
Monica is a UK patent and design attorney and European patent attorney with a technical background in computational materials science. Her current patent practice bridges a range of technical fields including software technology, materials science, nanotechnology, electronic devices, fuel production and storage systems, cryptography and financial technologies.
Colin Paterson
Colin's professional experience spans a variety of technical areas, including software- and mathematical-based technologies such as Artificial Intelligence / Machine Learning, e.g. for drug discovery, electronics-based technologies such as consumer electronics and embedded electronic control system applications, and engineering technologies such as in the automotive, wind energy and agricultural sectors.
Mark Richardson
Mark is part of Keltie's IT, Telecoms and Electronics team and advises on all parts of the patent process including invention harvesting, patent drafting and prosecution, oppositions and appeals, IP audit, portfolio management and IP due diligence work including freedom to operate opinions. Mark also advises on design issues including the preparation and filing of registered designs. Mark represents SMEs, multinational clients, individuals and universities at the UKIPO, EPO, WIPO and EUIPO.
Amelia Ross
Amelia studied physics at the University of Liverpool and graduated with a first in 2016. Her studies included semiconductor applications, material physics, nuclear physics and quantum and atomic physics. Amelia has work experience in biophysics research, medical device manufacturing and machine testing and interned at Manchester Medical School and The Christie Hospital in 2015, where she analysed MRI data with an oncologist and clinician scientist.
Andrew Sayer
Andy completed an undergraduate degree in Genetics at the University of Liverpool, graduating in 2014. Following his undergraduate studies, he completed a master's degree in Applied Biosciences and Biotechnology at Imperial College London in 2015, where he studied a wide variety of technical areas including: plant biotechnology, industrial and pharmaceutical biotechnology, genetics, genomics and synthetic biology.
Nathaniel Taylor
Nathaniel joined Keltie in 2016 and has experience in drafting and prosecuting patent applications from a wide range of technological fields. His work principally relates to high-tech sustainability technologies in the automotive, agricultural, and renewable energy fields, amongst a broad portfolio that stretches from electrical and industrial power management systems to fashion, packaging and consumer products.
Paul Waldron
Paul is a qualified European and UK Patent Attorney, and works in the Bioscience and Chemistry teams where he supports a range of clients from start-ups to multinationals. He has developed expertise with clients active in the fields of industrial biotechnology, nutrition, plant sciences, fuels and catalysts. Paul has a particular interest in Precision Medicine, and also has experience with targeted and localised therapies using a variety of therapeutic agent types. Paul also collaborates with colleagues across Keltie in order to advise on a broad range of fields, including biological modelling and medical devices.
Samantha Walker-Smith
As a member of Keltie's IT, Telecoms and Electronics team, Samantha specialises in handling software and computer-implemented inventions, and particularly enjoys working with clients applying emerging 'next generation' digital technologies (such as artificial intelligence, machine learning and 5G) across a variety of technical fields. She is especially interested in the application and cross-over of such technologies in the field of precision medicine.
Sarah Waterman
Sarah graduated from Imperial College London in 2015 with a Master's Degree in Physics with a Year in Europe. Her studies included a wide range of Physics topics which included quantum mechanics, plasma physics, quantum computing, general relativity, cosmology and electromagnetism.
Emily Weal
Emily specialises in the fields of materials science, engineering and design. She leads the Advanced Materials and Manufacturing practice at Keltie, and co-leads the Design Group. Her practice covers a wide range of technical fields including nanotechnology, glass processing, advanced materials, energy storage, construction, packaging, food technology, medical devices, automotive and aerospace engineering, electronics, software and user interfaces.
Aesthetic Design
No matter what your product, aesthetics are invaluable. They are the first impression of a product: the contours, shapes, colours and textures that catch our eye as we see, use and interact with it. Not only does a distinct aesthetic have its own value, but it can enhance function, reinforce brand recognition and loyalty, and drive consumer choice.
Branding has a key role to play in any industry. Brands are the flags that fly on behalf of a business or product. They are an identifier of origin that allows consumers to recognise where their products or services are coming from, so it is crucial that those brands resonate with consumers. They must also be kept free of problems that inhibit their ability to be the vehicle that drives a business.
Whether it is the development of novel materials and compounds, or the improvement of industrial processes to make them cleaner or more productive, chemical sciences underpin many of the aspects which are key to addressing the challenges of the 21st century. The diversity of innovation in chemistry is vast, with industry-leading companies combining resources and skills to create new products designed to solve problems and enhance our understanding.
Often referred to as a Fourth Industrial Revolution, emerging digital technologies which blend physical systems and digital technologies together are playing a more significant role in our everyday lives.
Engineering inventions can be found in hugely complex products, or deceptively simple creations. They can encompass almost any field of technology, and often several fields at once.
More so than almost all other scientific fields, our knowledge, understanding and expertise in biology has increased at a phenomenal pace over the past few decades. Since the high throughput sequencing power used in the human genome project was unleashed at the beginning of the 21st century, multiple '-omics' disciplines now characterise a diverse field that offers such enormous potential for medicine, food production, wellbeing and human expression.
Modern technologies and advancements in product design and manufacturing contribute to our being able to lead a more sustainable and improved lifestyle. These in turn are increasing both the expectancy and quality of life we are able to enjoy as consumers by combatting health challenges and diseases, improving diagnostics and developing new therapies.
Materials science and the technologies involved in manufacturing processes underpin almost every element of technological development. The function, quality, longevity and financial value of products are all impacted by their material make up and the mechanisms involved in their production.
Precision medicine, also referred to as personalised or stratified medicine, is an emerging approach for disease treatment and prevention in which medical decisions, treatments and products are tailored to a subgroup of patients by taking into account the individual characteristics of each patient.
There are few greater challenges than starting a company from scratch but the rewards for taking a great idea or innovation and turning it into a successful business are substantial. At their inception, new companies grow quickly, driven by the dedication of owners and their will to make them profitable, but usually with limited financial resources. In order to become established and find a strong position within the market, startups need to attract external investment.
Sustainability or Green Technology is a hugely prominent sector as public consciousness, awareness and engagement with the 'green agenda' grows. As consumers, our behaviour can have a significant environmental impact and has prompted substantial strategic and financial support from national governments and the UN as they look to industry to develop sustainable solutions, products and technologies.
The rise of the internet and modern telecommunications has been underpinned by our ability to program computers to carry out complex operations. Almost every aspect of our lives has been advanced by developments in technology and software, making previously slow or complicated processes easier, faster and in some cases, cheaper.
Related knowledge
Design Registration Strategy: The spectrum of protection
What is a patent?
Why It's Important to File Oppositions at the EPO to Increase Your Freedom to Operate
Keeping up with the latest patents is vital to maintain competitive advantage, especially when your competitors may file patents that limit your freedom to operate (FTO). But how exactly do oppositions work, what timeframes do you have to work with, and what are the potential costs?
The unitary patent system moves a little closer. Provisional application of the UPCA to start https://t.co/Q1joN0J3XS via @EPOorg
Happy New Year! We're looking forward to supporting the IMAGINE IF! 2022 program! https://t.co/IwYDCgzzur
Great to see that planning permission has been granted for the development of CREW's Innovation Hub @GMITOfficial c… https://t.co/o4J8Kd1DAt
Enter the Metaverse: Facebook rebrands to "Meta" https://t.co/L7vWByQJsY via @KeltieLLP


Our children, like most children today, will choose something sweet when you give them a beverage choice. They'll want fruit juice or a soda or something akin to that if I let the child make the choice.
Thankfully, I'm a parent and I understand that it's a terrible idea to establish a pattern that a beverage has to be flavored or sweet. I make it a point to pour everyone a glass of water for most meals and I order water most of the time at restaurants.
The children notice this and they usually don't complain about water being their beverage. Anything else is a rare treat – water is the norm.
Another example: we rarely buy name brand foods. We just don't.
When I'm preparing a bowl of breakfast cereal for them in the morning, the cereal doesn't come from a box laden with cartoon characters or bright logos. In fact, our preferred store brand cereal comes in the most boring looking brown box possible. It says TOASTY O'S in big block letters on the front of this brown box, accompanied by a very ordinary looking photograph of those TOASTY O'S.
Now, I'm not a person who's going to put the TOASTY O'S into the name brand cereal box. My children are going to honestly see what they eat and it's going to be TOASTY O'S.
Sometimes, they'll see Dad eating a bowl of TOASTY O'S, too, though I usually just have some fruit or some scrambled egg whites for breakfast.
These two stories have several things in common.
First, I'm actively demonstrating frugality for them as part of the normal daily routine. They're seeing that generic brands are just fine. They're seeing that water is a completely appropriate mealtime – and any time – beverage.
Second, they see that frugality is something that I do. Particularly at this stage in their life, my behavior is a model for what they're going to do.
Many (not all, but many) of these little things are going to be part of the routine they have when they reach adulthood. Yes, they'll overwrite some of the things I taught them, but if I teach them 100 things and fifty of them stick, then I want those things to be good things.
Finally, it establishes patterns that are healthy in other ways. It's far healthier to have water as your primary beverage than… well, pretty much anything else. It's also healthy to eat a breakfast that doesn't involve donuts or sweetened coffee. I want my children to view these things as completely normal.
If you are a parent, every choice you make – both for the child and any choices you make for yourself that they see – is a lesson for them. They hear and see all kinds of things. Not only is that a call to do better for them, it's also a call to do better for yourself.
This is a point I talk about fairly often because I consider it a fundamental point of both parenting and of personal finance education. It is one that I'm challenged by every day, both as a person who wants to succeed in frugality and one who wants to succeed as a parent. If you want to succeed at either one, you need to not just talk the talk, but you also have to walk the walk. "Do as I say, not as I do" has never worked for anyone.


text:
/***********************************************************************
*  Panel Neon Lamp                                                     *
***********************************************************************/
function NeonLamp(parent, x, y, id) {
    /* Constructor for the neon lamp objects used within panels. x & y are the
    coordinates of the lamp within its containing element; id is the DOM id */

    this.state = 0;                     // current lamp state, 0=off
    this.topCaptionDiv = null;          // optional top caption element
    this.bottomCaptionDiv = null;       // optional bottom caption element

    // visible DOM element
    this.element = document.createElement("div");
    this.element.id = id;
    this.element.className = NeonLamp.lampClass;
    if (x !== null) {
        this.element.style.left = x.toString() + "px";
    }
    if (y !== null) {
        this.element.style.top = y.toString() + "px";
    }

    if (parent) {
        parent.appendChild(this.element);
    }
}

/**************************************/

NeonLamp.topCaptionClass = "neonLampTopCaption";
NeonLamp.bottomCaptionClass = "neonLampBottomCaption";
NeonLamp.lampClass = "neonLamp";
NeonLamp.litClass = "neonLamp neonLit";
NeonLamp.lampLevels = 6;
NeonLamp.levelClass = [                 // css class names for the lamp levels
            NeonLamp.lampClass,
            NeonLamp.litClass + "1",
            NeonLamp.litClass + "2",
            NeonLamp.litClass + "3",
            NeonLamp.litClass + "4",
            NeonLamp.litClass + "5",
            NeonLamp.litClass];

/**************************************/
NeonLamp.prototype.addEventListener = function addEventListener(eventName, handler, useCapture) {
    /* Sets an event handler whenever the image element is clicked */

    this.element.addEventListener(eventName, handler, useCapture);
};

/**************************************/
NeonLamp.prototype.set = function set(state) {
    /* Changes the visible state of the lamp according to the value of "state", 0-1 */
    var newState = Math.max(Math.min(Math.round(state*NeonLamp.lampLevels + 0.4999), NeonLamp.lampLevels), 0);

    if (this.state ^ newState) {         // the state has changed
        this.state = newState;
        this.element.className = NeonLamp.levelClass[newState];
    }
};

/**************************************/
NeonLamp.prototype.flip = function flip() {
    /* Complements the visible state of the lamp */

    this.set(1.0 - this.state/NeonLamp.lampLevels);
};

/**************************************/
NeonLamp.prototype.setCaption = function setCaption(caption, atBottom) {
    /* Establishes an optional caption at the top or bottom of a single lamp.
    Returns the caption element */
    var e = (atBottom ? this.bottomCaptionDiv : this.topCaptionDiv);

    if (e) {
        e.textContent = caption;
    } else {
        e = document.createElement("div");
        if (atBottom) {
            this.bottomCaptionDiv = e;
            e.className = NeonLamp.bottomCaptionClass;
        } else {
            this.topCaptionDiv = e;
            e.className = NeonLamp.topCaptionClass;
        }
        e.appendChild(document.createTextNode(caption));
        this.element.appendChild(e);
    }
    return e;
};

/***********************************************************************
*  Panel Colored Lamp                                                  *
***********************************************************************/
function ColoredLamp(parent, x, y, id, offClass, onClass) {
    /* Constructor for the colored lamp objects used within panels. x & y are
    the coordinates of the lamp within its containing element; id is the DOM id */

    this.state = 0;                     // current lamp state, 0=off
    this.topCaptionDiv = null;          // optional top caption element
    this.bottomCaptionDiv = null;       // optional bottom caption element
    this.lampClass = offClass;          // css styling for an "off" lamp
    this.litClass =                     // css styling for an "on" lamp
                offClass + " " + onClass;
    this.levelClass = [                 // css class names for the lamp levels
            offClass,
            this.litClass + "1",
            this.litClass + "2",
            this.litClass + "3",
            this.litClass + "4",
            this.litClass + "5",
            this.litClass];

    // visible DOM element
    this.element = document.createElement("div");
    this.element.id = id;
    this.element.className = offClass;
    if (x !== null) {
        this.element.style.left = x.toString() + "px";
    }
    if (y !== null) {
        this.element.style.top = y.toString() + "px";
    }

    if (parent) {
        parent.appendChild(this.element);
    }
}

/**************************************/

ColoredLamp.lampLevels = 6;
ColoredLamp.topCaptionClass = "coloredLampTopCaption";
ColoredLamp.bottomCaptionClass = "coloredLampBottomCaption";

/**************************************/
ColoredLamp.prototype.addEventListener = function addEventListener(eventName, handler, useCapture) {
    /* Sets an event handler whenever the image element is clicked */

    this.element.addEventListener(eventName, handler, useCapture);
};

/**************************************/
ColoredLamp.prototype.set = function set(state) {
    /* Changes the visible state of the lamp according to the value of "state", 0-1 */
    var newState = Math.max(Math.min(Math.round(state*ColoredLamp.lampLevels + 0.4999), ColoredLamp.lampLevels), 0);

    if (this.state != newState) {       // the state has changed
        this.state = newState;
        this.element.className = this.levelClass[newState];
    }
};

/**************************************/
ColoredLamp.prototype.flip = function flip() {
    /* Complements the visible state of the lamp */

    this.set(ColoredLamp.lampLevels - this.state);
};

/**************************************/
ColoredLamp.prototype.setCaption = function setCaption(caption, atBottom) {
    /* Establishes an optional caption at the top or bottom of a single lamp.
    Returns the caption element */
    var e = (atBottom ? this.bottomCaptionDiv : this.topCaptionDiv);

    if (e) {
        e.textContent = caption;
    } else {
        e = document.createElement("div");
        if (atBottom) {
            this.bottomCaptionDiv = e;
            e.className = ColoredLamp.bottomCaptionClass;
        } else {
            this.topCaptionDiv = e;
            e.className = ColoredLamp.topCaptionClass;
        }
        e.appendChild(document.createTextNode(caption));
        this.element.appendChild(e);
    }
    return e;
};

/***********************************************************************
*  Panel Toggle Switch                                                 *
***********************************************************************/
function ToggleSwitch(parent, x, y, id, offImage, onImage) {
    /* Constructor for the toggle switch objects used within panels. x & y are
    the coordinates of the switch within its containing element; id is the DOM id */

    this.state = 0;                     // current switch state, 0=off
    this.topCaptionDiv = null;          // optional top caption element
    this.bottomCaptionDiv = null;       // optional bottom caption element
    this.offImage = offImage;           // image used for the off state
    this.onImage = onImage;             // image used for the on state

    // visible DOM element
    this.element = document.createElement("img");
    this.element.id = id;
    this.element.src = offImage;
    if (x !== null) {
        this.element.style.left = x.toString() + "px";
    }
    if (y !== null) {
        this.element.style.top = y.toString() + "px";
    }

    if (parent) {
        parent.appendChild(this.element);
    }
}

/**************************************/

ToggleSwitch.topCaptionClass = "toggleSwitchTopCaption";
ToggleSwitch.bottomCaptionClass = "toggleSwitchBottomCaption";

/**************************************/
ToggleSwitch.prototype.addEventListener = function addEventListener(eventName, handler, useCapture) {
    /* Sets an event handler whenever the image element is clicked */

    this.element.addEventListener(eventName, handler, useCapture);
};

/**************************************/
ToggleSwitch.prototype.set = function set(state) {
    /* Changes the visible state of the switch according to the low-order
    bit of "state" */
    var newState = state & 1;

    if (this.state ^ newState) {         // the state has changed
        this.state = newState;
        this.element.src = (newState ? this.onImage : this.offImage);
    }
};

/**************************************/
ToggleSwitch.prototype.flip = function flip() {
    /* Complements the visible state of the switch */
    var newState = this.state ^ 1;

    this.state = newState;
    this.element.src = (newState ? this.onImage : this.offImage);
};

/**************************************/
ToggleSwitch.prototype.setCaption = function setCaption(caption, atBottom) {
    /* Establishes an optional caption at the top or bottom of a single switch.
    Returns the caption element */
    var e = (atBottom ? this.bottomCaptionDiv : this.topCaptionDiv);

    if (e) {
        e.textContent = caption;
    } else {
        e = document.createElement("div");
        if (atBottom) {
            this.bottomCaptionDiv = e;
            e.className = ToggleSwitch.bottomCaptionClass;
        } else {
            this.topCaptionDiv = e;
            e.className = ToggleSwitch.topCaptionClass;
        }
        e.appendChild(document.createTextNode(caption));
        this.element.appendChild(e);
    }
    return e;
};

/***********************************************************************
*  Panel Three-way Toggle Switch                                       *
***********************************************************************/
function ThreeWaySwitch(parent, x, y, id, offImage, onImage1, onImage2) {
    /* Constructor for the three-way toggle switch objects used within panels.
    x & y are the coordinates of the switch within its containing element;
    id is the DOM id */

    this.state = 0;                     // current switch state, 0=off, 1=down, 2=up
    this.topCaptionDiv = null;          // optional top caption element
    this.bottomCaptionDiv = null;       // optional bottom caption element
    this.offImage = offImage;           // image used for the off state
    this.onImage1 = onImage1;           // image used for the lower on state
    this.onImage2 = onImage2;           // image used for the upper on state

    // visible DOM element
    this.element = document.createElement("img");
    this.element.id = id;
    this.element.src = offImage;
    if (x !== null) {
        this.element.style.left = x.toString() + "px";
    }
    if (y !== null) {
        this.element.style.top = y.toString() + "px";
    }

    if (parent) {
        parent.appendChild(this.element);
    }
}

/**************************************/

ThreeWaySwitch.topCaptionClass = "ToggleSwitchTopCaption";
ThreeWaySwitch.bottomCaptionClass = "ToggleSwitchBottomCaption";

/**************************************/
ThreeWaySwitch.prototype.addEventListener = function addEventListener(eventName, handler, useCapture) {
    /* Sets an event handler whenever the image element is clicked */

    this.element.addEventListener(eventName, handler, useCapture);
};

/**************************************/
ThreeWaySwitch.prototype.set = function set(state) {
    /* Changes the visible state of the switch according to the value
    of "state" */

    if (this.state != state) {          // the state has changed
        switch (state) {
        case 1:                         // down position
            this.state = 1;
            this.element.src = this.onImage1;
            break;
        case 2:                         // up position
            this.state = 2;
            this.element.src = this.onImage2;
            break;
        default:                        // middle position
            this.state = 0;
            this.element.src = this.offImage;
            break;
        } // switch state
    }
};

/**************************************/
ThreeWaySwitch.prototype.flip = function flip() {
    /* Increments the visible state of the switch */

    this.set(this.state+1);
};

/**************************************/
ThreeWaySwitch.prototype.setCaption = function setCaption(caption, atBottom) {
    /* Establishes an optional caption at the top or bottom of a single switch.
    Returns the caption element */
    var e = (atBottom ? this.bottomCaptionDiv : this.topCaptionDiv);

    if (e) {
        e.textContent = caption;
    } else {
        e = document.createElement("div");
        if (atBottom) {
            this.bottomCaptionDiv = e;
            e.className = ThreeWaySwitch.bottomCaptionClass;
        } else {
            this.topCaptionDiv = e;
            e.className = ThreeWaySwitch.topCaptionClass;
        }
        e.appendChild(document.createTextNode(caption));
        this.element.appendChild(e);
    }
    return e;
};

/***********************************************************************
*  Black Control Knob                                                  *
***********************************************************************/
function BlackControlKnob(parent, x, y, id, initial, positions) {
    /* Constructor for the black control knob objects used within panels. x & y are
    the coordinates of the knob within its containing element; id is the DOM id;
    initial is the 0-relative index indicating the default position of the switch;
    positions is an array indicating the angular position (in degrees, where 0
    is straight up) of each of the knob's positions */

    this.position = 0;                  // current knob position
    this.direction = 1;                 // rotate knob clockwise(1), counter-clockwise(-1)
    this.topCaptionDiv = null;          // optional top caption element
    this.bottomCaptionDiv = null;       // optional bottom caption element
    this.positions = positions;         // array of knob position angles

    // visible DOM element
    this.element = document.createElement("canvas");
    this.element.id = id;
    this.element.width = BlackControlKnob.size;
    this.element.height = BlackControlKnob.size;
    this.element.className = BlackControlKnob.className;
    if (x !== null) {
        this.element.style.left = x.toString() + "px";
    }
    if (y !== null) {
        this.element.style.top = y.toString() + "px";
    }

    if (parent) {
        parent.appendChild(this.element);
    }

    this.set(initial);                  // set to its initial position
}

/**************************************/

BlackControlKnob.topCaptionClass = "blackControlKnobTopCaption";
BlackControlKnob.bottomCaptionClass = "blackControlKnobBottomCaption";
BlackControlKnob.className = "blackControlKnob1";
BlackControlKnob.canvasColor = "transparent";
BlackControlKnob.size = 64;             // width/height in pixels

/**************************************/
BlackControlKnob.prototype.addEventListener = function addEventListener(eventName, handler, useCapture) {
    /* Sets an event handler whenever the canvas element is clicked */

    this.element.addEventListener(eventName, handler, useCapture);
};

/**************************************/
BlackControlKnob.prototype.set = function set(position) {
    /* Changes the visible state of the knob according to the position index */
    var dc = this.element.getContext("2d");
    var degrees = Math.PI/180;
    var fullCircle = 360*degrees;
    var halfSize = Math.floor(BlackControlKnob.size/2);
    var quarterSize = Math.floor(BlackControlKnob.size/4);
    var silverSkirt;

    if (position < 0) {
        this.position = 0;
        this.direction = 1;
    } else if (position < this.positions.length) {
        this.position = position;
    } else {
        this.position = this.positions.length-1;
        this.direction = -1;
    }

    dc.save();
    dc.translate(halfSize+0.5, halfSize+0.5);   // move origin to the center

    dc.fillStyle = BlackControlKnob.canvasColor;// fill in the panel background (aids antialiasing)
    dc.fillRect(-halfSize, -halfSize, BlackControlKnob.size, BlackControlKnob.size);

    silverSkirt = dc.createRadialGradient(0, 0, halfSize, 0, 0, quarterSize);
    silverSkirt.addColorStop(0.5, "#FFF");
    silverSkirt.addColorStop(1, "#CCC");

    dc.beginPath();                             // draw the outer skirt of the knob
    dc.arc(0, 0, halfSize-1, 0, fullCircle, false);
    dc.fillStyle = silverSkirt;
    dc.fill();

    dc.beginPath();                             // draw the central knob
    dc.arc(0, 0, quarterSize, 0, fullCircle, false);
    dc.fillStyle = "#000";
    dc.fill();

    dc.beginPath();                             // draw the inset on top of the knob
    dc.arc(0, 0, quarterSize-4, 0, fullCircle, false);
    dc.fillStyle = "#333";
    dc.fill();

    dc.save();                                  // draw the knob indicator
    dc.rotate(this.positions[this.position]*degrees);
    dc.beginPath();
    dc.moveTo(0, 1-halfSize);
    dc.lineTo(-quarterSize/4, -halfSize+quarterSize/2);
    dc.lineTo(quarterSize/4, -halfSize+quarterSize/2);
    dc.closePath();
    dc.fillStyle = "#000";
    dc.fill();
    dc.restore();                               // undo the rotation
    dc.restore();                               // undo the translation
};

/**************************************/
BlackControlKnob.prototype.step = function step() {
    /* Steps the knob to its next position. If it is at the last position, steps it
    to the first position */
    var position = this.position+this.direction;

    if (position < 0) {
        this.direction = 1;
        this.set(1);
    } else if (position < this.positions.length) {
        this.set(position);
    } else {
        this.direction = -1;
        this.set(this.positions.length-2);
    }
};

/**************************************/
BlackControlKnob.prototype.setCaption = function setCaption(caption, atBottom) {
    /* Establishes an optional caption at the top or bottom of a single switch.
    Returns the caption element */
    var e = (atBottom ? this.bottomCaptionDiv : this.topCaptionDiv);

    if (e) {
        e.textContent = caption;
    } else {
        e = document.createElement("div");
        if (atBottom) {
            this.bottomCaptionDiv = e;
            e.className = BlackControlKnob.bottomCaptionClass;
        } else {
            this.topCaptionDiv = e;
            e.className = BlackControlKnob.topCaptionClass;
        }
        e.appendChild(document.createTextNode(caption));
        this.element.appendChild(e);
    }
    return e;
};

/***********************************************************************
*  Panel Register                                                      *
***********************************************************************/
function PanelRegister(parent, bits, rows, idPrefix, caption) {
    /* Constructor for the register objects used within panels:
        parent:the DOM element (usually a <div>) within which the register will be built
        bits:   number of bits in register
        rows:   number of rows used to display the bit lamps
        caption:optional caption displayed at the bottom of the register
    */
    var cols = Math.floor((bits+rows-1)/rows);
    var b;
    var cx;
    var cy;
    var e;

    this.element = parent;              // containing element for the panel
    this.bits = bits;                   // number of bits in the register
    this.caption = caption || "";       // panel caption
    this.lastValue = 0;                 // prior register value
    this.lamps = new Array(bits);       // bit lamps

    cx = cols*PanelRegister.hSpacing + PanelRegister.hOffset;
    for (b=0; b<bits; b++) {
        if (b%rows == 0) {
            cy = (rows-1)*PanelRegister.vSpacing + PanelRegister.vOffset;
            cx -= PanelRegister.hSpacing;
        } else {
            cy -= PanelRegister.vSpacing;
        }

        this.lamps[b] = new NeonLamp(parent, cx, cy, idPrefix + b.toString());
    }

    this.captionDiv = document.createElement("div");
    this.captionDiv.className = PanelRegister.captionClass;
    if (caption) {
        e = document.createElement("span");
        e.className = PanelRegister.captionSpanClass;
        e.appendChild(document.createTextNode(caption));
        this.captionDiv.appendChild(e);
    }
    parent.appendChild(this.captionDiv);
}

/**************************************/

PanelRegister.hSpacing = 32;            // horizontal lamp spacing, pixels
PanelRegister.hOffset = 14;             // horizontal lamp offset within container
PanelRegister.vSpacing = 28;            // vertical lamp spacing, pixels
PanelRegister.vOffset = 14;             // vertical lamp offset within container
PanelRegister.lampDiameter = 20;        // lamp outer diameter, pixels
PanelRegister.panelClass = "panelRegister";
PanelRegister.captionClass = "panelRegCaption";
PanelRegister.captionSpanClass = "panelRegSpan";
PanelRegister.boxCaptionClass = "boxCaption";

/**************************************/
PanelRegister.prototype.xCoord = function xCoord(col) {
    /* Returns the horizontal lamp coordinate in pixels */

    return ((col-1)*PanelRegister.hSpacing + PanelRegister.hOffset);
};

/**************************************/
PanelRegister.prototype.yCoord = function yCoord(row) {
    /* Returns the vertical lamp coordinate in pixels */

    return ((row-1)*PanelRegister.vSpacing + PanelRegister.vOffset);
};

/**************************************/
PanelRegister.prototype.panelWidth = function panelWidth(cols) {
    /* Returns the width of a register panel in pixels */

    return (cols-1)*PanelRegister.hSpacing + PanelRegister.hOffset*2 + PanelRegister.lampDiameter;
};

/**************************************/
PanelRegister.prototype.panelHeight = function panelHeight(rows) {
    /* Returns the height of a register panel in pixels */

    return (rows-1)*PanelRegister.vSpacing + PanelRegister.vOffset*2 + PanelRegister.lampDiameter;
};

/**************************************/
PanelRegister.prototype.drawBox = function drawBox(col, lamps, rows, leftStyle, rightStyle) {
    /* Creates a box centered around a specified group of lamps in a register.
    leftStyle and rightStyle specify the left and right borders of the box using
    standard CSS border syntax. Returns the box element */
    var box = document.createElement("div");
    var rightBias = (rightStyle ? 1 : 0);

    box.style.position = "absolute";
    box.style.left = (this.xCoord(col) - (PanelRegister.hSpacing-PanelRegister.lampDiameter)/2).toString() + "px";
    box.style.width = (PanelRegister.hSpacing*lamps - rightBias).toString() + "px";
    box.style.top = this.yCoord(1).toString() + "px";
    box.style.height = (this.yCoord(rows) - this.yCoord(1) + PanelRegister.lampDiameter).toString() + "px";
    box.style.borderLeft = leftStyle;
    box.style.borderRight = rightStyle;
    box.appendChild(document.createTextNode("\xA0"));
    this.element.appendChild(box);
    return box;
};

/**************************************/
PanelRegister.prototype.setBoxCaption = function setBoxCaption(box, caption) {
    /* Establishes an optional caption for register lamp box.
    Returns the caption element */
    var e = box.captionDiv;

    if (e) {
        e.textContent = caption;
    } else {
        box.captionDiv = e = document.createElement("div");
        e.className = PanelRegister.boxCaptionClass;
        e.appendChild(document.createTextNode(caption));
        box.appendChild(e);
    }
    return e;
};

/**************************************/
PanelRegister.prototype.update = function update(value) {
    /* Update the register lamps from the value of the parameter. This routine
    compares the value of the register that was previously updated against the new
    one in an attempt to minimize the number of lamp flips that need to be done */
    var bitBase = 0;
    var bitNr;
    var lastMask;
    var lastValue = this.lastValue;
    var thisMask;
    var thisValue = Math.floor(Math.abs(value)) % 0x100000000000;

    if (thisValue != lastValue) {
        this.lastValue = thisValue;     // save it for next time
        do {
            // Loop through the masks 30 bits at a time so we can use Javascript bit ops
            bitNr = bitBase;
            lastMask = lastValue % 0x40000000;              // get the low-order 30 bits
            lastValue = (lastValue-lastMask)/0x40000000;    // shift the value right 30 bits
            thisMask = thisValue % 0x40000000;              // ditto for the second value
            thisValue = (thisValue-thisMask)/0x40000000;

            lastMask ^= thisMask;       // determine which bits have changed
            while (lastMask) {
                if (lastMask & 0x01) {
                    this.lamps[bitNr].set(thisMask & 0x01);
                }
                if (++bitNr <= this.bits) {
                    lastMask >>>= 1;
                    thisMask >>>= 1;
                } else {
                    thisValue = thisMask = 0;
                    lastValue = lastMask = 0;
                    break;              // out of inner while loop
                }
            }

            bitBase += 30;
        } while (thisValue || lastValue);
    }
};

/**************************************/
PanelRegister.prototype.updateLampGlow = function updateLampGlow(glow) {
    /* Update the register lamps from the bitwise intensity values in "glow" */
    var bitNr;

    for (bitNr=this.bits-1; bitNr>=0; --bitNr) {
        this.lamps[bitNr].set(glow[bitNr]);
    }
};

redpajama_set_name: RedPajamaGithub


text:
Kedalemankulon is een bestuurslaag in het regentschap Kebumen van de provincie Midden-Java, Indonesië. Kedalemankulon telt 1513 inwoners (volkstelling 2010).

Plaats in Midden-Java

redpajama_set_name: RedPajamaWikipedia


This report explores the conservation activities of 123 local governments in BC.
This report illustrates the economic impacts of the initial investments for heritage conservation made by local and regional governments and highlights six case studies that reflect these impacts.
This report provides information collected from 11 funders that manage grant programs specifically for heritage projects and programs. The funders responded to a survey about their 2017 funding activities, the value of their grants, and the total project costs included in grant applications.
The results demonstrate the importance of heritage-related activities to the public, government and stakeholder groups, and help us to advocate for expanded heritage conservation granting activities and programs.
Download the Survey of Funders 2017.


text:
HomeSportBayern Munich Beat PSG To Win UEFA Champions League
Bayern Munich Beat PSG To Win UEFA Champions League
Bayern Munich players celebrate as captain Manuel Neuer lifts the Champions League trophy [Manu Fernandez/Pool
German giants Bayern Munich have won the UEFA Champions League for the sixth time in the club's history after beating French side Paris Saint-Germain 1-0 at the final in Portugal's capital, Lisbon.
A goal by French winger Kingsley Coman was enough for the Munich side on Sunday to dash the Parisians' dreams of winning for the first time the top club competition of European football.
The Paris-born Coman, a former Paris Saint-Germain player, nodded in at the back post from Joshua Kimmich's cross in the 59th minute.
The final was played behind closed doors due to the coronavirus pandemic.
Bayern's victory at the Estadio da Luz in Lisbon ensures a repeat of their 2013 treble, with coach Hansi Flick matching Jupp Heynckes in securing the continental crown, Bundesliga and German Cup titles in the coronavirus-extended 2019/20 season.
Paris Saint-Germain enjoyed their best-ever Champions League campaign by reaching the final for the first time.

redpajama_set_name: RedPajamaCommonCrawl


We are wrapping up our #20Time Projects in my English 10 classes as the school year comes to a close. Right now, students are working on their own to complete their work and reflect. I've started to reflect, too, and will be writing about my take-aways from #20Time and use this space to help plan for next year in Post #3. Before all of that, you might want to read Post #1 here.
#20Time is highly rewarding and a lot of fun. I love the idea of student-driven, self-directed work. However, it's a lot of planning and organization for the teacher. Throughout this project, my students complete 5+ blog posts, a formal proposal, elevator pitch, annotated bibliography, self-assessment and reflection, and the final project/presentation. The projects are fun, creative, and open to student-passion. The process, however, has more structure and thought into its planning. Progress and product are equally important for my class. To make it more complicated, students often needed to revise work, needed more time, or were absent. When one project has a billion parts and multiple submissions, I was stumped at how to manage it all.
Google Forms was the answer, as it usually is for me.
As I wrote about last time, I wanted to keep our #20Time work separate from Google Classroom. Keep the formal and summative in Classroom but the #20Time belongs to the world. We needed to publish for an authentic and public audience. From this, I developed one of my few rules of #20Time: All #20Time work is public to the world.
As always, find all of our tasks and notes here.
To manage my students' work, I started with a fairly simple Google Form. Since all of the work is public anyway, I'll keep my students' blogs and names on the results; find the form here.
The next question was what to do with the results. The end product can be found at tinyurl.com/schoen20time. Here's how I got from the basic form results sheet to that polished, presentable, and color-coded site. Beware, we're about to get geeky with Forms and Sheets.
The link above is the finished and published product. You can find a view-only workbook that models the process here. I left out student grades and feedback so to see the color coding, check the tinyurl link. To see the process and formulas in action, though, this worksheet is probably helpful.
Sort. In my form responses workbook, I created a new worksheet. I copied over the same headers and then added a sort formula to first sort by class period and then by last name. This ensures that even when new results or late blogs are submitted to the form, they are still automatically sorted. Something like =SORT(Form Responses 1!A2:I,1,True,2,True) should work based on my form.
Roster Check. I quickly realized how easy it is to forget which students hadn't submitted a form if the results only showed submissions. How do I keep on top of the students who need the extra push? I realized I had a list of student names already, so with a VLOOKUP formula, I could look up their information from the sorted spreadsheet. I copied in a new sheet titled Rosters, which listed my students' names and class periods. Then, I programmed another new sheet to look up those students names and provide their work. For example, if students A, B, and D submitted the form, the formula would list their work. For student C who left it blank, though, the row would remain empty. The formula looked something like =VLOOKUP($C4,Sort!$C$2:$G$75,2,false). This sort of made the need for the Sort described above unnecessary since my roster was already in ABC order, but I didn't realize this at the time.
First, I shaded every other row with =MOD(ROW(A3),2) < 1 in condition formatting and set the background shade. This just made it easy to read.
Then, I added conditions to key words. If I commented that a post was "Read," the text turned blue. If there were issues, the text bolded and changed color: "Sharing issues" became red, "Missing" is black, and "Please revise" orange. This gave targeted feedback very, very quickly.
Similarly, I color coded the cells with students' names to match these comments. Now, no one could miss an issue with their work if they checked the sheet.
Presentation. I wanted this sheet to work for me and for others. For me, I froze the header rows and name columns (View --> Freeze). This let me scroll around and find work very easily. For my public link, I published the master sheet to the web (File --> Publish to the Web), which allowed me to present the sheet to look like a web site. And finally, it was ready to share.
This whole process took a few weeks to iron out but I liked it. I thought it was fairly streamlined and effective for my work. Next time, I'll write about how I might change things for next year, and I'll reflect on some of the successes and challenges as my #20Time Projects start to come to life.
Please leave your thoughts, messages, and feedback below. If you've managed to read to the bitter end, I thank you. I know this was a long post but the workflow really made things easy and transparent--feel free to beg, borrow, and steal away.


In 1620 an English ship Referred to as the Mayflower landed on the shores inhabited by the Pokanoket, and it was once Squanto who welcomed the newcomers and taught them how to live to tell the tale. When a good harvest was once gathered, the people feasted together–a tradition that continues almost four hundred years later.
Most American children know the story of the Pilgrims and the first Thanksgiving, but the Native American side of the tale is far less familiar. Joseph Bruchac, a prolific and award-winning writer of Native American descent (The First Strawberries, A Boy Referred to as Slow) describes life in 1620 for a man who was once destined to save the Pilgrims while he was once losing his circle of relatives and tribe. Told from Squanto's point of view, this historically accurate and detailed story brings to life probably the most important moments in The united states's past. Demonstrating how much his people (the Patuxet, the People of the Falls) value honor, Squanto befriends English traders, even after being kidnapped and taken to Spain. After much hard work, Squanto manages to sail back to his homeland, where, despite his discovery that many of his people have died from disease brought by white people, he acts as envoy between the English and his own people, and helps the pilgrims live to tell the tale in their new world.


text:
Q: HTTP Error 503. The service is unavailable under simple ASP.NET 4.0 web site Something strange happened on my local laptop: my web site that worked locally for a long isn't launched...
Trying to localize the problem I've created a simple web site with 'index.html' file only. It works fine under ASP.NET 2.0, but when I switched App Pool to use 4.0 - it stopped to work.
When I open web site in browser it shows the following error:

Service Unavailable
HTTP Error 503. The service is unavailable.

And causes App pool to stop work also... In the system event log in "applications" section I have:

The worker process failed to initialize correctly and therefore could not be started.  The data is the error.

Please advise. Can't find anything related in Google... :(
P.S. I have VS2010, Windows Vista x64, last updates installed, VS SP1 is also installed...

A: I had to start the application pool that was set for my website and was automatically stopped on some error. (IIS (7.5 in my case)->Application Pools->Start stopped application pool.)

A: I've reinstalled .NET 64 - that helped.
P.S.
It seems like either some files in "C:/windows/Microsoft.net/Framework64/v4.0.30319/" folder or I removed them myself (VS sometimes complains on files in "ASP.NET Temporary files" and their deletion helps)... Probably I didn't pay attention that those folder not a temporary...
P.P.S.
In this case, why VS complained on files in "C:/windows/Microsoft.net/Framework64/v4.0.30319/" folder... ok, now it's hard to say.

A: Sounds like you forgot to enable .Net 4 extension on the IIS. Try finding and enabling it in ISAPI and CGI Restrictions
http://blogs.msdn.com/b/rakkimk/archive/2007/08/17/iis7-where-is-the-web-services-extensions-option-which-was-there-in-iis6.aspx
Based on the comment it might be that part of the framework was removed and in that case it might be wise to reinstall Framework 4 by first cleaning it up. Try this blog post which got a reference to a tool that automates cleaning up proccess http://blogs.msdn.com/b/astebner/archive/2008/08/28/8904493.aspx

A: There are subtle changes between ASP.NET 2.0 and 4.0 regarding application start up. For instance, you may not access the HttpContext object during the Application_Start event in ASP.NET 4.0. Do you have any code that might hide an exception being thrown because of this?
There are a few problems that may cause the AppPool to stop. One which I've run into myself is that any unhandled exception on a thread other than the request worker thread will cause the AppPool to eventually stop. This is not an immediate problem but eventually it will stop. The ASP.NET runtime keeps track on how frequently your app is failing and if it breaches that threshold the AppPool is stopped, taking down with it, any applications sharing that pool. A StackOverflowException or OutOfMemoryException will eventually have the same effect, these are critical errors and shouldn't be happening in your everyday production code.
I would review the changes between ASP.NET 2.0 and 4.0 and look for unhandled exceptions. You can also change the way Visual Studio handles exceptions (check under Debug > Exceptions) and break when they are thrown regardless if they are handled or not, this is a quick but very verbose way of finding any exceptions.

A: I'd recommend checking the security permissions of the folder used as the site's root. The launch of the worker process is probably failing because it can't read web.config in this folder.
If you're creating a new application in the IIS manager, by default it will create a new Application Pool with the same name. The problem is that this pool runs under a new identity named IIS APPPOOL\yourSiteName (in the Application Pools page this is listed generically as ApplicationPoolIdentity).
This identity does not exist until the pool is created, so the folder is not currently granting read access, and then the worker process fails since it has no access.
If you wish to use this identity you can use the Edit Permissions item on the site's context menu and access the Security tab, edit the folder's Security item directly via Explorer, or use tools like icacls.exe from the command line (recommended for repeatability).
You can also change the pool's identity to be Network Service or a specific user. I would strongly discourage the use of Local System as it grants too many permissions, and Local Service has other restrictions.
NOTE: If you are going to add the ApplicationPoolIdentity in the Security dialog, the IIS APPPOOL accounts don't appear if you use the Advanced/Find options. You have to manually type the whole "IIS APPPOOL\yourSiteName" string, then click the Check Names button to validate - if it is valid the dialog replaces your text with just yourAppName, underlined.

A: Go to IIS and change the Application Pool to DefaultAppPool for your web application.

A: I had to update my network credentials and havn't updated the "PhysicalPathCredential" for the application under IIS. That fixed.

A: my only problem was the Application Pool, which showed the stopped icon.
I pointed my Application to another AppPool and it's back working. Hope it helps.

A: I think in this case if you go to application pools under ur IIS. Look for the application pool on which you are running your website. I am sure it is stopped so just restart it and you will be good to go..

redpajama_set_name: RedPajamaStackExchange


text:
Geraldine kang
Neither In Nor Out
Live-in (Mattress provided)
Aesthetic Screening
Left-Right
By unit of measurement
2 Parts 2
This way forward
Of Two Bedrooms
By way of rhythms: Kenneth Tay in conversation with Geraldine Kang
As quietly as rhythms go
Under the guise of surface
This city by any other name (Would smell just as white)
SingCat/Nau Coclea Residency
Black As Waves, Half As Light
Select invited projects
Till death and desire (2015)
Elliptical frame, white zentai suit, dimensions 70 x 40cm, part of the Zentai Art Festival 2014
After performing for the camera in a zentai suit, I realized that often, the suit has a more profound impact for its wearer than for the attendant audience. Rather than rehashing the figurative spectacle or fetish image that zentai is so often associated with, I decided to explore the material capabilities of the suit, using its translucency and elasticity to call upon the internal meditative, erotic and abstract energies of the zentai experience.
A Rude Mass (2012)
In collaboration with Joseph Nair, Tok Wei Yuan and Terry Wee for Lit Up 2012
Internal scaffolding, paper pulp, glue, spray paint, xerox transfer images, dimensions 2 x 3 x 1.5m
'…the stone, in shape, is a rude mass.' was how John Crawfurd, the second British Resident of Singapore described what is known today as The Singapore Stone.
A large sandstone monolith inscribed with 50 lines in an ancient, obsolete language was found at the mouth of the Singapore River in 1820. Accounts from the period recall the stone as being claimed by each ethnic group that lived in Singapore in that period, for its script resembled their own. It was destroyed with explosives in 1843 to widen the river mouth in order to better facilitate commerce on the Singapore River. The origin of the text and its content still remain unknown, and the only surviving fragment of the stone is on display at the National Museum of Singapore's permanent collection.
A Rude Mass is a site-specific re-imagination of The Singapore Stone for the impending return of Telok Ayer Performing Arts Centre (TAPAC) to the government. It is constructed in an approximation of the original stone's recorded size and scale with contemporary materials and touches. A new unknown text has been created in a possibly familiar script that consists of repurposed sourced photographs, photographs from our personal archives and new photographs designed and shot for our purpose. Too large to be moved, the work is expected to be demolished with TAPAC when the building is cleared to make way for new development.
Thank You to: Godwin Koay for the awesome spray paint job, Wong Jingwei for getting your hands dirty and rallying labour support as well as Judith, Clarence, Mr. Black, Pei Ling, Isabella, Zieg for pulping with us!


Back in high school, I was on the cross country team. We would run 'interval' trainings, doing a specified pace over a short course and (after a rest) repeating it, to exhaustion. The goal was to hit the exact same time – to the second – each round. At first, it was easy to hit the mark. The challenge was slowing down to get the timing right. In the middle, it became a game hitting the second on the nose. By the end, it was about pushing tired legs and burning lungs hard to get there without going over. We would run in groups with other runners bunched by speed. In my group, I was always the pacer. I had an innate sense of how fast we were going, and always had us in within a second or so of our goal. I took quite a bit of pride in my ability to hit these arbitrary marks, set by coaches with championship dreams dancing across their vision. In a way, I had to take pride in my good timing. I made last place in every single race I ran the first two years.
I only wish I ran, anymore. I make plans to start again, and my shoes sit perpetually by the front door. It is cold here, and starting a running program from scratch when my eyelashes freeze together if I am outside for more than five minutes is a little more than I am willing to deal with at this point. I think my sense of pacing has gone too.
I am not proud of this, and not just because my generation's demand for instant gratification is grounds for much scorn from our elders. We want what we want now, and fast, and damned if that means there won't be any for later. I try to pretend I am above all this, but I have been bitten by the gratification bug and at this point the wound is rather infected.
Two things I've done recently clued me into how far I have strayed into this way of thinking.
I examine the instructions and picture for Mountain Pose.
I stand up straight with my feet in the appropriate position.
I walk back to the book for the next pose.
I don't get much out of it.
In class, we spend five minutes getting into "Mountain Pose" (which involves a lot more than standing up with your feet apart, I have learned) and return to it several times over the course of evening. We spend lots of time adjusting hands and spines and chins. When I bring these things home I find I am still rushing. It is hard for me, straddling the kitchen rug, to hold a pose for five breaths, much harder to move between poses with the slow deliberation forced on me by the careful pacing of the class. I want to do the thing, have it done and move one. The thing is, I enjoy and get more out of the yoga class than I have yet to manage in the cabin.
The second practicum in pacing has been through pottery class I am taking at a studio in North Pole. I quickly learned that rushing through my hand building projects left me with uneven walls and cracked rims, and more pointedly that not sitting down to think through a multi-stage build would invariably end with a botched creation. Thankfully, glazes are forgiving, but those early lessons were driven home further with my first (comical) attempts to throw. Working with a wheel, I found that speed is the enemy. I discovered through several rapid-fire disasters that trying to shape a bowl too quickly leads to structural weakness and botched form. Even if one slows down enough to start a good form, spinning the wheel too fast, especially once the bowl begins to take shape, flings the walls out with centrifugal force, thinning and weakening them beyond saving. I went through several pounds clay before I had anything resembling a vessel to show for it.
From yoga and clay I am taking very tangible lessons on process. Yoga is a lifelong discipline, with even its most dedicated and renown practitioners constantly honing their own skills. Pottery, being of the arts, is a skill that begins with a fist-sized pinch pot and can build through a lifetime of practice, experimentation and literally hundreds of tons of clay. And clay is a most forgiving medium.
Practices from one part of life bleed into others. I hope that fostering these things that require slowness and patience might help me where I rush and fret and demand. I need to start to walk again, before I try to run. But for now, I'll be on the kitchen rug, learning to stand with my feet apart, and breathe.
I spend a lot of long nights alone here, when Peter works second shift. They are especially long now, as he leaves at three and the sun goes down about twenty minutes later. I love our cabin, now that it has turned into a home with its perpetual sink full of dishes, scatter of boots at the door, stacks of junk mail and half-filled shopping lists and little whorls of kibble that have escaped the dog bowl and been batted across the floor by the kitten. The ice that forms on the inside of the windows and sneaks in under the door and around the hinges actually makes me feel cozier. It can't get to where I am snuggled with my furnace dog and warm motor-purr kitten on the couch or up in the much warmer loft.
But sometimes those endless cozy nights take a turn. Nouwen wrote eloquently about the dark side of solitude in The Way Of the Heart, and I think am finally begining to understand where he wrote from. The quiet and dark and lack of human companionship drive my mind to places than I'd normally choose not to go. I get caught up in the little internal cycles of mental destruction that I'm still working up the strength and discipline to break out of on my own.
Last night was one of those nights. I had satisfied myself with leftovers (jerk veggie amalgam over rice with atomic yogurt tahini, I *love* being a vegetarian,) I had written e-mails, done some work … and managed to squeeze in several hours worth of procrastination bouncing around on the internet. This is usually where things tip downwards. My mind drains of autonomous thought, my body hunches into itself and my back begins a growing ache of protest. The glow of well-being from an earlier mini-yoga practice with Peter before he left for work had long since been worn away by flickering screen and hunched shoulders. I finally tried to force myself to write, hoping that would break the deepening spiral, but found I couldn't even manage a sentence. I felt like that horrid little deadline icon that keeps popping up on writers' blogs and turns my stomach even though I can never turn away from its bloody destruction.
It was almost midnight. I took a deep breath. In a moment of awareness, I heard the sled-dogs down the road begin to howl. There was a timbre to it that was unfamiliar and in a way more primal than their usual dinner-time clamor. I experienced a rare intuitive click, understanding suddenly that they were howling at the Aurora. I stumbled downstairs and into several more layers, zipping fleeces, wrapping scarves, adding hoods to hats, cramming already cold feet into wet snow boots. I walked out to the road, and looked back towards the cabin. There, right above the ridge of our roof was a stray shimmer of bright green, folding down towards the trees and up again, slowly fading back into the sky and revealing the explosion of stars behind.
The rest of the band was on the northern horizon. It was green, but more of a glow than a dance, no sharp edges, no shimers. After the overhead band faded out I watched this bubble of light. It looked a bit like the glow that cities put off from a distance in the night, albeit much greener. I thought about what lay under that vast pulsing blanket of light. North of us there are only scattered cabins, mostly just running up the south faceing side of the next hill. Past that, a few homesteads. The end of the pavement. A handful of tiny roadless native villages scattered over thousands of square miles of snow and ice covered wilderness. Follow Polaris for five hundred crow miles, and there is the ice ocean of the Arctic, smashed up against the shore and stretching on into the infinity of north.
I was suddenly aware of where we are. It was a moment of presence that I badly needed, with everything that has been fighting for space in my head. We sleep north of the northernmost city on earth, in a forest of spruce and birch on a bed of ground that has been frozen for hundreds of thousands of years. We live and breathe in a log cabin covered in snow, whose lights warm the windows through the lengthening nights towards solstice, where a kitten is watching me through the glass, where my sleeping hound chases ghosts of deer through her dreamworld. We live in a place where cloudless nights are filled with an unfathomable vision of stars.
I shivered on the road, watching the dome of light fade into a thin river of streaming green inches above the trees. I heard the phone ring, Peter on his way home. I forget sometimes, too often in fact, how long these things were hoped for, and how little faith I had that they would ever come into my life.
I don't have good Aurora photographs yet (hoping for a tripod for Christmas) but found this a couple of days ago. It's mellower than some of the crazy videos out there, but much more like what we see up here on good nights ... so far.
After you watch the lights, go back and watch the big dipper slide up into the sky.
I first read Jonathan Kozol's book Amazing Grace in college. I don't remember the context - if it was a class assignment, something for a student organization or simply a recommendation from an encouraging professor. I do remember the book. I read it over some break or other, and my sister Sarah quickly started trying to take the book away and hide it from me. "It puts you in a bad mood," she said. "You aren't any fun, then."
It's true. Even though it is the most positive of Kozol's books (I have read several, since then) the point of his books - nonfiction, a mix of human stories and the sociological phenomenon behind those lives - is to point out how we have failed the poor, especially poor children, as a nation of wealth and plenty. This does not make for light summer beach reading. The anecdotes are pointed, heart-breaking and often accusatory. And as a college student needing desperately for a cause to latch onto, for some specific purpose, Amazing Grace was like a manifesto for me. Go to the Poor!!
That's not exactly where I've landed.
Yet I jumped at the chance to hear Kozol speak at UAF last night, mostly because he had been such a mighty figure for me eight years ago. He was funny and personable. Self-effacing yet obviously incredibly intelligent. He rambled around his topic like a disheveled professor, and looked the part in his too-short suit pants and tennis shoes. He made some well-deserved jabs at Bush's lamentable education policy. He told his stories well, both sweet funny stories and his requisite heart-rending examples of how unjustly we are treating the children born poor in our country.
I hardly noticed that it was after nine o'clock when the packed auditorium broke for cookies and punch, and an informal question-and-answer session (that I did not stay for.) It was a strange experience, listening to a man whom I hold in such high regard, whom I idolized for so long, whose work I still hope, in the recesses of my mind, to emulate if I ever come into my own as a writer. Yet a man who's mission no longer holds me in its sway. I was not inspired by his speech. I was amused by it, and it made me angry and frustrated and sad. That was it's purpose, after all. But I did not come away singing a war hymn, planning to move a ghetto and make a safe place of learning and peace for other people's children. I came away exactly as I came in. Utterly unsure which path to choose for myself. Vaguely guilty for leaving behind those early 20's passions and ideals, tempered by a realization of how utterly unrealistic those ideals were, yet still worried by the thought that I've given something up. Something precious and real.
I found myself raising my eyebrows at the standing ovation as Kozol ended his well-polished rambling rant without proposing much in the way of a solution to the monster of institutional injustice. Perhaps because there is none? I want to believe otherwise, but the hour and the wine and all the things I've read and seen and done since reading Amazing Grace lead me away from that hope. Is that why I'm up here, looking after my own dreams instead?
I am not a huge believer in the power of Resolutions. I make them every New Year, again around Ash Wednesday, again on my birthday, and usually I throw in a few in the fall for good measure. There are lists of resolutions I make during Statistics class scrawled in my notebook next to the illegible symbols and formulae that I am supposed to know how to use. Most of the lists could be carbon copies of one another. For all my resolve to tie on those running shoes while scribbling in the back row of a math class, they are still collecting dust by the door.
I have never been to a yoga class. I have never seen anyone actually *doing* yoga. I don't know where it comes from, exactly, or what all the different kinds of Yoga are, or why there are so many, or if they all get along or not. But from the bits and pieces I've picked up on, it seems like a good thing overall. You move, you stretch, you breathe. Your heart rate gets a little elevated. You do it in a room full of people who you hope are more enlightened than you are - in as much as they are focused on their own movement and not your wobbling pigeon toes.
Tuesday, I saw a flier - one of the many Yoga fliers often lost in the blanket of for-sale, for-rent, for-free paper on the wall of Alaska Coffee Roasters - that Interior Yoga was starting a new class cycle. This week. The only class that fit my schedule was the next night. Tonight.
Some things are best done without thinking. I have overthought Yoga in the past, trying to research styles, figure out what kind of class I need, reading artciles about picking out instructors. Yet Take A Yoga Class kept ending up on my list, year after year. Lots of things in my life are like that - too much thinking and plotting and planning, not enough being and doing and walking through the door.
So after dropping Peter off at work, I drove over to the brand new Interior Yoga facility and tromped through the snow and inside. There was quite a crowd at the door, peeling off layers and depositing dripping snow boots to the corner. The class was very full and the instructor was busy directing people to the bathroom, the boiler room (to change) and the mats. I was pretty intimidated by the shuffle and banter, but the instructor was sweet and encouraging to my deer-in-the-headlights inqiry about what to do, and I quickly settled near the back on my little green mat.
After class, while rolling up my mat and lining up to pay for the session, I got into a conversation with the teacher and another student. One of them is in the middle of getting certified to teach, the other just came back from her first three years teaching - in the bush. We stood around and chatted long after the building had cleared out. I think it was the first conversation I've had with women my age since we got here in August. That was nearly as refreshing as the Yoga.