Source code for lcc.stars_processing.systematic_search.stars_searcher
import collections
import os
from warnings import warn
import warnings
import pandas as pd
from lcc.data_manager.status_resolver import StatusResolver
from lcc.db_tier.stars_provider import StarsProvider
from lcc.entities.exceptions import QueryInputError, InvalidFilesPath
from lcc.utils.helpers import progressbar
from lcc.utils.stars import saveStars
[docs]class StarsSearcher():
'''
The class manages systematic searching in databases. It also can be used
as base class for other star searchers.
Attributes
----------
stars_filter : FilteringManager object
Filter which is prepared filter star objects
save_path : str
Path from "run" module to the folder where found
light curves will be saved
stat_file_path : str
Status file name
save_lim : int
Number of searched objects after which status file is saved
obth_method : str
Name of connector class
save_coords : bool
Save params space coordinates of inspected stars
status : pandas.DataFrame
Status table about results of queries
'''
DEF_save_lim = 50
DEF_unfound_lim = 150
def __init__(self, stars_filters, save_path=".", stat_file_path=None,
save_lim=None, unfound_lim=None, obth_method=None,
save_coords=None):
'''
Parameters
----------
stars_filters : lists
Stars filters
save_path : str
Path from "run" module to the folder where found
light curves will be saved
stat_file_path : str
Status file name
save_lim : int
Number of searched objects after which status file is saved
obth_method : str
Name of connector class
save_coords : bool
Save params space coordinates of inspected stars
'''
if not save_lim:
save_lim = self.DEF_save_lim
if not unfound_lim:
unfound_lim = self.DEF_unfound_lim
if not obth_method:
raise QueryInputError(
"Database for searching need to be specified.")
self.save_path = save_path
self.stat_file_path = stat_file_path
self.obth_method = obth_method
self.save_lim = save_lim
self.unfound_lim = unfound_lim
self.stars_filters = stars_filters
self.not_uploaded = []
self.passed_stars = []
if save_coords:
self.que_coords = None
self.save_coords = save_coords
self.status = pd.DataFrame()
[docs] def filterStar(self, star, *args, **kwargs):
'''
This method filter given star.
In case of match method "matchOccured" will be performed
Parameters
----------
stars : `Star` instance
Star to filter
Returns
-------
bool
If star passed thru filtering
'''
for star_filt in self.stars_filters:
result = star_filt.filterStars([star])
if not result:
break
if not self.stars_filters or len(result) == 1:
self.matchOccured(star)
return True
else:
return False
[docs] def matchOccured(self, star, *args, **kwargs):
'''
What to do with star which passed thru filtering
Parameters
----------
star : `Star` instance
Star object which will be saved as fits
Returns
-------
None
'''
saveStars([star], self.save_path)[0]
self.passed_stars.append(star)
[docs] def failProcedure(self, query, err=""):
'''
What to do if a fail occurs
Parameters
----------
query : optional
Query informations
err : str
Error message
Returns
-------
None
'''
warnings.warn("Error occurred during filtering: %s" % err)
[docs] def statusFile(self, query, status, delimiter="\t"):
'''
This method generates status file for overall query in certain db.
Every queried star will be noted.
Parameters
----------
query : dict
Query informations
status : dict
Information whether queried star was found, filtered
and passed thru filtering
Returns
-------
None
'''
data = [query.pop("name")] + query.values() + status.values()
columns = ["name"] + query.keys() + status.keys()
this_status = pd.DataFrame(
[data], columns=columns, index=[len(self.status)])
self.status = self.status.append(this_status)
if self.stat_file_path:
self.status.to_csv(self.stat_file_path, index=False)
[docs] def queryStars(self, queries):
'''
Query db according to list of queries. Stars passed thru filter
are managed by `matchOccured` method.
Parameters
----------
queries : list, iterable
List of dictionaries of queries for certain db
Returns
-------
None
'''
stars_num = 0
passed_num = 0
all_unfound = 0
unfound_counter = 0
for query in progressbar(queries, "Query: "):
status = collections.OrderedDict(
(("found", False), ("lc", False), ("passed", False)))
try:
stars = StarsProvider().getProvider(
self.obth_method, query).getStarsWithCurves()
except QueryInputError:
raise
except (KeyboardInterrupt, SystemExit):
raise
except:
warn("Couldn't download any light curve")
stars = []
# Check if the searched star was found
result_len = len(stars)
if result_len == 0:
unfound_counter += 1
all_unfound += 1
if unfound_counter > self.unfound_lim:
warn("Max number of unsatisfied queries reached: %i" %
self.unfound_lim)
unfound_counter = 0
for one_star in stars:
status["found"] = True
contain_lc = True
try:
one_star.lightCurve.time
except AttributeError:
contain_lc = False
if contain_lc:
# TODO
if self.save_coords and self.stars_filters:
spc = self.stars_filters[
0].getSpaceCoordinates([one_star]).values
if len(spc):
self._saveCoords([one_star.name] + spc[0].tolist())
# Try to apply filters to the star
try:
passed = self.filterStar(one_star, query)
status["lc"] = True
status["passed"] = passed
stars_num += 1
if passed:
passed_num += 1
except (KeyboardInterrupt, SystemExit):
raise
except IOError as err:
raise InvalidFilesPath(err)
except Exception as err:
self.failProcedure(query, err)
warn(
"Something went wrong during filtering:\n\t%s" % err)
else:
status["lc"] = False
status["passed"] = False
query["name"] = one_star.name
self.statusFile(query, status)
if not stars:
query["name"] = ""
self.statusFile(query, status)
print "\n************\t\tQuery is done\t\t************"
print "Query results:\nThere are %i stars passed thru filtering from %s." % (passed_num, stars_num)
if all_unfound:
print "There are %i unsatisfied queries" % all_unfound
if self.not_uploaded:
print "\t%i stars have not been uploaded into local db, because they are already there." % len(self.not_uploaded)
def _saveCoords(self, query):
if self.stars_filters:
star_filter = self.stars_filters[0]
labels = []
for desc in star_filter.descriptors:
if hasattr(desc.LABEL, "__iter__"):
labels += desc.LABEL
else:
labels.append(desc.LABEL)
header = ["star_name"] + labels
this_df = pd.DataFrame([query], columns=header)
if not isinstance(self.que_coords, pd.DataFrame):
self.que_coords = this_df
self.que_coords = self.que_coords.append(this_df)
self.que_coords.to_csv(
os.path.join(self.save_path, "..", "space_coordinates.csv"), index=False, delimiter=";")
else:
warnings.warn(
"There are no filters, so space coordinates cannot be obtained.\n")


The Form You Have Filled Out Was Successfully Submitted And Will Be Reviewed Shortly.
As a reminder from the city councils over these areas please always keep yourself safe. If you feel a storm is becoming severe seek shelter immediatly, and if someone is injured call 911 as soon as possible. This site is monitered daily but it is not a replacement for emergency services.


|
|
| SC2Type () |
| | Default constructor.
|
| |
|
| SC2Type (uint32_t type_id) |
| | Construct from an integer, corresponds to the enum value.
|
| |
|
| SC2Type (T type_id) |
| | Construct from the enum.
|
| |
| bool | operator== (SC2Type< T > type_id) const |
| |
|
bool | operator== (T type_id) const |
| |
|
bool | operator== (uint32_t type_id) const |
| |
|
bool | operator== (int type_id) const |
| |
| bool | operator!= (SC2Type< T > type_id) const |
| |
|
bool | operator!= (T type_id) const |
| |
|
bool | operator!= (uint32_t type_id) const |
| |
|
bool | operator!= (int type_id) const |
| |
|
bool | operator< (const SC2Type< T > &other) const |
| | Test comparison.
|
| |
|
| operator uint32_t () const |
| | Cast to integer.
|
| |
|
| operator T () const |
| | Cast to enum type.
|
| |
| bool | IsValid () const |
| |
| std::string | to_string () const |
| |
| T | ToType () const |
| |
template<class T>
class sc2::SC2Type< T >
Template class for defining common game enum types. The template parameter is the enum. This class allows for seamless conversion between enum types and integers, while maintaining strong typing. This means, for example, that a unit type ID can be converted back and forth from an integer, but can't be used when another type ID, e.g., an ability ID, is required as a parameter.


--- layout: default title: Home ---
I'm a machine learning engineer at Duolingo in Pittsburgh.
My PhD is from University of Pennsylvania, with Dan Roth and the Cognitive Computation Group. My thesis was on Low-Resource Named Entity Recognition. Previously, I have been at University of Illinois, Microsoft Research, MIT Lincoln Labs, and Johns Hopkins University.
Check out my:


The Content Handler Plugin
After reading this guide, you will be able to:
- Understand what Content Handler are and how to use them
- Use the Content Handler API to create, modify and
- Extend Content Handler with custom implementations
This guide is currently work-in-progress.
1 What are Content Handler?
Aloha Content Handler (Content Handler) are used to sanitize content loaded or pasted in Aloha Editor.
There are some Content Handler available:
- Generic
- Word
- oEmbed
- Sanitize
Plugins also provide Content Handler:
- Block common/block plugin
There are two hocks available:
- insertHtml in common/commands plugin
- initEditable in core/editable.js
2 Enabling the Content Handler Plugin
2.1 Using Configuration
Aloha.settings.contentHandler: { insertHtml: [ 'word', 'generic', 'oembed', 'sanitize' ], initEditable: [ 'sanitize' ], sanitize: 'relaxed' // relaxed, restricted, basic, allows: { elements: [ 'strong', 'em', 'i', 'b', 'blockquote', 'br', 'cite', 'code', 'dd', 'div', 'dl', 'dt', 'em', 'i', 'li', 'ol', 'p', 'pre', 'q', 'small', 'strike', 'sub', 'sup', 'u', 'ul'], attributes: { 'a' : ['href'], 'blockquote': ['cite'], 'q' : ['cite'] }, protocols: { 'a' : {'href': ['ftp', 'http', 'https', 'mailto', '__relative__']}, // Sanitize.RELATIVE 'blockquote': {'cite': ['http', 'https', '__relative__']}, 'q' : {'cite': ['http', 'https', '__relative__']} } } }
For the sanitize Content Handler you can use a predefined set of allowed HTML-tags and attributes (“sanitize” option) or your own set defined as “allows” option. The configuration option for “insertHtml” and “initEditable” defines which Content Handler should be used at that hook points. “initEditable” uses the “sanitize” Content Handler by default. “insertHtml” uses all registered Content Handler by default (including the Content Handler from other Plugins)
The order how the handlers are loaded and executed is important. If you first load the “sanitize” or “generic” handler the “word” handler will not be able to detect a MS Word document.
3 APIs and Extension Points
There is the Content Handler Manager in Aloha Core available where Content Handler can register themself.
3.1 Writing your own Content Handler
define( ['aloha', 'aloha/jquery', 'aloha/contenthandlermanager'], function(Aloha, jQuery, ContentHandlerManager) { "use strict"; var MyContentHandler = ContentHandlerManager.createHandler({ handleContent: function( content ) { // do something with the content return content; // return as HTML text not jQuery/DOM object } }); return MyContentHandler; });
All Content Handler needs to support the “handleContent” method and will receive and return the content as HTML text.
4 Internals
5 Future Work
6 Changelog
- October 06, 2011: Initial version by Rene Kapusta


p>
Note:
Firefox, Safari, and Chrome support the resize property.
The resize property specifies whether or not an element is resizable by the user.
This div occupies the left half.
This div occupies the right half.
This div has an outline border 15px outside the border edge.


Odo Module
Augment a class' static methods with helpers.
We think of a module as a section of the page which is made up of components. When they appear on the page, we want to initialize them. One pattern is to add a static initialize
method to every module class created. This component simplifies this by moving the static methods out of the module.
OdoModule is similar to a mixin, but it needs to know about the class it's augmenting.
Support
IE9+
Dependencies
None
API
register(Module[, selector])
Adds the static methods (listed below) to Module
. selector
is the base selector for the module, representing its main element.
If selector isn't defined, the component will look for enumerations with the selector: Module.Selectors.BASE
, Module.ClassName.BASE
, and Module.Classes.BASE
.
OdoModule.register(CoolModule);
unregister(Module[, selector])
Forgets about Module
. Currently leaves the added methods and instances as-is in case they're needed.
OdoModule.unregister(CoolModule);
Class Methods
initializeAll(context = document, options = {})
Initialize all elements within context
. This method returns a Map of the instances which were creatd. It also adds the new instances to the static Instances
property on the class.
CoolModule.initializeAll(containingElement)
initializeWhenIdle(context, options)
Initialize all elements within context
when the browser has a moment of idle time. This method returns a Promise which resolves when the module(s) have been initialized. This method just calls initializeAll
within a requestIdleCallback
which uses the request-idle-callback package. This method is useful for deferring the initialization of modules which are not above-the-fold on page load.
CoolModule.initializeWhenIdle(containingElement)
disposeAll(context = document)
Dispose of all instances from within a context.
CoolModule.disposeAll(containingElement)
getInstance(element)
Retrieve the instance by its main element.
CoolModule.getInstance(element)
deleteInstance(element)
Removes the instance from the Instances
map and calls its dispose
method if it has one.
CoolModule.deleteInstance(element)
Full Example
Let's say you have a base component which does this:
class BaseComponent {
constructor(element) {
this.element = element;
}
getAllByClass(className) {
return Array.from(this.element.getElementsByClassName(className));
}
}
And your module wants to console.log
all classes matching 'child'
.
class CoolModule extends BaseComponent {
constructor(element) {
super(element);
console.log(this.getChildren());
}
getChildren() {
return this.getAllByClass(CoolModule.Classes.CHILD);
}
}
CoolModule.Classes = {
BASE: 'cool-module',
CHILD: 'cool-module__child',
};
// Register with OdoModule.
OdoModule.register(CoolModule);
// Find all occurances of '.cool-module' and initialize them.
CoolModule.initializeAll();
initializeAll
also returns a map of the instances which were created if you need them.


Classes, Objects, and Methods
For demonstrating the concepts of classes, objects, and instances, I have chosen to stick with a recurring theme in my Dev Bootcamp assignments: TV characters and food. This program that I have created allows the user to create Person objects and Food objects. Users can call the eat(food) method to make a Person eat a certain food. This method will keep track of how many calories that Person has consumed. In addition, the Food class tracks the number of units of a particular food item that a Person has eaten.
Before I continue, if you would like to see the actual Ruby file with code that can be run from your terminal or with ctrl + B in Sublime, go to this link on GitHub and copy and paste the text into a new Ruby file.
The code above shows a sample of what methods the user can call. In lines 46-48, we create 3 new Person objects: ron, stewie, and cartman. We then create a few food objects. The first parameter is the string name of the food object; the second is an integer representing the number of calories that we choose to assign to that particular food object.
We then call the eat method on any of our Person objects that we have created, passing in any of the food objects we have created. For example, whenever we call ron.eat(bacon), this adds 350 calories to ron's cals_eaten instance variable because we assigned 350 as the amount of calories for the bacon object. Thus if we call ron.eat(bacon) twice, his cals_eaten instance variable will be at 700.
Let's take a look at the code that actually allows the user to create Person and Food objects:
To create a Person, the initialize method accepts a name variable (a string to represent the Person's name). The instance variable cals_eaten is set to 0 initally, because we assume that no person has eaten any food yet.
The @@people variable is a class variable, not an instance variable. In line 2, we see that it is created as an array. In line 7, the @name variable (for example, "Ron"), is added to the people array. This means that for each Person object we create, that Person's name will be added to the array. This way, we can see how many Person objects we have created by calling Person.people, which simple returns the class variable people (lines 16-18).
To understand the eat method in lines 10-14, we have to take a look at the code for the Food class:
When we call eat(food) from the Person class (line 10), we are calling that method on a Person object, but passing in a Food object (such as bacon, pie, friedchicken) as a parameter. In line 11, calling food.eaten applies to a particular food object. We see in line 34 the eaten method from the Food class. This method simply increases the units_eaten of that food by 1. This means that whether we call ron.eats(bacon), stewie.eats(bacon), or cartman.eats(bacon), the bacon object's instance variable @units_eaten will always increase by 1. This way, we can see how much bacon has been eaten by all of our Person objects, not just by one at a time.
In lines 12-13 of the eat method within the Person class, we also increase the @cals_eaten instance variable for a given Person. In line 13 we are able to reference the @cals_per_unit instance variable for a given Food by calling food.instance_variable_get(:@cals_per_unit). This method allows us to access an instance variable from a different class altogether!
Finally, we can looks at a few more things in the Food class. As we saw with the Person class, the double @@ denotes a class variable. Line 24 creates the class variable @@menu_items as an array. As we create new food objects, they will be added to this array. To view a list of the current items on the menu, we can just call puts Food.menu_items.
The initialize method for the Food class takes two parameters, a string name for the food and an integer cals_per_unit. These are instance variables, denoted by the single @ sign. We also initialize the @units_eaten instance variable to 0, as we assume that none of that Food Object has been eaten right upon initialization. The units_eaten variable will increase once the eat(food) method has been called.
This is a very simple example of objects, classes, and the difference between instance and class variables. A simple way to think to of the organization of classes and methods is that an object (which is an instance of a class) is like a noun, and a method is like a verb. You can define what common characteristics all instances of a class should have by creating different methods. Different classes can access information within one another through the use of class and instance variables.
It might be a little confusing at first as to why it is necessary to compartmentalize objects this way. But the more you code, the more you see its value, particularly as it gets much more complicated than this example. But if you take away one thing from this blog entry, remember only this: You can't have pie without coolhhwhip!!!


To request options data in the research environment you need to add the underlying asset to the QuantBook as demonstrated above by the symbols. This returns a Security
object.
goog = qb.AddOption("GOOG") # add the GOOG options
Once you have the Security object for the underlying asset you must set the filter you'd like to apply on the universe of available contracts. Options have contracts for every strike-expiration date combination.
In Options this filter is set with the SetFilter(minStrike, maxStrike, minExpiry, maxExpiry)
method. The strike is an integer number and the expiry is time span. If not specified, the default filter is SetFilter(-1, 1, timedelta(0), timedelta(35))
.
# filter option contracts goog.SetFilter(-2, 2, timedelta(0), timedelta(180))
Finally, to fetch the historical data associated with this underlying asset and filter you should use the helper method we've created which fetches all the data in one request:
# request the GOOG options history from 01/11/2017 10:10 to 01/12/2017 12:10 option_history = qb.GetOptionHistory(goog.Symbol, datetime(2017, 1, 11, 10, 10), datetime(2017, 1, 13, 12, 10)) # Fetch strikes of all options contracts option_history.GetStrikes() # Fetch expiration dates of all options contracts option_history.GetExpiryDates() # Get all the options data as a dataframe option_history.GetAllData()


Cacti - T. Peruvianus (Peruvian Torch)
Three friends of mine, along with myself ordered 100 grams of dried Peruvian Torch cactus for $60 off the internet. When I received the package, it actually contained 102 grams, and we split this four ways. However, since it was my idea, I ordered it, and I spent my time preparing it, we all agreed that it'd be appropriate for me to give myself a a little heavier dose... I took 30 grams, while the rest took 24.
The weekend was spent at Red River Gorge in eastern Kentucky.  It's strange to think that one of the most beautiful spots in the country is in Kentucky, but this area has miles of dramatic cliff lines, over 100 natural stone arches, unbelievable rock formations, and beautiful hemlock, deciduous, and pine-oak forest.
We ate the dried cactus that had been powderized in a coffee grinder. We mixed it with key lime flavored yogurt. It was figured that the tart flavor of key lime would help mask the bitter taste of the cactus, and we were partially correct. However, we didn't account for the fact that the dehydrated powder would absorb the moisture from the yogurt, turning it into a goop that was comparable to a mixture of glue, play dough, and urine. Attempting to force this down our throat was probably the most unpleasant thing I have ever been forced to endure. Even worse was our spreading it out, eating half with one cup of yogurt, and the other half in a different cup 45 minutes later. The logic was to help avoid nausea from shock to our system by the mescaline. Good idea, but it failed when put into practice; the nausea that resulted from eating the second cup, after spending 45 minutes dreading it, surely outweighed the nausea that would have been caused by mescaline shock.
The effects took hold after about two hours. It's amazing how subtle the build-up is... I started feeling a little different, but I wasn't tripping, just a little off. Things were moving out of the corners of my eyes, colors were brighter, and I started seeing subtle Indian/Aztec like designs if I let my eyes go out of focus. And then, when I was looking at something that's a little off, I realized 'Damn, I'm tripping!' It's hard to explain, unless you have done it before, but it's not like acid. With acid I go from baseline to seeing the walls breathe with basically no build-up, other than that racy, sped-up feeling. With the cactus, I actually progress from baseline to tripping so gradually that it takes a bit to realize that I'm tripping (the only analogy I can think of would be sticking your hand it cool water and warming it up by a degree or two every ten minutes... it's so gradual that you won't immediately realize the water has gotten hot).
This is when it got amazing. The gradual build-up makes for no apprehension or fear, and allows you to comfortably adjust to the state you are going to be in for the next twelve or more hours. We were all tripping balls, laying on top of the Indian staircase, and laughing constantly. The clouds were the most amazing things I had ever seen, until it got dark out and I could see the stars. The trees seemed to smile at us, and it was as if we were one with nature, being welcomed into this state of appreciation for Mother Earth that too few people experience. We had eaten the cactus at 9:00 in the morning, and when I fell asleep at two the next morning, the stars were still shining with the most beautiful glow.
There was no fear the entire trip, no wanting it to end; only a feeling of benevolence from and towards everything.
This is an amazing drug, with the perfect trip. There is but one downside, that being the difficulty in finding a decent way of ingesting the cactus. I am definitely going to invest in an encapsulating machine, as the nausea I felt seemed almost entirely the result of the nasty taste and unbearable texture of the yogurt/paste. I also think that diluting the powder in a large, tart fruit smoothie would do the trick, as long as there was enough liquid in there.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


WHEN:
May 2018 - June 2018
WHAT:
Semester-Long Project in Relational Databases Course
WHERE:
University of British Columbia, BC, Canada
TOOLS:
- Javascript
- PHP
- MySQL
- HTML/CSS
- Oracle VirtualBox
- Ubuntu Server
- Apache
This was a 2-month long project that involved building
SURFCal , a calendar web application, in which users can create calendars, add different types of items to it, and share their calendars with other users.
We designed and built a relational database to support login and calendar functionality, adhering to DBMS normalization forms such as BCNF and 3NF.
Special thanks to my awesome team!
Aaron Huang, Justin Lee, Natalie Ngan
>> Github <<
May 2018
Weeks 1 - 2
Planning
Brainstorming functionality that application should support.
Identified main calendar items (Events, Tasks, Reminders, Notes) that will be modelled as entities in the database. Each item will additionally have properties such as a name, creation date, reminder, start/end date time, notes, and location.
May 2018
Weeks 3 - 4
Schema Solidification
Produced an entity-relationship diagram mapping out all relationships, along with outline of schema, in which we justified how each entity's functional dependency did not violate BCNF.
All queries to be supported by the application were also identified. Asides from the standard selection, projection and delete queries, the app would also utilize more complex queries, including join, division, aggregation, and nested aggregation with group-by.
June 2018
Weeks 5 - 6
Implementation
Development spanned roughly 2 weeks, with work split among members.
Was personally involved in back and front-end roles - assisted in writing half of our database queries for the backend, and was responsible for dynamically generating the HTML code for all Calendar-related pages in the frontend. This involved implementing the ability to retrieve, update and delete individual Calendar items, organizing these items by type for display, and having the web page generate the necessary visuals or warnings depending on user actions.


Novemeber 4, 2019
Project 3: Article Illustrations
For this project, we chose three different online articles and we created illustrations relating to the articles. This project focuses on creating illustrations with similar styles and using a variety of media. I chose to use combine vector art using Illustrator and rasterized art using photoshop.
I searched the Apple News for recent news articles and chose articles that were different. I ended up choosing articles about psychology, climate/environment, and technology.
The first article I chose was called “What Happens In Your Brain When You Zone Out, According To Experts” by Carolyn Steber. This article explains how zoning out is a natural response to stress. So, for my illustration, I drew a girl spacing out in class, and I drew her in Illustrator as vectorized art. Then I used photoshop to draw the girl stressed and overwhelmed with a lot of work. But the hecticness is paused, which illustrates why the girl is zoning out.
The second article I chose was called ” How Antarctica is Melting From Above and Below” from National Geographic. This article explains that glaciers/ice shelves are melting due to increased heat from above, but the increasing amount of warm waters are also contributing to the melting. So, I drew glaciers as vectors and I portrayed the warm waters as hands trying to grab the glaciers drawn with photoshop.
The third article was called "Review: MacOS 10.15 Catalina" from wired.com. This article informs readers about the new updates for MacOS. My concept for this illustration was a magician-like person presenting all the new updates. I played around with the blur effect on Illustrator here.
My third illustration was definitely rushed. The floating icons could be more uniform and incorporated into the illustration rather than being plopped on top.
All three illustrations are similar in the way that it is obvious that vectorized and rasterized art are being used. My idea was that the vectorized art represents the “reality”, the and the rasterized art the “comic-y” and fantasy aspect. For example, the reality in my first illustration is the girl zoning out in class, but in her mind, her hectic brain is on pause. In the second illustration, the glaciers are the reality and the hands as water as well as the faces on the glaciers are the comic-y aspects that add to the illustration. In the third illustration, the reality is that Apple has all these new updates, and the fantasy part of it is that Apple is being portrayed as a person.
This is a pdf file where the illustrations are added to an article template just to see what they would look like if they were used in an article.


Dezeen's top 10 accessible designs of 2019
by Jennifer HahnThis year saw a wave of projects aimed at improving life for people with disabilities, and making spaces more inclusive. For our review of 2019, Dezeen has selected 10 of the best, including a mind-controlled exoskeleton and a series of 3D-printed IKEA hacks.
Ripple by Hsin-Jou Huang, Szu-Ying Lai and Chia-Ning Hsu
For people with functional limitations who rely on their family to perform day-to-day tasks, masturbation is often not an option.
This three-piece, multi-sensory sex toy allows them to take matters into their own hands via a remote controlled, inflatable bodysuit that can vibrate or exert pressure as desired, a pheromone-releasing eye mask and headphones playing soothing ASMR sounds.
Find out more about the Ripple suit›
Work meets play in this collection of Lego bricks, which sees the product's trademark circular studs arranged to form Braille letters, digits and mathematical symbols, in order to help children with visual impairments learn to decipher them.
The hope is to reengage a new generation with this physical writing system, which has increasingly fallen out of favour thanks to the proliferation of digital solutions such as audiobooks.
Find out more about Lego's Braille Bricks›
Lifetools by Nicola Golfari and Scivola
A number of projects this year have focused on being inclusive – normalising accessible products for everyday use rather than ghettoising them for use by only certain groups of people.
That's why this minimal series or furniture and homeware, which includes a foldaway shower seat and a tilting mirror, is designed to be beautiful and desirable in its own right, rather than solely functional for a particular group.
Find out more about Nicola Golfari's Lifetools›
Wheelie by Hoobox Robotics and Intel
This adapter kit can be installed in most electric wheelchairs in just seven minutes, making them controllable via the facial expressions of the person driving. This helps the user to manoeuvre more independently.
The system relies on a 3D depth camera – that can judge both depth and distance – to read the expressions, before a sophisticated machine-learning algorithm is used to analyse and convert them into concrete commands.
Find out more about the Wheelie›
The five buttons of Dougie Mann's simplified keyboard can be operated with a single hand and without looking, to enable people with motor or visual impairments to type on a smartphone.
However, like the Lifetools collection, it is also designed for use by the wider public and could keep us from being constantly glued to our screens or help us to take notes more efficiently.
Find out more about Dougie Mann's TypeCase›
Clinatec's full-body exoskeleton is wirelessly linked up to the wearer's brain through implants and, for the first time ever, allows quadriplegic patients to move all four of their limbs just by willing the suit into action.
So far it has only been used by a single test patient – who practised for more than two years to be able to operate it – but the programme is currently being expanded in order to gather larger data sets and refine the algorithms at the heart of the technology.
Find out more about Clinatec's Exoskeleton›
Meanwhile, architecture practice M-Rad proved that accessibility can be seamlessly integrated into even the smallest of spaces, with a series of California holiday cabins.
Here, a wooden deck functions as a ramp, while dramatic double-doors make for easy entry in a series of simple adjustments that don't call attention to themselves.
Find out more about M-Rad's X-Suite›
Bone-conducting headphones – in which sound waves are transmitted by vibrating the bones in the skull, rather than the eardrum – have long been popular among people who are hard of hearing. But their sound quality can leave much to be desired.
This design hopes to improve on that experience by making listeners feel like they are "inside the song" through a helmet of five speakers, each encased in a silicone membrane filled with an ultrasonic gel which sits against their skin.
Find out more about Rocco Giovannoni's Inmergo›
Facing Emotions by Huawei and the Polish Blind Association
An app developed for Huawei's Mate 20 Pro phone uses sound to help people with visual impairments recognise the emotions of their conversation partner.
Using the rear-facing camera and an offline machine-learning algorithm, the app is able to identify seven key emotions and translate them into distinct sounds that were created by blind composer Tomasz Bilecki to be easily recognisable yet unobtrusive.
Find out more about Facing Emotions›
ThisAbles by IKEA, Milbat and Access Israel
Rather than having to invest in entirely new furniture, this series of 13 add-ons can be downloaded and 3D printed by anyone, to make existing IKEA pieces in their home more usable for people with special needs.
This includes handles to make shower curtains or cupboard doors easier to open, as well as holders for cups or walking sticks that can be attached to a bed.


include "_nav.html"
Perks
For our small team of visionaries, work comes first, but we also love to balance life with a variety of perks.
Joining our team, aside from protecting human rights in the digital age, comes with the following fringe benefits:
Very competitve salary at or above market rates.
Full benefits and health coverage.
Generous equity in a quickly growing company.
Brand new computer / laptop of your choosing.
Annual company ski-trips to Switzerland.
Tweets and facebook posts from happy users world-wide.
Flexible hours and casual work environment.
Bright and motivated co-workers who love what they do.
Unlimited gourmet coffee.
Annual stipend for fitness related purchases and memberships.
include "_footer.html"


---
layout: post
title: Uprising after Fernando I died
date: '2013-03-24T15:04:00+01:00'
categories:
- Storyboards
- Atoleiros Battle
picture_url: https://film-Storyboards.tumblr.com/post/46186619228/people-uprising-after-the-death-of-fernando-i-of
---
Medieval people uprising after the death of Fernando I of Portugal.


Each speaker has 1 hour of talk time with a 15 minute Q&A session to follow.
Event hours: 10AM–7:30PM
August 24th: Google Speakers
August 25th: Microsoft Speakers
August 26th: Amazon Speakers


Your browser doesn't support the features required by impress.js, so you are presented
with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox
browser.
Truly modular AngularJS
Building application with Webpack
What makes a good and consistent code?
Small, independent, easy to understand
code modules
Static code analysis
Code style guide
Code-nazi in your team
Code review
CI/CD
It is always good. But...
Not always easy to setup
Requires extra tooling and effort
Slows down initial development cycle
Thus [almost] always skipped at the start
And that is OK, because...
Compiled languages
Javascript naturally came to be compiled first... At last!
Remember CoffeeScript
And why it was not OK?
Sourcemaps!
Now you can compile JS and debug it with sourcemaps
With any syntax you like
ES6, ES7, ES2025
Why compiled?
Let's bring it to the compilation!
Simple AngularJS app
src / index.html
src / app.js
src / hello / index.js
src / hello / hello_directive.js
src / hello / hello.html
src / hello / hello.css
npm start
Let's change some code
What if I make some mistake?


{% extends "page_with_title_and_lede.html" %} {% load i18n %} {% block head_title %}Petaluma{% endblock %} {% block heading %}Petaluma{% endblock %} {% block body_class %}about{% endblock %} {% block lede %} The best town you probably haven't visited yet. {% endblock %} {% block content %}
North Bay Python's home is Petaluma, a delightfully quaint dairy town, nestled on a river at the southern edge of California's Wine Country and at the intersection of Sonoma, Napa, and Marin Counties. This three county region, which makes up the North Bay, is famous for its parkland, forests, agriculture, fine food, wine, beer, and spirits.
We've got beautiful scenery right on our doorstep, and we're less than an hour's drive from San Francisco over the Golden Gate Bridge.
Our venue, The Mystic Theatre, is not the only local example of early 1900s architecture, either: Downtown is full of great examples of Victorian-era buildings that survived the 1906 earthquake. Just down the road, you'll find the center of the maker movement and a thriving craft brewery scene.
From family-friendly hikes to museums, wine tours to windswept beaches, and lots of kid-friendly attractions, there's a lot to do in see in the region. We encourage attendees to bring their families and extend their stay beyond the conference!
The Golden Gate Bridge is well-known to San Franciscans for being a million miles long and ever shrouded in fog, so few ever cross up into the North Bay. Happily, the trek north can be easy, if not swift.
Regardless of where you're coming from, we've got guides on how to fly to North Bay Python, how to make day trips from elsewhere in the Bay Area, and how to make a weekend of it and stay around Petaluma. We've got an overview focused on travel on the How to Get Here page.
When you get here, you're sure to find a nice place to stay that fits your budget. You can find a range of options, and some special discounts, available on the Where to Stay page. {% comment %}We'll have group rates and discounts at local hotels when tickets are available.{% endcomment %}
To make your visit even better, we've prepared a food guide which will help you find good eats in Petaluma. If you're sticking around beyond the conference or looking further afield, you'll want to check out your favorite food or restaurant guide.
{% endblock %}


Fork This Nav Challenge
Click the toggle to open the menu and see the magic. This experiment relies on only CSS to style, animate and position elements.
The technique used to select siblings based on the element being hovered extends from the work done by Giana in this pen.
Created for the Navigation with Sub-Navigation Fork This CodePen Challenge in August 2019. The code within has not been browser tested. This was made to experience a quick thrill with the power of CSS.


CS50- SIMPLE HOMEPAGE 2
lets interact with each other
created by siva
lets Play...!
Kindly Enter your Name
Press Me
Number of clicks is directly propotional to Number of transistions shakes
Do you think words can hover in webpage.?
CS50
Words can Move in a Webpage
Thanks CS50
THANK YOU
Use the buttons to switch to other webpages
HOMEPAGE 1
HOMEPAGE 3
HOMEPAGE 4


| pbcseq {survival} | R Documentation |
This data is a continuation of the PBC data set, and contains the follow-up laboratory data for each study patient. An analysis based on the data can be found in Murtagh, et. al.
The primary PBC data set contains only baseline measurements of the laboratory parameters. This data set contains multiple laboratory results, but only on the 312 randomized patients. Some baseline data values in this file differ from the original PBC file, for instance, the data errors in prothrombin time and age which were discovered after the original analysis (see Fleming and Harrington, figure 4.6.7).
One "feature" of the data deserves special comment. The last observation before death or liver transplant often has many more missing covariates than other data rows. The original clinical protocol for these patients specified visits at 6 months, 1 year, and annually thereafter. At these protocol visits lab values were obtained for a large pre-specified battery of tests. "Extra" visits, often undertaken because of worsening medical condition, did not necessarily have all this lab work. The missing values are thus potentially informative.
pbc
| id: | case number |
| age: | in years |
| sex: | m/f |
| trt: | 1/2/NA for D-penicillmain, placebo, not randomised |
| time: | number of days between registration and the earlier of death, |
| transplantion, or study analysis in July, 1986 | |
| status: | status at endpoint, 0/1/2 for censored, transplant, dead |
| day: | number of days between enrollment and this visit date |
| all measurements below refer to this date | |
| albumin: | serum albumin (mg/dl) |
| alk.phos: | alkaline phosphotase (U/liter) |
| ascites: | presence of ascites |
| ast: | aspartate aminotransferase, once called SGOT (U/ml) |
| bili: | serum bilirunbin (mg/dl) |
| chol: | serum cholesterol (mg/dl) |
| copper: | urine copper (ug/day) |
| edema: | 0 no edema, 0.5 untreated or successfully treated |
| 1 edema despite diuretic therapy | |
| hepato: | presence of hepatomegaly or enlarged liver |
| platelet: | platelet count |
| protime: | standardised blood clotting time |
| spiders: | blood vessel malformations in the skin |
| stage: | histologic stage of disease (needs biopsy) |
| trig: | triglycerides (mg/dl) |
T Therneau and P Grambsch, "Modeling Survival Data: Extending the Cox Model", Springer-Verlag, New York, 2000. ISBN: 0-387-98784-3.
Murtaugh PA. Dickson ER. Van Dam GM. Malinchoc M. Grambsch PM. Langworthy AL. Gips CH. "Primary biliary cirrhosis: prediction of short-term survival based on repeated patient visits." Hepatology. 20(1.1):126-34, 1994.
Fleming T and Harrington D., "Counting Processes and Survival Analysis", Wiley, New York, 1991.
# Create the start-stop-event triplet needed for coxph first <- with(pbcseq, c(TRUE, diff(id) !=0)) #first id for each subject last <- c(first[-1], TRUE) #last id time1 <- with(pbcseq, ifelse(first, 0, day)) time2 <- with(pbcseq, ifelse(last, futime, c(day[-1], 0))) event <- with(pbcseq, ifelse(last, status, 0)) fit1 <- coxph(Surv(time1, time2, event) ~ age + sex + log(bili), pbcseq)


UTC +13 (implimented on December 29th 2011)
It is now in the same time zone as Samoa and is 1 hour ahead of mainland New Zealand.
New Zealand dollar (NZ$).
One can change money at each island's administration centre.
There are no banks.
International Dialing Code for Tokelau is +690.
Satellites now provide TV and internet services.
Tokelau Phone Cards Store offers the following International dialing choices: International phone cards; cell phone calling cards; prepaid Satellite Phone with FREE Incoming Calls, FREE Incoming E-mail, FREE Incoming Text Messages; call USA from Tokelau call abroad phone cards; low cost, high quality special dialing services such as toll free dial around to Tokelau with free minutes and no fees; prepaid PC to Phone; discount long distance phone services.
The government-run MV Tokelau provides passenger and cargo services to and from Apia every two weeks. The trip takes about 24-36 hours each way, and the ship makes the round trip in five days. Passengers must bring their own mattresses to sleep on. Food is provided, and there is one bathroom for the passengers.
There is also a larger ship that makes the trip once a month.
Each island is small enought to walk round.
IMRAY AND ADLARD COLES PILOT BOOKS are Aaailable at a discounted price for Noonsite.com users via World Cruising Club
South Pacific Handbook
By David Stanley
Publisher: Avalon Travel; 8Rev Ed edition (28 Jan 2005)
ISBN-13:<PHONE_NUMBER>116
From lagoon swimming in the Cook Islands to witnessing the race of the banana bearers in the Heiva i Tahiti festival, travellers will find the best of the South Pacific both popular and obscure in this guidebook.
Landfalls of Paradise: Cruising Guide to the Pacific Islands
By Earl Hinz
Publisher: University of Hawai'i Press; 5th Revised edition (May 2006)
ISBN-13:<PHONE_NUMBER>373
The fifth edition of this sailing standard includes updated charts and text reflecting changes in regulations and facilities for most countries and specific ports of entry. New appendices include procedures for entry to Australia, which are more exacting than most Pacific landfalls, and an extensive list of information sources: cruising guidebooks, important general tourist guides, chart suppliers, and key web sites for the countries covered by "Landfalls of Paradise".
South Pacific Anchorages
By Warwick Clay
Publisher: Imray, Laurie,Norie & Wilson Ltd; 2nd Revised edition edition (1 Mar. 2001)
ISBN: 10-085288 482 6
Details of harbours and anchorages in the pacific south of the equator between New Guinea and South America.
The Pacific Crossing Guide
By Michael Pocock, Revised by Ros Hogbin
Publisher: Adlard Coles; 2nd edition (August 2011)
ISBN-13:<PHONE_NUMBER>828
See the detailed review
www.tokelau.org.nz The official Tokelau government website
Online Tokelau Travel Guide
This guide has good island maps and up to date island information. South Pacific Guides also cover Tonga, the Cook Islands, American Samoa, Easter Island, Niue, Pitcairn, Samoa, Tuvalu and Wallis and Futuna.
Noonsite welcomes information and updates especially regarding clearance, customs and immigration procedures from cruisers visiting this country.
Please E-mail noonsite with any new information, updates or corrections. Even just a short email confirming that the current data is accurate would be most helpful.


A very flexible component that prompts the user for a file. Supports multiple selection, accept only certain extensions, and more.
The aim is to facilitate the use and styling of the native file input. The projected content can have a file dragged and dropped over.
<fd-file-input>
Simple File Input
Used in this context, it will only allow a set of extensions to be added.
Invalid File Input
An event is fired when invalid files are added through the drag and drop feature. These files can be retrieved and displayed to the user at will.
Max File Size
It is possible to control the size of the file through the input maxFileSize
. The number is in bytes.
This feature will keep casual users from entering larger files, but someone knowledgeable enough could potentially bypass this.
NOTE: It is possible to bypass this client-side limit so a server-side check is still necessary.
Dropzone File Input
The component outputs events that make it very simple to style a dropzone depending on the current state. The example below also allows deals with duplicates, concatenating consecutive files into a list, and then displays them with the option to delete.


This is an Angular 2 app that uses the Spotify API to find artists, display albums and tracks, and links to audio previews.


{% extends 'base.html' %} {% load static%} {% block content %}
with a population of: {{hood.residents}}
{{hood.description}}
{% if request.user.profile.hood == hood %} Leave Hood {% elif not request.user.profile.hood %} Join Hood {% endif %}{{hood.name}} Main Road
Emergency contact: {{hood.hospital}}
{{hood.location}} Main Road
Emergency contact: {{hood.police}}
Admin: {{ hood.admin.user.username|title }}
{{business.description}}
{{business.address}}
{{business.email}}
There's no businesses posted in this neighborhood
{{post.user.username|title}}: {{post.description}}
{{post.posted_on|timesince}} ago
There's no post yet in this neighborhood!
{% endif %}


Job experts agree that medical professions will continue to grow in number in the coming years. They predict that more medical jobs will come open than there will be applicants vying for those positions. As such, people who want to enjoy a career with a certain amount of job stability, paired with a higher than average salary, may consider training to be a psychiatrist. This profession allows people to help others who are in need of emotional and medical treatment. This training involves going to college, as well as professional school, before these individuals are allowed to practice medicine.
Indeed, psychiatrists are medical doctors who have MD after their names. They must go through the same amount of medical and professional training as doctors who perform surgeries and work in hospitals and medical clinics. However, these professionals go through schooling that focuses more on the brain and its capabilities rather than other body systems. Psychiatrists in training learn how the brain interacts with a person's body and how outside influences can create mental and emotional disorders.
Their educations may begin early in their academic careers. High school students who are leaning toward this profession may be encouraged to take biology, anatomy, chemistry, and other classes while still in high school. These classes can provide the basis on which their future educations can be added.
Likewise, these individuals may continue their educations as undergraduate college students at a university. Many students leaning toward this career declare their major as pre-medicine or pre-psychiatry. Their four-year degrees provide them with a base on which their professional training will be added later after they graduate from college.
After they graduate with an undergraduate degree, these young professionals then move on to medical school. The first year or so of medical school will feature the same classes for everyone. Doctors in all specialties will take anatomy, physiology, and other basic courses that teach them about the basics of the human body.
Upon finishing their basic courses, doctoral students are then separated by their chosen specialties and given more specialized educations that help them become proficient in the area of medicine they wish to practice. Psychiatry pupils are taught the finer details of providing care for people who suffer from a broad range of mental and physical diseases. They learn how to treat conditions like schizophrenia, chronic depression, and multiple personality disorder.
Before they are allowed to exit their formal educations, young doctors are then allowed to work in a clinical experience under the tutelage of licensed doctors. They are allowed to interact and treat patients firsthand so that they gain a better understanding of their profession. Their clinicals also allow them to develop their bedside manner that they will use with their own future patients.
As they train to become a psychiatrist specialist, pupils may wonder what kind of formal educations they will undertake. Their courses will range from basic to specialized. These classes help people who want to enter into a career with predicted stability and high salaries.


public interface ConcatenatedResourceStore
| Modifier and Type | Method and Description |
|---|---|
void |
addCategory(String identifier,
String categoryName,
List<String> coreResources,
List<Pair<String,String>> extensionResources)
Add a category with initial resources.
|
void |
addCategoryWithPropertyResourceSupport(String identifier,
String categoryName,
List<String> coreResources,
List<Pair<String,String>> extensionResources,
String propertyResourceFallback)
Like
addCategory(String, String, List, List) but adds a category which supports the
definition of a resource as a PluginProperty. |
void |
addToCategory(String identifier,
String categoryName,
List<Pair<String,String>> resources)
Add the resources of a plugin to a category.
|
File |
getConcatenatedFile(String categoryName,
boolean minimized)
Return the concatenated file of a category.
|
long |
getConcatenatedFileLastModified(String categoryName)
Return the timestamp of the last modification of the concatenated file.
|
String |
getContentType() |
List<String> |
getCoreResources(String categoryName,
boolean minimized,
boolean timestamped)
Return the relative locations of the core resources of a given category.
|
String |
getMinimizedSuffix() |
List<String> |
getPluginResources(String categoryName,
boolean minimized,
boolean timestamped)
Return the relative locations of the plugin resources of a given category.
|
PropertyResourceContent |
getPropertyResourceContent(String identifier,
String categoryName)
Get the content of a property resource for category that was added by a given plugin.
|
File |
getPropertyResourceFile(String categoryName,
boolean minimized)
Return the file containing the current value of the property resource of a category.
|
long |
getPropertyResourceLastModified(String categoryName)
Return the timestamp of the last modification of the property resource.
|
void |
removeCategory(String identifier,
String categoryName)
Remove a category previously added by the plugin with the given identifier.
|
void |
removeFromCategory(String identifier,
String categoryName)
Remove the resources of a category that were added by the plugin with the given identifier
|
void |
updatePropertyResource(String identifier,
String categoryName,
String propertyValue)
Update the property resource for the given category and plugin.
|
void addCategory(String identifier, String categoryName, List<String> coreResources, List<Pair<String,String>> extensionResources) throws ConcatenatedResourceStoreException
Add a category with initial resources. If the category already exists because it was added by another plugin via a call to this method or it is one of the built-in categories, the initial resources passed to this method will overlay those of the existing category. That is, the existing initial resources won't be rendered until the plugin removes the category.
When rendering the resources of this category the provided initial resources will be rendered first. Afterwards any plugin resources added to this category byaddToCategory(String, String, List)
will be rendered in the order they were added.identifier
- the identifier of the plugincategoryName
- the name of the category to add or create an overlay forcoreResources
- a collection of resources which are delivered with the application and should be
added first when rendering the resources of the given category. Each entry of the
collection refers to the relative location of a resource under which it can be
downloaded. If the file of a resource cannot be resolved it will be ignored. Can
be null if the category does not need to have core resources.extensionResources
- a collection of pairs where each pair describes an initial resource provided by
the plugin. The left part refers to the relative location of the resource under
which it can be downloaded. Therefore, it has to start with the bundle name of the
plugin that is prefixed with a slash. The right part of the pair holds the
absolute file location of the resource on disk. Any resource that does not exist
on disk will be ignored. When rendering the resources of the provided category
these resources will be added after the coreResources. Can be null if the category
does not need to have plugin resources.ConcatenatedResourceStoreException
- in case adding the category failedvoid addCategoryWithPropertyResourceSupport(String identifier, String categoryName, List<String> coreResources, List<Pair<String,String>> extensionResources, String propertyResourceFallback) throws ConcatenatedResourceStoreException
addCategory(String, String, List, List)
but adds a category which supports the
definition of a resource as a PluginProperty. This so called property resource will be
rendered last.identifier
- the identifier of the plugincategoryName
- the name of the category to add or create an overlay forcoreResources
- a collection of resources which are delivered with the application and should be
added first when rendering the resources of the given category. Each entry of the
collection refers to the relative location of a resource under which it can be
downloaded. If the file of a resource cannot be resolved it will be ignored. Can
be null if the category does not need to have core resources.extensionResources
- a collection of pairs where each pair describes an initial resource provided by
the plugin. The left part refers to the relative location of the resource under
which it can be downloaded. Therefore, it has to start with the bundle name of the
plugin that is prefixed with a slash. The right part of the pair holds the
absolute file location of the resource on disk. Any resource that does not exist
on disk will be ignored. When rendering the resources of the provided category
these resources will be added after the coreResources. Can be null if the category
does not need to have plugin resources.propertyResourceFallback
- a fallback of the property resource which will be included if the property is not
set. Absolute file location of the resource on disk. If not provided or the
resource that does not exist on disk there will be no fallback for the property
resource.ConcatenatedResourceStoreException
- in case property resources are not supported by this store or adding the category
failedvoid addToCategory(String identifier, String categoryName, List<Pair<String,String>> resources) throws ConcatenatedResourceStoreException
identifier
- the identifier of the plugincategoryName
- the name of the category to which the resources should be addedresources
- a collection of pairs where each pair describes a resource of the plugin. The left
part refers to the relative location of the resource under which it can be
downloaded. Therefore, it has to start with the bundle name of the plugin that is
prefixed with a slash. The right part of the pair holds the absolute file location
of the resource on disk. Any resource that does not exist on disk will be ignored.ConcatenatedResourceStoreException
- in case adding the resources to the category failedFile getConcatenatedFile(String categoryName, boolean minimized)
categoryName
- the name of the categoryminimized
- whether the minimized version of the file should be returnedlong getConcatenatedFileLastModified(String categoryName)
categoryName
- the name of the categoryString getContentType()
List<String> getCoreResources(String categoryName, boolean minimized, boolean timestamped)
categoryName
- the name of the categoryminimized
- whether to get the location of the minimized versiontimestamped
- if true the last modification timestamp of the file will be append to the location
in the form of a request parameter with name 't'.String getMinimizedSuffix()
List<String> getPluginResources(String categoryName, boolean minimized, boolean timestamped)
addCategory(String, String, List, List)
or those added via
addToCategory(String, String, List)
. The relative location represents the location
under which the plugin resource can be downloaded. It starts with a slash followed by the
bundle name of the plugin.categoryName
- the name of the categoryminimized
- whether to get the location of the minimized versiontimestamped
- if true the last modification timestamp of the file will be append to the location
in the form of a request parameter with name 't'.PropertyResourceContent getPropertyResourceContent(String identifier, String categoryName) throws ConcatenatedResourceStoreException
#getPropertyResource(String)
should be used.identifier
- the identifier of the plugincategoryName
- the name of the categoryConcatenatedResourceStoreException
- in case getting the content failedFile getPropertyResourceFile(String categoryName, boolean minimized)
categoryName
- the name of the categoryminimized
- whether the minimized version of the file should be returnedlong getPropertyResourceLastModified(String categoryName)
categoryName
- the name of the categoryvoid removeCategory(String identifier, String categoryName) throws ConcatenatedResourceStoreException
identifier
- the identifier of the plugincategoryName
- the name of the category to removeConcatenatedResourceStoreException
- in case the category couldn't be removed. The store can be in an inconsistent
state.void removeFromCategory(String identifier, String categoryName) throws ConcatenatedResourceStoreException
identifier
- the identifier of the plugincategoryName
- the name of the category for which the resources should be removedConcatenatedResourceStoreException
- in case the resources of the category couldn't be removed. The store can be in an
inconsistent state.void updatePropertyResource(String identifier, String categoryName, String propertyValue) throws ConcatenatedResourceStoreException
identifier
- the identifier of the plugincategoryName
- the name of the categorypropertyValue
- the new value. Can be null to clear the application property and use the fallback
of the plugin.ConcatenatedResourceStoreException
- in case the update failed or the store does not support property resourcesCopyright © 2019 Communote team. All rights reserved.


Check your item against under The Export Control Order 2008 if you suspect it could be controlled there instead of under the UK Military List.
The Export Control Order 2008


Bisque login
Welcome Back to BisQue!
Login
Username:
Password:
Register New User
Forgot Password?
External providers


The built-in string functions are much more significant and interesting than the numeric functions. Because awk is essentially designed as a string-processing language, a lot of its power derives from these functions. Table 9.2 lists the string functions found in awk.
| Awk Function | Description |
|---|---|
| gsub(r,s,t) | Globally substitutes s for each match of the regular expression r in the string t. Returns the number of substitutions. If t is not supplied, defaults to $0. |
| index(s,t) | Returns position of substring t in string s or zero if not present. |
| length(s) | Returns length of string s or length of $0 if no string is supplied. |
| match(s,r) | Returns either the position in s where the regular expression r begins, or 0 if no occurrences are found. Sets the values of RSTART and RLENGTH. |
| split(s,a,sep) | Parses string s into elements of array a using field separator sep; returns number of elements. If sep is not supplied, FS is used. Array splitting works the same way as field splitting. |
| sprintf("fmt",expr) | |
| sub(r,s,t) | Substitutes s for first match of the regular expression r in the string t. Returns 1 if successful; 0 otherwise. If t is not supplied, defaults to $0. |
| substr(s,p,n) | Returns substring of string s at beginning position p up to a maximum length of n. If n is not supplied, the rest of the string from p is used. |
| tolower(s) | Translates all uppercase characters in string s to lowercase and returns the new string. |
| toupper(s) | Translates all lowercase characters in string s to uppercase and returns the new string. |
The split() function was introduced in the previous chapter in the discussion on arrays.
The sprintf() function uses the same format specifications as printf(), which is discussed in Chapter 7, Writing Scripts for awk. It allows you to apply the format specifications on a string. Instead of printing the result, sprintf() returns a string that can be assigned to a variable. It can do specialized processing of input records or fields, such as performing character conversions. For instance, the following example uses the sprintf() function to convert a number into an ASCII character.
for (i = 97; i <= 122; ++i) { nextletter = sprintf("%c", i) ... }
A loop supplies numbers from 97 to 122, which produce ASCII characters from a to z.
That leaves us with three basic built-in string functions to discuss: index(), substr(), and length().
The index() and substr() functions both deal with substrings. Given a string s, index(s,t) returns the leftmost position where string t is found in s. The beginning of the string is position 1 (which is different from the C language, where the first character in a string is at position 0). Look at the following example:
pos = index("Mississippi", "is")
The value of pos is 2. If the substring is not found, the index() function returns 0.
Given a string s, substr(s,p) returns the characters beginning at position p. The following example creates a phone number without an area code.
phone = substr("707-555-1111", 5)
You can also supply a third argument which is the number of characters to return. The next example returns just the area code:
area_code = substr("707-555-1111", 1, 3)
The two functions can be and often are used together, as in the next example. This example capitalizes the first letter of the first word for each input record.
awk '# caps - capitalize 1st letter of 1st word # initialize strings BEGIN { upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" lower = "abcdefghijklmnopqrstuvwxyz" } # for each input line { # get first character of first word FIRSTCHAR = substr($1, 1, 1) # get position of FIRSTCHAR in lowercase array; if 0, ignore if (CHAR = index(lower, FIRSTCHAR)) # change $1, using position to retrieve # uppercase character $1 = substr(upper, CHAR, 1) substr($1, 2) # print record print $0 }'
This script creates two variables, upper and lower, consisting of uppercase and lowercase letters. Any character that we find in lower can be found at the same position in upper. The first statement of the main procedure extracts a single character, the first one, from the first field. The conditional statement tests to see if that character can be found in lower using the index() function. If CHAR is not 0, then CHAR can be used to extract the uppercase character from upper. There are two substr() function calls: the first one retrieves the capitalized letter and the second call gets the rest of the first field, extracting all characters, beginning with the second character. The values returned by both substr() functions are concatenated and assigned to $1. Making an assignment to a field as we do here is a new twist, but it has the added benefit that the record can be output normally. (If the assignment was made to a variable, you'd have to output the variable and then output the record's remaining fields.) The print statement prints the changed record. Let's see it in action:
$caps
root user
Root userdale
DaleTom
Tom
In a little bit, we'll see how to revise this program to change all characters in a string from lower- to uppercase or vice versa.
When presenting the awkro program in the previous chapter, we noted that the program was likely to produce lines that exceed 80 characters. After all, the descriptions are quite long. We can find out how many characters are in a string using the built-in function length(). For instance, to evaluate the length of the current input record, we specify length($0). (As it happens, if length() is called without an argument, it returns the length of $0.)
The length() function is often used to find the length of the current input record, in order to determine if we need to break the line.
One way to handle the line break, perhaps more efficiently, is to use the length() function to get the length of each field. By accumulating those lengths, we could specify a line break when a new field causes the total to exceed a certain number.
Chapter 13, A Miscellany of Scripts, contains a script that uses the length() function to break lines greater than 80 columns wide.
Awk provides two substitution functions: sub() and gsub(). The difference between them is that gsub() performs its substitution globally on the input string whereas sub() makes only the first possible substitution. This makes gsub() equivalent to the sed substitution command with the g (global) flag.
Both functions take at least two arguments.  The regular expression can be supplied by a variable, in which case the slashes are omitted. An optional third argument specifies the string that is the target of the substitution. If there is no third argument, the substitution is made for the current input record ($0).
The substitution functions change the specified string directly. You might expect, given the way functions work, that the function returns the new string created when the substitution is made. The substitution functions actually return the number of substitutions made. sub() will always return 1 if successful; both return 0 if not successful. Thus, you can test the result to see if a substitution was made.
For example, the following example uses gsub() to replace all occurrences of "UNIX" with "POSIX".
if (gsub(/UNIX/, "POSIX")) print
The conditional statement tests the return value of gsub() such that the current input line is printed only if a change is made.
As with sed, if an "&" appears in the substitution string, it will be replaced by the string matched by the regular expression. Use "\&" to output an ampersand. (Remember that to get a literal "\" into a string, you have to type two of them.) Also, note that awk does not "remember" the previous regular expression, as does sed, so you cannot use the syntax "//" to refer to the last regular expression.
The following example surrounds any occurrence of "UNIX" with the troff font-change escape sequences.
gsub(/UNIX/, "\\fB&\\fR")
If the input is "the UNIX operating system", the output is "the \fBUNIX\fR operating system".
In Chapter 4, Writing sed Scripts, we presented the following sed script named do.outline:
sed -n ' s/"//g s/^\.Se /Chapter /p s/^\.Ah /A. /p s/^\.Bh /B. /p' $*
Now here's that script rewritten using the substitution functions:
awk ' { gsub(/"/, "") if (sub(/^\.Se /, "Chapter ")) print if (sub(/^\.Ah /, "\tA. ")) print if (sub(/^\.Bh /, "\t\tB. ")) print }' $*
The two scripts are exactly equivalent, printing out only those lines that are changed. For the first edition of this book, Dale compared the run-time of both scripts and, as he expected, the awk script was slower. For the second edition, new timings showed that performance varies by implementation, and in fact, all tested versions of new awk were faster than sed! This is nice, since we have the capabilities in awk to make the script do more things. For instance, instead of using letters of the alphabet, we could number the headings. Here's the revised awk script:
awk '# do.outline -- number headings in chapter. { gsub(/"/, "") } /^\.Se/ { sub(/^\.Se /, "Chapter ") ch = $2 ah = 0 bh = 0 print next } /^\.Ah/ { sub(/^\.Ah /, "\t " ch "." ++ah " ") bh = 0 print next } /^\.Bh/ { sub(/^\.Bh /, "\t\t " ch "." ah "." ++bh " ") print }' $*
In this version, we break out each heading into its own pattern-matching rule. This is not necessary but seems more efficient since we know that once a rule is applied, we don't need to look at the others. Note the use of the next statement to bypass further examination of a line that has already been identified.
The chapter number is read as the first argument to the ".Se" macro and is thus the second field on that line. The numbering scheme is done by incrementing a variable each time the substitution is made. The action associated with the chapter-level heading initializes the section-heading counters to zero. The action associated with the top-level heading ".Ah" zeroes the second-level heading counter. Obviously, you can create as many levels of heading as you need. Note how we can specify a concatenation of strings and variables as a single argument to the sub() function.
$do.outline ch02
Chapter 2 Understanding Basic Operations 2.1 Awk, by Sed and Grep, out of Ed 2.2 Command-line Syntax 2.2.1 Scripting 2.2.2 Sample Mailing List 2.3 Using Sed 2.3.1 Specifying Simple Instructions 2.3.2 Script Files 2.4 Using Awk 2.5 Using Sed and Awk Together
If you wanted the option of choosing either numbers or letters, you could maintain both programs and construct a shell wrapper that uses some flag to determine which program should be invoked.
POSIX awk provides two functions for converting the case of characters within a string. The functions are tolower() and toupper(). Each takes a single string argument, and returns a copy of that string, with all the characters of one case converted to the other (upper to lower and lower to upper, respectively). Their use is straightforward:
$cat test
Hello, World! Good-bye CRUEL world! 1, 2, 3, and away we GO! $awk '{ printf("<%s>, <%s>\n", tolower($0), toupper($0)) }' test
<hello, world!>, <HELLO, WORLD!> <good-bye cruel world!>, <GOOD-BYE CRUEL WORLD!> <1, 2, 3, and away we go!>, <1, 2, 3, AND AWAY WE GO!>
Note that nonalphabetic characters are left unchanged.
The match() function allows you to determine if a regular expression matches a specified string. It takes two arguments, the string and the regular expression. (This function is confusing because the regular expression is in the second position, whereas it is in the first position for the substitution functions.)
The match() function returns the starting position of the substring that was matched by the regular expression. You might consider it a close relation to the index() function. In the following example, the regular expression matches any sequence of capital letters in the string "the UNIX operating system".
match("the UNIX operating system", /[A-Z]+/)
The value returned by this function is 5, the character position of "U," the first capital letter in the string.
The match() function also sets two system variables: RSTART and RLENGTH. RSTART contains the same value returned by the function, the starting position of the substring. RLENGTH contains the length of the string in characters (not the ending position of the substring). When the pattern does not match, RSTART is set to 0 and RLENGTH is set to -1. In the previous example, RSTART is equal to 5 and RLENGTH is equal to 4. (Adding them together gives you the position of the first character after the match.)
Let's look at a rather simple example that prints out a string matched by a specified regular expression, demonstrating the "extent of the match," as discussed in Chapter 3, Understanding Regular Expression Syntax. The following shell script takes two command-line arguments: the regular expression, which should be specified in quotes, and the name of the file to search.
awk '# match -- print string that matches line # for lines match pattern match($0, pattern) { # extract string matching pattern using # starting position and length of string in $0 # print string print substr($0, RSTART, RLENGTH) }' pattern="$1" $2
The first command-line parameter is passed as the value of pattern. Note that $1 is surrounded by quotes, necessary to protect any spaces that might appear in the regular expression. The match() function appears in a conditional expression that controls execution of the only procedure in this awk script. The match() function returns 0 if the pattern is not found, and a non-zero value (RSTART) if it is found, allowing the return value to be used as a condition. If the current record matches the pattern, then the string is extracted from $0, using the values of RSTART and RLENGTH in the substr() function to specify the starting position of the substring to be extracted and its length. The substring is printed. This procedure only matches the first occurrence in $0.
Here's a trial run, given a regular expression that matches "emp" and any number of characters up to a blank space:
$match "emp[^ ]*" personnel.txt
employees employee employee. employment, employer employment employee's employee
The match script could be a useful tool in improving your understanding of regular expressions.
The next script uses the match() function to locate any sequence of uppercase letters so that they can be converted to lowercase. Compare it to the caps program shown earlier in the chapter.
awk '# lower - change upper case to lower case # initialize strings BEGIN { upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" lower = "abcdefghijklmnopqrstuvwxyz" } # for each input line { # see if there is a match for all caps while (match($0, /[A-Z]+/)) # get each cap letter for (x = RSTART; x < RSTART+RLENGTH; ++x) { CAP = substr($0, x, 1) CHAR = index(upper, CAP) # substitute lowercase for upper gsub(CAP, substr(lower, CHAR, 1)) } # print record print $0 }' $*
In this script, the match() function appears in a conditional expression that determines whether a while loop will be executed. By placing this function in a loop, we apply the body of the loop as many times as the pattern occurs in the current input record.
The regular expression matches any sequence of uppercase letters in $0. If a match is made, a for loop does the lookup of each character in the substring that was matched, similar to what we did in the caps sample program, shown earlier in this chapter. What's different here is how we use the system variables RSTART and RLENGTH. RSTART initializes the counter variable x. It is used in the substr() function to extract one character at a time from $0, beginning with the first character that matched the pattern. By adding RLENGTH to RSTART, we get the position of the first character after the ones that matched the pattern. That is why the loop uses "<" instead of "<=". At the end, we use gsub() to replace the uppercase letter with the corresponding lowercase letter.[2] Notice that we use gsub() instead of sub() because it offers us the advantage of making several substitutions if there are multiple instances of the same letter on the line.
[2] You may be wondering, "why not just use tolower()?" Good question. Some early versions of nawk, including the one on SunOS 4.1.x systems, don't have tolower() and toupper(); thus it's useful to know how to do it yourself.
$cat test
Every NOW and then, a WORD I type appears in CAPS. $lower test
every now and then, a word i type appears in caps.
Note that you could change the regular expression to avoid matching individual capital letters by matching a sequence of two or more uppercase characters, by using: "/[A-Z][A-Z]+/." This would also require revising the way the lowercase conversion was made using gsub(), since it matches a single character on the line.
In our discussion of the sed substitution command, you saw how to save and recall a portion of a string matched by a pattern, using \( and \) to surround the pattern to be saved and \n to recall the saved string in the replacement pattern. Unfortunately, awk's standard substitution functions offer no equivalent syntax. The match() function can solve many such problems, though.
For instance, if you match a string using the match() function, you can single out characters or a substring at the head or tail of the string. Given the values of RSTART and RLENGTH, you can use the substr() function to extract the characters. In the following example, we replace the second of two colons with a semicolon. We can't use gsub() to make the replacement because "/:/" matches the first colon and "/:[^:]*:/" matches the whole string of characters. We can use match() to match the string of characters and to extract the last character of the string.
# replace 2nd colon with semicolon using match, substr if (match($1, /:[^:]*:/)) { before = substr($1, 1, (RSTART + RLENGTH - 2)) after = substr($1, (RSTART + RLENGTH)) $1 = before ";" after }
The match() function is placed within a conditional statement that tests that a match was found. If there is a match, we use the substr() function to extract the substring before the second colon as well as the substring after it. Then we concatenate before, the literal ";", and after, assigning it to $1.
You can see examples of the match() function in use in Chapter 12, Full-Featured Applications.


Welcome
Contact
Features
Logout
E-Aadhaar
Welcome
Let's begin
User Details
Name :
Email :
Address :
Contact :
UID No :
Verified :
Other Features
Learn more


Class Room : Ball Hall 326
Timings : Tuesday 2PM to 4PM
Course Description :
Fabrication of resistors, capacitors, p-n junction and Schottky barrier diodes, BJT's and MOS devices and integrated circuits. Topics include: silicon structure, wafer preparation, sequential techniques in microelectronic processing, testing and packaging, yield and clean room environments. MOS structures, crystal defects, Fick's laws of diffusion; oxidation of silicon, photolithography including photoresist, development and stripping. Metallization for conductors, Ion implantation for depletion mode and CMOS transistors for better yield speed, low power dissipation and reliability. Students will fabricate circuits using the DSIPL Laboratory.Syllabus - click here to download the syllabus for this course.
Course Schedule : Find the course scheule and solutions to the assignments here.
| Date | Topic | Assignment | Due Date | Solutions |
|---|


This project's purose is to host intentionally bad static websites. If you want, you can contact me on GitHub and I will make one for you. Just keep in mind that it will probably take me a while to respond to your message as this is just a throwaway account.


My use of nutmeg has been extensive over the last twelve years. I find it a pleasant escape into something of a waking dream state when planned. Set and setting are most important since precise preparation is a must. Only proper dosage under the right conditions will produce a long, pleasurable experience. I have mixed many variations of different substances with the nut and have experienced a wide range of results. Some are more difficult to remember than others due to heavy partying. I will only reveal to you the most vivid memory.
Christmas Day of '99 my wife and I ate one medium sized nut each with eggnog at about 9am. We were in good humor prior to the ingestion, and in fair to good physical condition. We also ingested several grams of ginger (pill form) to prevent nausea. After an hour we felt stoned and decided to get on with the day of happiness and love. As the long ride to mom's sunk into my head, snow started to fall. This triggered visuals of tiny dancing fairies. These were not real pronounced, although a larger dose would have had a deeper effect. The visuals increased to objects appearing and then vanishing throughout the remainder of the day and night.
We made sure we drank lots of water whenever we could, to prevent dehydration.
The nutmeg seemed to clarify all positive feelings and enhanced the initial orgasm of giving and receiving. My irritation level and stress were at an all time low as I gracefully ate the wonderful colorful Christmas dinner. My whole body felt warm despite the bitter cold that was lurking around. I felt like I had a cross between a good weed buzz and demerol with a little more control. I can not link the visuals to any other drug. The hallucinations seem to be more real, but less intrusive than LSD or mushrooms.
Not once that I know of did any family members suspect us of doing any more than a little wine, although our eyes were red as all hell. I will continue to use this spice for fun and hope the best experiences to anyone else who wants to use this responsibly. Oh yeah I almost forgot, if either of us would have chosen to drive that day, we would have been fucked!
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


http://www.speakers-podium.com/susangranger.
Susan Granger's review of "DUDLEY DO-RIGHT" (Universal Pictures)
If there was ever the right actor to bring cartoonist Jay Ward's brave but clueless Canadian Mountie to life, it's Brendan Fraser. Like his goofy "George of the Jungle," Fraser embodies the dim-witted hunk superbly, relishing his obvious mastery of the physical comedy. The plot - which is designed to appeal to youngsters, not adults - follows Do-Right as he attempts to foil a scheme concocted by evil Snidely Whiplash, played broadly by Alfred Molina. Even as a child, Dudley longed to be a mounted policeman, while his pal Snidely only wanted to be "a bad guy."  In the meantime, Dudley's in love with Nell - that's "Sex and the City" girl, Sarah Jessica Parker - but, unfortunately, so is Snidely. Directed by Hugh Wilson, this cheerful comedy is aimed at 5-10 year-olds, who will thoroughly enjoy it. On the Granger Movie Gauge of 1 to 10, "Dudley Do-Right" is a downright silly 6. Did you know there's a Dudley Do-Right Emporium on Sunset Blvd. in Hollywood, where tourists are greeted by a 15-foot statue of Ward's famous characters Rocky and Bullwinkle, who are set for the big screen next summer in a live-action film starring Robert DeNiro, Rene Russo, and Jason Alexander?
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


--- layout: article title: Animal Kingdoms authors: - noble-katherine excerpt: > In 1393 the young French king Charles VI demands his courtiers dance as wild men with torches; four catch fire and die. Affected by the story, Keene Prize-winning poet Katherine Noble contributes a poem of dance, death, and attention paid. permalink: /issues/2013/10/animal-kingdoms toc: 10 volume: 1 number: 4 ---
January 28, 1393: the mentally unstable young French King Charles VI demands that his courtiers dress as shaggy-haired “wild men” and dance in a “diabolical frenzy” while holding flaming torches. Their resin-soaked suits catch fire before a horrified court, killing four of the highest noblemen in France. After the carnage, Charles VI, who survived, was revealed to be one of the wild men. King Charles began to believe that he was made of glass and often ran “howling like a wolf down the corridors of the royal palaces.”
Keene Prize-winning poet Katherine Noble wrote this poem for The Appendix in the Cascade Mountains of Oregon, inspired by Charles’ story and the thought that “history can be summarized as the story of humans begging one another for attention.”
I do not want to board the ark with the other couples.
God is the saddest animal.
He cannot create an equal, so he is immortally
alone. On the seventh day,
he panicked,
taking a step back from the tableau. Realizing Adam
was sullen as his lover, he sacrificed
his own happiness. He created Eve.
While washing dishes at dawn, the chickens
shriek in my yard.
When I dreamt of my wedding,
a shooter hid in the rafters and everyone died
except me. There is a trapdoor
in the places you least expect it. A child’s treehouse.
The climax of the opera. The scene of the crime.
And happiness. I do not want it.
I am sweating through my silks.
There is not enough time for everyone to get what they want.
Let’s draw straws! I must referee
so I can rig the odds. Or marry into royalty.
As a child, I believed I could win everything,
but in retrospect, I usually cheated.
M. read my love letter out loud
to the class in third grade
while I was in the room.
Fifteen years later I still reveal
too much to men— can nothing
shame the animals permanently? I omit
details and remember love otherwise.
The function of revisionist history! Charles VI,
known as the Beloved
or the Mad, depending on who is translating,
believed he was made of glass and could die
at the slightest force. He swore
his coat of arms had changed into a lion
with a sword stabbing it.
He often ran through the palace wailing
like this kind of wounded animal, his death
chasing him blind. Noli me tangere.
God is the most fragile animal.
No one can touch him! Charles
lit his courtiers aflame
as they danced with him in wolf suits,
writhing like waifish women at a disco.
The French court clapped and clapped.
Everything is violent, then over.

But tell me when it’s my turn
to shed my spirit and dance.
I am going to Guadalajara
where every color is primary
and every dance is for the groin!
I will weep with the midnight tenor and climax
with the brass of one thousand mouths.
The ring is reserved
for the dancing animals. I enter with the rest.
The drunk waltz of baboons, the ballerina
bears with kohl-lined eyes. The horses jumping through hoops,
carrying spangle-breasted women posing
spread-eagle. Distract me with a song and dance. Silence,
then another encore.
Then another, so I do not notice the curtains closing.
The water rising. The cannons taking aim.
History can be summarized as the story of humans begging one another
for attention, using a variety of violences and passions,
penises and slow progress to reach this end.
But, I do not cast the first stone.
In the animal kingdom,
this grief is not a private thing! The elephants
process around the carcass, smelling each bone
and testing the dead weight in their trunks.
The monkey carried its stillborn for two months on its back.
I remember the little Pegasus
flying out of the groaning stag
in Picasso’s pencil drafts of Guernica.
The spirit unaccustomed
to the gross fleshiness of our exaggerated
dying. It makes a quiet, erasable exit,
leaving only an animal body
writhing across that difficult, flaming tableau
in the draft we all remember.


The
N
ational*
A
gile and
S
crum
A
ssociation
*Not actually national
Clickbait Detector | The NASA
Home
Current Projects
Clickbait Detector
About Us
Privacy Policy
Clickbait Detector
{{ clickbait }}


Enterprise Wi-Fi / IEEE 802.1X
Deficiencies of PSK networks
Common home-use Wi-Fi networks do not need a RADIUS server because they "secure" the network with one single network key, the "WPA/WPA2 Pre-Shared Key" (PSK). That key is the same for every user, is often guessable, and can’t be revoked for one user (if one user should be denied access, the key needs to be changed for the entire network and every user needs to be given the new key). When a network is sniffed, an attacker can perform offline attacks to guess the key.
All this makes PSK networks unfit for enterprise use.
IEEE 802.1X and RADIUS Authentication
The IEEE standards for Wi-Fi (IEEE 802.11) foresee an "Enterprise" mode which is fundamentally different from PSK networks because the Wi-Fi encryption keys are provisioned per user and per session. Every user needs to authenticate with their personal credentials; at that moment a key is generated and is communicated to the user’s device and the NAS they connect to.
Before users send their authentication credentials, the the user must authenticate the network, proving that it is indeed genuine; only then is the client’s credential released. The IEEE standard IEEE 802.1X (using RADIUS and the Extensible Authentication Protocol, EAP) is used for authentication and key management.
Enterprise Wi-Fi authentication also enables advanced features such as putting users dynamically into a specific VLAN (e.g. separate guest and staff logins into different IP networks even though being on the same SSID), and dynamic ACLs
Enterprise Wi-Fi requires:
- A RADIUS server which can do EAP authentication.
- Wi-Fi equipment which is correctly configured to use RADIUS authentication.
- user devices configured to do Enterprise Wi-Fi correctly.
RADIUS Server
The central component in an IEEE 802.1X / Enterprise Wi-Fi environment is the RADIUS server: it receives RADIUS packets from the Wi-Fi Access Point / Controller (see below), processes those by either proxying it to another server (in a roaming environment) or by processing the packet and authenticating the user itself.
To authenticate the user, the RADIUS server extracts the EAP authentication data from the EAP-Message attribute of the RADIUS packet and acts on the contents - It takes the role of an EAP server.
EAP authentication typically involves establishing a TLS tunnel with a server certificate (i.e. the user authenticating the server) and then exchanging user credentials (i.e. the user authenticating to the server). After the authentication with EAP, the RADIUS server adds VLAN assignment attributes and other authorisation data, and sends those in the final RADIUS packet.
FreeRADIUS excels not only at RADIUS, but also in its role as EAP server. It supports a wide variety of EAP authentication methods and allows sending additional authorisation data. It supports RADIUS proxying of EAP authentication traffic and thus enables roaming; and it supports altering authorisation parameters after the initial authentication has taken place (CoA).
Wi-Fi
The access point / Wi-Fi controller needs to be capable of the WPA2 Enterprise operation mode; configuration options in the device are often called IEEE 802.1X Authentication, RADIUS or WPA Enterprise. In this operation mode, the device becomes a NAS (i.e. RADIUS client), so needs to be configured with the IP address of the RADIUS server to connect to and the corresponding shared secret for the RADIUS communication as configured on the RADIUS server.
The aforementioned per-user VLAN assignment is not part of IEEE 802.1X; it is an optional feature described by RFC 3580, and may not be available on your particular controller. If you are provisioning devices and find this feature valuable, you should look for features called "Dynamic VLAN Assignment" "VLAN Override" or similar. To make use of the feature, the last RADIUS packet sent from the RADIUS Server to the Access Point, the Access-Accept packet, needs to include VLAN assignment attributes.
User Device Configuration
After having completed the RADIUS server and Wi-Fi equipment setup, it is possible for users to authenticate securely to the network and to verify that they are not connected to an attacker network ("evil twin").
For this possibility to actually happen, the network operator needs to communicate the pertinent RADIUS server settings to all end users, and they need to ensure that the end users transform these server-side settings into a proper client-side configuration.
This typically involves:
- Import or mark as trusted the CA certificate to validate the RADIUS server’s certificate.
- Configure the expected server name of the server certificate.
- Select an EAP type on the client device which matches one of the configured EAP types on the server.
- Optionally enable extra features such as enhanced privacy protection (use of anonymous outer identities) etc.
Network administrators should be aware that neglecting to secure the client-side setup puts the security of the enterprise network at risk - badly configured user devices can be tricked to connect to a rogue AP / evil twin network! Such an attacher network can learn their credentials as they authenticate - and the attacker can from then on log into the genuine network with those same credentials. The attacker can also inspect their payload - with the false feeling of being connected to the own enterprise network, some users or their applications may use unencrypted communication where they should not.
Manual setup instructions in e.g. PDF "click here and there" instructions have proven to be error-prone, time-consuming and typically trigger significant helpdesk activity.
There are automatic deployment tools for various platforms on the market; e.g the "Apple Configurator" application can produce configuration files for iOS devices and Mac OS computers.
There are also web services which cater for a variety of platforms at the same time. Many of those are commercial, but some provide their services for free or freemium. One such example is the Enterprise Network Configuration Assistant Tool (CAT) at https://802.1x-config.org - all basic end-user device provisioning functionality on all supported platforms (Windows, Mac OS, iOS, Linux) is free; extra features such as custom branding or digitally signed installation programs are a paid-for extra.
If your interest in reading this page is because you are part of the "eduroam" roaming consortium: you get a full-service client-side installer generator (and more!) at eduroam CAT.