text:
Big welcome to Hyperscale (Citus) on Azure Database for PostgreSQL, now in Preview. Learn more.
Our beloved Structured Query Language may be the lingua franca for relational databases—but like many languages, SQL is in a state of constant evolution. The first releases of SQL didn't even have a notation for joins. At the time, SQL only supported inner joins.
Cross Joins and Where Filters
As a result, back in early eighties, the only way to express a join condition between tables would be in the WHERE clause.
select companies.name, campaigns.name, campaigns.monthly_budget from companies, campaigns where companies.id = campaigns.company_id and company_id = 5;
In that query, the PostgreSQL planner realizes that we are doing an INNER JOIN in between the companies table and the campaigns table, even though what we are actually writing is a CROSS JOIN in between the tables. In PostgreSQL documentation chapter Table Expressions we can read more about the CROSS JOIN operation:
For every possible combination of rows from T1 and T2 (i.e., a Cartesian product), the joined table will contain a row consisting of all columns in T1 followed by all columns in T2. If the tables have N and M rows respectively, the joined table will have N * M rows.
FROM T1 CROSS JOIN T2 is equivalent to FROM T1 INNER JOIN T2 ON TRUE (see below). It is also equivalent to FROM T1, T2.
In my opinion, it is so rare that what you want to achieve actually is a cross join that cross joins should fail your SQL unit testing. After all, code should always express the intentions of the programmer, and if your intention is not to implement a CROSS JOIN then using a comma separated list of tables in your FROM clause looks deadly suspicious.
Inner And Outer Joins in SQL
The previous SQL query can be written properly with an inner join syntax:
select companies.name, campaigns.name, campaigns.monthly_budget from companies inner join campaigns on companies.id = campaigns.company_id where company_id = 5;
Lucky for us, the PostgreSQL planner is smart enough to realize that both queries are specifying the same result set and accordingly executes the same plan to fetch it.
Now, if a company didn't program any advertising campaigns yet, then the company won't be listed at all in the output. What if you want to list all companies, whether or not they have campaigns attached to them? In that case we would use an SQL outer join:
select companies.name, campaigns.name, campaigns.monthly_budget from companies left outer join campaigns on companies.id = campaigns.company_id where company_id = 5;
The keywords INNER and OUTER in the SQL syntax above are noise words that the SQL standard allows. These noise words are not mandatory. After all, a LEFT JOIN is always an OUTER join, there's no choice here. So we can rewrite the query that way:
select companies.name, campaigns.name, campaigns.monthly_budget from companies left join campaigns on companies.id = campaigns.company_id where company_id = 5;
Planning for Joins with the PostgreSQL database
We said that PostgreSQL is smart enough to realize that there's more than one way to specify the same result set with SQL queries written in different ways.
So it follows that one of the tasks that the PostgreSQL planner must implement consists of finding the most efficient way to execute the JOIN specified in the query.
After all JOIN(A, B, C) gives the same results as JOIN(JOIN(A, B), C) and the same result as JOIN(A, JOIN(B, C)). So how does PostgreSQL decide which order to prefer?
It turns out this problem was solved by a pioneer in relational databases
Patricia Selinger co-published Access path selection in a relational database management system in the Proceedings of the 1979 ACM SIGMOD international conference on Management of data, pp 23-34, where she exposes the algorithm she invented to plan for JOIN operations in SQL. Here's the summary of the paper:
In a high level query and data manipulation language such as SQL, requests are stated non-procedurally, without reference to access paths. This paper describes how System R chooses access paths for both simple (single relation) and complex queries (such as joins), given a user specification of desired data as a boolean expression of predicates. System R is an experimental database management system developed to carry out research on the relational model of data. System R was designed and built by members of the IBM San Jose Research Laboratory.
The Selinger Algorithm is still in use as of today in PostgreSQL source code, and Daniel Gustafsson did an awesome job at presenting the Selinger algorithm in his presentation titled Through The Joining Glass that he delivered at PGConf.EU 2017, last year. If you want to learn more about how PostgreSQL implements JOINs, read Daniel's slides!
Planning for Distributed Joins with PostgreSQL and Citus
When using Citus to scale out PostgreSQL horizontally (often to reap the performance benefits of a scale-out database architecture)—the same query as above might be fetching data from distributed tables. Because Citus is a PostgreSQL extension, Citus benefits from all the smarts that PostgreSQL provides when planning the query. A nice thing about this step in the planner is the Equivalence Class processing, which allows Citus to leverage the fact that PostgreSQL knows how to read the join condition and where clauses and inject the filters everywhere needed.
When PostgreSQL is done planning the query, Citus knows that there is a join
in between the companies and campaigns table, and also that both
campaigns.company_id = 5 and
company_id = 5.
If you're developing a multi-tenant application (like a SaaS app) this means you can use Citus to scale out your data and your queries across multiple nodes. You can shard by company id and Citus will know to route the query down to a single shard (on a single node.) This Citus multi-tenant app tutorial does a good job guiding you through the process of using the Citus database to scale out a multi-tenant application.


text:
Did you know that Hook Grasses can control water loss by folding up their leaves?
Contrary to their common name, Hook Grasses are not grasses but Sedges and they belong to the family Cyperaceae. Sedges are commonly found in wet or poorly drained habitats. Hook Grasses, however, can be found in a much greater diversity of habitats.
In New Zealand, Hook Grasses can grow in costal scrub, forests, swamps, grasslands or herbfields in sub-alpine and alpine habitats.
Although Hook Grasses have colonised drier habitats, water is still important for their survival and they use a very clever system, operated by so-called bulliform cells, to regulate water loss. Bulliform cells are large, bubble-shaped cells found in the upper surface of the leaves. In Hook Grasses these cells are found all along the midrib.
When water availability is low, these cells shrink causing the leaf blade to fold. Each side of the leaf blade, at either side of the midrib, moves towards each other like closing a book. By folding their leaves these sedges reduce the area exposed to sunlight and therefore water loss by evaporation.
This mechanism allows water to be maintained inside the plant. Once water is available again, these cells enlarge and the leaf blade unfolds again.

source: HuggingFaceFW/fineweb-edu


Nod (gesture)
From Wikipedia, the free encyclopedia
Jump to: navigation, search
A depiction of a man nodding
Nodding to indicate acceptance[edit]
Different cultures assign different meanings to the gesture. Nodding to indicate "yes" is widespread, and appears in a large number of diverse cultural and linguistic groups. Areas in which nodding generally takes this meaning include the Indian subcontinent (note that the head bobble also shows agreement there), Iran, Southeast Asia, Western Europe, Latin America and North America. Nodding may also be used as a sign of recognition in some areas. Nodding is also used to show respect. Insult can be inferred if it is not returned in kind.
Nodding to indicate refusal[edit]
There are few exceptions with some countries swapping the meanings between nodding and shaking head: in Greece, Macedonia, Bulgaria and Albania a single nod of the head up (not down) indicates a "no".
There are varying theories as to why nodding is so frequently used to mean "yes". One simple theory is that it is a form of bowing, indicating that one is prepared to accept what another person is saying or requesting.[citation needed] It has also been stated[1] that babies, when hungry, search for milk by moving their heads vertically, but decline milk by turning their head from side to side.
An early survey of nodding and other gestures was The Expression of the Emotions in Man and Animals, written by Charles Darwin in 1872. Darwin wrote to missionaries in many parts of the world asking for information on local gestures, and concluded that nodding for "yes" was common to many different groups.
Nodding as greeting[edit]
Nodding can also be used as a form of nonverbal greeting or acknowledgement of another's presence; in this context, it is essentially an especially mild form of bowing, with just enough movement to show a degree of respect without additional formality. This includes the traditional downwards nod, or the upwards nod (which is more informal and usually used among friends or subordinates). To increase the formality, the downwards nod may also be accompanied by a suitable verbal greeting.
Nodding syndrome[edit]
Nodding is also a symptom of a yet unexplained disease. It affects mostly children under 15, and was first documented in Tanzania in 1962.[2]
See also[edit]
External links[edit]


Tentation de Saint-Antoine, 1888
This suite of 10 lithographs by French printmaker and painter Odilon Redon (1840–1916) was inspired by scenes from Gustave Flaubert's La tentation de Saint-Antoine (1874). Equal parts play and novel, Flaubert's text dramatically re-creates a night in which the hermit Anthony, alone in the desert, experiences a variety of temptations orchestrated by the Devil.
Forming one of Redon's most famous series, these prints demonstrate the artist's mastery of lithography and his ability to imitate the textures, tones, and rich blacks of his charcoal drawings, called noirs. Like other symbolist works from the period, Redon's Tentation de Saint-Antoine evokes dreams and the hidden passages of the imagination.


X by taking the union of all the elements of \mathcal{R} together, and it's a \sigma-ring because countable unions are included under all unions. The converse is a little hairier.
First off, every totally finite measure algebra (\mathcal{S},\mu) is complete. That is, if \mu(X)<\infty — and thus \mu(E)<\infty for all E\in\mathcal{S}, then every collection \mathcal{E} of elements of \mathcal{S} will have a union.
We let \hat{\mathcal{E}} be the collection of all finite unions of elements in \mathcal{E}, all of which exist since \mathcal{S} is a Boolean ring. We let \alpha be the (finite) supremum of the measures of all elements in \hat{\mathcal{E}}. Since this is a finite supremum, there must be some increasing sequence \{E_n\} so that \mu(E_n) increases to \alpha. I say that the union E of the sequence \{E_n\} — which exists because \mathcal{S} is a \sigma-ring — is the union of all of \mathcal{E}.
Indeed, we must have \mu(E)=\alpha by the continuity of the measure \mu. Take any set E_0\in\mathcal{E} and consider the difference D=E_0\setminus E, which is the amount by which E_0 extends past E. Our assertion is that this is always \emptyset. Define the sets D_n=E_n\uplus D, which is a disjoint union since D is disjoint from E. Each of the D_n is in \hat{\mathcal{E}}, and the limit of the sequence is E\uplus D. This set has measure
\displaystyle\mu(E\uplus D)=\mu(E)+\mu(D)=\alpha+\mu(D)
but since each of the \mu(D_n) is bounded above by \alpha then so is their limit. Thus \mu(D)=0, and thus D=\emptyset, since we consider all negligible sets to be the same.
The same is true for totally \sigma-finite measure algebras. Indeed, we can break such a measure algebra up into a countable collection of finite measure algebras by breaking X into a countable number of elements X_n so that \mu(X_n)<\infty. We define the finite measure algebra \mathcal{S}_n to consist of the intersections of elements of \mathcal{S} with X_n. Then given any collection \mathcal{E}\subseteq\mathcal{S} we consider its image under such intersections to get \mathcal{E}_n\subseteq\mathcal{S}_n. What we said above shows that each of these collections has an intersection E_n\in\mathcal{S}_n, and their union in \mathcal{S} is the union of the original collection \mathcal{E}.
August 10, 2010 Posted by | Algebra, Ring theory | Leave a comment
Functions on Boolean Rings and Measure Rings
We're not just interested in Boolean rings as algebraic structures, but we're also interested in real-valued functions on them. Given a function \mu:\mathcal{R}\to\mathbb{R} on a Boolean ring \mathcal{R}, we say that \mu is additive, or a measure, \sigma-finite (on \sigma-rings), and so on analogously to the same concepts for set functions. We also say that a measure \mu on a Boolean ring is "positive" if it is zero only for the zero element of the Boolean ring.
Now, if \mathcal{S} is the Boolean \sigma-ring that comes from a measurable space (X,\mathcal{S}), then usually a measure \mu on \mathcal{S} is not positive under this definition, since there exist sets of measure zero. However, remember that in measure theory we usually talk about things that happen almost everywhere. That is, we consider two sets — two elements of \mathcal{S} — to be "the same" if their difference is negligible — if the value of \mu takes the value zero on this difference. If we let \mathcal{N}=\mathcal{N}(\mu)\subseteq\mathcal{S} be the collection of \mu-negligible sets, it turns out that \mathcal{N} is an ideal in the Boolean \sigma-ring \mathcal{S}. Indeed, if M and N are negligible, then so is M\Delta N, so \mathcal{N} is an Abelian subgroup. Further, if N\in\mathcal{N} and E\in\mathcal{S}, then E\cap N\in\mathcal{N}, so \mathcal{N} is an ideal.
So we can form the quotient ring \mathcal{S}/\mathcal{N}(\mu), which consists of the equivalence classes of elements which differ by an element of measure zero. This is equivalent to our old rhetorical trick of only considering properties up to "almost everywhere". Using this new definition of "equals zero", any measure \mu on a Boolean \sigma-ring \mathcal{S} gives rise to a positive measure on the quotient \sigma-ring \mathcal{S}/\mathcal{N}(\mu). In particular, given a measure space (X,\mathcal{S},\mu), we write \mathcal{S}(\mu)=\mathcal{S}/\mathcal{N}(\mu) for the Boolean \sigma-ring it gives rise to.
We say that a "measure ring" (\mathcal{S},\mu) is a Boolean \sigma-ring \mathcal{S} together with a positive measure \mu on \mathcal{S}. For instance, if (X,\mathcal{S},\mu) is a measure space, then (\mathcal{S}(\mu),\mu) is a measure ring.. If \mathcal{S} is a Boolean \sigma-algebra we say that (\mathcal{S},\mu) is a measure algebra. We say that measure rings and algebras are (totally) finite or \sigma-finite the same as for measure spaces. Measure rings, of course, form a category; a morphism f:(\mathcal{S},\mu)\to(\mathcal{T},\nu) from one measure algebra to another is a morphism of boolean \sigma-algebras f:\mathcal{S}\to\mathcal{T} so that \mu(E)=\nu(f(E)) for all E\in\mathcal{S}.
I say that the mapping which sends a measure space (X,\mathcal{S},\mu) to its associated measure algebra (\mathcal{S}(\mu),\mu) is a contravariant functor. Indeed, let f:(X,\mathcal{S},\mu)\to(Y,\mathcal{T},\nu) be a morphism of measure spaces. That is, f is a measurable function from X to Y, so \mathcal{S} contains the pulled-back \sigma-algebra f^{-1}(\mathcal{T}). This pull-back defines a map f^{-1}:\mathcal{T}\to\mathcal{S}. Further, since f is a morphism of measure spaces it must push forward \mu to \nu. That is, \nu=f(\mu), or in other words \nu(E)=\mu(f^{-1}(E)). And so if \nu(E)=0 then \mu(f^{-1}(E))=0, thus the ideal \mathcal{N}(\nu)\subseteq\mathcal{T} is sent to the ideal \mathcal{N}(\mu)\subseteq\mathcal{S}, and so f^{-1} descends to a homomorphism between the quotient rings: f^{-1}:\mathcal{T}(\nu)\to\mathcal{S}(\mu). As we just said, \nu(E)=\mu(f^{-1}(E)), and thus we have a morphism of measure algebras f^{-1}:(\mathcal{T}(\nu),\nu)\to(\


text:
During Rwanda's 1994 genocide, Marie lost her husband.
But thanks to Landesa's work in Rwanda, she didn't lose her land.
Land is critical to survival in Rwanda. Ninety percent of the population earns their livelihoods from agriculture. Without land, there is no shelter, no food, no income.
Without her husband, Marie feared she would be dispossessed of this important asset – land. She would have no way to support herself and her family.
Landesa's work in Rwanda prevented this.
Landesa recognizes that clouded land ownership and the resultant conflicts over land in Rwanda, one of Africa's most densely population countries, was one of the contributing factors to the genocide. And we understand that secure land ownership will help create the foundation for the country's recovery.
Landesa began work in Rwanda in 2003.
First, Landesa helped design and implement a pilot program to title and register land rights in a few Rwandan villages – including Marie's. The pilot program not only educated Marie and her neighbors about their rights, it created institutions to ensure that Marie and Rwanda's other widows wouldn't be dispossessed.
Landesa now continues its work in Rwanda to secure and protect women's land rights in an effort to ensure that women like Marie can support themselves and their families. Landesa is advising Rwanda's Ministry of Lands to ensure that both men and women understand the significance of, participate in, and benefit from, the roll out of a national land titling and registration program that is on going.


text:
Vikings discussion activity|
The activity shown below is designed to help introduce the topic of the Vikings. It looks at some of the words associated with the passing of time and Viking life. Click on the link to view the activity. The activity would work particularly well when used in conjunction with an interactive whiteboard.

source: openbmb/Ultra-FineWeb


text:
How to show image linked to the list element
For example, if you want to show the linked image and text for the selected item:
To create a drop-down list with linked images, do the following:
I. Create a drop-down list from your data (see Creating a drop-down list in a cell for more details):
In this example the drop-down list was created in the List sheet:
II. To show the linked picture of the selected item, do the following:
1. Create the name range of pictures:
1.1. On the Formulas tab, in the Defined Names group, click Define Name (see Creating and using named ranges for more details):
1.2. In the New Name dialog box:
- In the Name field, enter the name of this new range, for example, Pictures,
- In the Refers to field, enter the formula:
= INDEX (, MATCH (, , 0))
In this example:
= INDEX (Data!$C$3:$C$7, MATCH (List!$B$3, Data!$B$3:$B$7, 0))
2. Select any picture and copy it by doing one of the following:
- On the Home tab, in the Clipboard group, click the Copy button:
- Right-click in the selection and choose Copy in the popup menu,
- Click Ctrl+C.
3. Select the cell where you want to show the linked picture.
4. On the Home tab, in the Clipboard group, click on the Paste list and then choose one of the options:
- Keep Source Formatting:
5. Select the pasted picture and in the Formula Bar type the name of your range (in this example, Pictures):
III. To show the linked text of the selected item, do the following:
On the appropriate cell, where you want to see the linked text, enter the following formula:
= VLOOKUP (, , , )
Where should be:
- TRUE, if items in your table are sorted,
- FALSE, if items should find an exact match.
In this example:
= VLOOKUP (B3, Data!$B$3:$D$7, 3, FALSE)
See also this tip in French: Comment afficher l'image liée à l'élément de liste.


text:
Hey, this is a combination of the GSON parser as well as the json specification.
If you leave the 'Strings' absent from the JSON payload, then they will resolve to 'null' on the Client, however this will not work with 'Integers', with will default to 0. It looks like GSON treats all numbers as 'int's, which cannot be null.
As a workaround, if you need null values for numbers, you can either add a boolean flag to indicate if a value has been set 'doorsSet: false', or you can treat all numbers as Strings and then do a 'Integer.valueOf(...)' to get the numerical value.
over 8 years ago
Hello Edward, thank you for your explanation.
My solution is ugly : if(myBean.getField() == 0) myBean.setField(null);
I'm using the Kinvey console to update values in the data store and I want to represent "null" values.
For instance, if I have a "Car" collection with 2 columns : "doors" (integer) and "name" (string).
The json could be :
In the Java bean, we have :
> private Integer doors;
> private String name;
After loading data :
> "doors" is an Integer equal to 0
> "name" is a String equal to null
Could you tell me what is the best way to manage null values using the Kinvey console?


text:
Class blogs are an excellent starting point. But the most incredible outcomes are observed when students are progressed onto their own individual blogs.
Why? Human nature!
As individuals we're all driven by personal ownership; class blogs have less sense of ownership than an individual blog.
In this seventh activity you will:
- Learn about the recommended approach to setting up individual Student Blogs
- Gain tips for creating student blogs
- Learn how to create student blogs using the Blog & User Creator – Edublogs Pro/Campus users only
- Learn how to create student blogs using the Edublogs Signup page – free Edublogs users only
- Complete the extension activity (if you have time).
Step 1: Recommended Approach to Setting up Student Blogs
As highlighted in Student Blogging Activity 5 (Beginner): Add Students To Your Class Blog So They Can Write Posts the best approach to student blogging is to take it slowly.
Benefits of this approach include:
- Gives you time to increase your own skills while educating your students on appropriate online behaviour.
- You're less likely to have problems if you take this approach.
If you decide to increase your students' blogging roles it's a good idea to introduce it slowly in the following three steps:
The idea is as they show increased responsibility you move them onto the next stage of blogging. And remember you can stage granting students rights to post on the class blog and having their own student blog.
For example, you might gradually allow three students at a time rights to post on the class blog. Then use these students to teach the next group of three students how to post on the class blog and so on.
Once they're working well on the class blog then you start creating and assigning them their own individual student blog.
Step 2: Tips for creating student blogs
#1 Choosing Usernames and Blog URLs
Educators normally use the same name for both the student's username and blog URL. Keep them simple and easy for the student to remember.
Most use a combination of their student's first name followed by numbers that might represent the year, class number and/or school initials. They do this to protect the identity of the student by not including their last name and to ensure their username is unique (as Edublogs has close to 1,000,000 users).
For example, username misty16 or mistybp16. For example, username mistybp16 and blog URL mistybp16.edublogs.org.
If you want the students to use the blog for their entire school life then use a combination of letters combined with a number that represents the year they started school or are finishing school.
#2 Adding yourself to your student blogs
Always add yourself as an administrator to your student blog.
This means if you need to edit/delete a post, page or comment you can quickly access their blog from your blog dashboard.
The easiest way to do this is to set up your student blogs using the Blog & User Creator inside an Edublogs Pro blog — making sure you select add as Admin.
Accessing a student blog's dashboard is as simple as:
- Click on Dashboard > My Blogs
- Click on the Dashboard link under the Blog Title you want to access and this will take you to the dashboard of that student blog
#3 Moderating Comments
Educators either prefer to let their students moderate their own comments or they moderate all the comments for their students. There are pros and cons to each approach.
For those comfortable with students moderating comments we recommend you subscribe to the comment feeds from your student blogs — here is how to subscribe to their comments using Google Reader.
If you want to moderate all comments, so comments are only posted once you have approved them, you need to create the blogs using the gmail+ method.
How it works is you set up one Gmail account for your class and then add a + sign and a different number and/or letter(s) to the end of your email name for each student.
Gmails ignores anything in the first half of an email address after a plus sign.
So if you create each email with the format _EMAIL_ all emails will be sent to the inbox of _EMAIL_
- You must use a real gmail account– educators either use their own gmail account or set up a gmail account for their class e.g. _EMAIL_
#4 Assigning Student Role
You need to think about how much responsibility your students are given. Do you want them to be able to write own posts/pages, change themes, add widget and approve comments or do you want (or need) to limit their level of responsibility?
The five roles for users you can give students on their student blogs are: Administrator; Editor; Author; Contributor; and Subscriber.
Deciding which role to assign them is a balance between:
- How much responsibility you're comfortable with assigning your students
- School and District guidelines
- Providing them with an environment that's motivating
If you want to approve all posts before they can be published then assign them the role of contributors. If you do assign them the role of contributor it means their posts will be submitted as pending and you'll need to visit their blog dashboard to approve their posts. If you've added yourself as an admin user you can see all pending posts and comments on your student blogs by going to Dashboard > My Blogs.
For more info refer to Managing Students on Blogs…What Role Do You Assign Students?
For those comfortable with students having a higher level of responsibility I recommend you subscribe to the post feeds from your student blogs — here is how to subscribe to their posts using Google Reader.
Here is a summary of their differences based on User Capability:
Here is a summary of their differences based on access to features in the dashboard:
Step 3: Create the student blogs
How you create the blogs depends on the type of Edublogs blog you have:
- If you are using an Edublogs Pro/Campus blog – you create the student blogs using the Blog & User Creator inside your dashboard.
- If you are using a free Edublogs blog — you'll need to create the student blogs using the Edublogs sign up page. You'll need to add yourself as an admin user once the blogs are created.
Remember spam filters, especially strict ones for institutional email addresses, often block activation and password reset emails from Edublogs.org. If unsure use free webmail accounts such as gmail, hotmail that don't block these invitation emails.
There are no limitations on the number of student blogs you can create!
#1 Creating Student blogs using the Blog & User Creator
The Blog & User Creater is designed specificially to save time and make it easy for educators to mass create student blogs.
Creating the blogs is a simple as:
1. Go to Users > Blog & User Creator in your Dashboard.
2. Click on Create Blogs tab.
3. Select their role on their new blog, their role on your blog, your role on their blog and select 'Upgrade to give access to new premium features and other features'.
- We recommend the use of pre-set passwords as it means students will be able to log in if you got the email address wrong or their login email is blocked by filters on their email account.
3. Add the usernames
- Use only lowercase letters and numbers, with no spaces, in the username
- The username is what they use to sign into the blog dashboard and is displayed on posts and comments they write. You can't change a username, however you can change what name is displayed.
- If you are creating a new username and see 'Sorry, that username already exists!' it means you need to use a more unique username. Remember there is over 1,000,000 users in Edublogs.org. A simple solution for students is to use a combination of their first name, school initials and their room or year.
4. Add their email address
- You can't create several usernames with the same email address because the system resets password based on email address. But you can trick it using the gmail+ method
- Spam filters, especially strict ones for institutional email addresses, often block these activation emails. If unsure use free webmail accounts such as gmail, hotmail that don't block these invitation emails.
5. Add their password
- Leave this blank if you want to let the system automatically create the password
6. Add their blog urls
- You can't change a blog URL once a blog is created so choose carefully
7. Add Blog title
- This can be changed later in Settings > General
8. Click Submit at the bottom of the page
#2 Creating Student blogs using the Edublogs Signup page
If you are using a free Edublogs blog you'll need to create the student blogs using the Edublogs sign up page. You'll need to add yourself as an admin user once the blogs are created.
Here is how you do it:
1. Go to Edublogs.org
2. Click on the 'Free' image
3. This takes you to the Edublogs sign up page where you need to enter your desired username, email address, tick you agree to TOS (terms of Service) and then click Next.
- You will be sent an activation email once your account is created. This email normally arrives within 30 minutes.
- You have 48 hours to click on the link in the email to activate your blog otherwise you will need to reset up your account.
- Spam filters, especially strict ones for institutional email addresses, often block these activation emails. If unsure use free webmail accounts such as gmail, hotmail that don't block these activation emails.
- Use only lowercase letters and numbers, with no spaces, in your username
- Your username is what you use to sign into your blog dashboard and is displayed on posts and comments you write. You can't


Tutorials
Articles
OpenGL Demos
Games
OpenGL Misc
MSG Board
About
Donate
Links
Home
Megabyte Softworks
C++, OpenGL, Algorithms
Current series: OpenGL 3.3
(Return to list of OpenGL 3.3 tutorials)
Download (7.18 MB)
2686 downloads. 9 comments
22.) Specular Lighting
Changelog
28.7.2013 - Improved specular lighting calculation shader a little, that should improve performance by not doing some unnecessary calculations.
</Changelog>
Hello guys! This is the 22nd tutorial from my series, this one teaches specular lighting, which is the final part of basic light model and also how to display normals of an object using geometry shader. Normal displaying can be good for many purposes, for example some debugging of rendering stuff. So let's get down to business.
Specular Lightning
So far, we have been dealing with two parts of light - ambient and diffuse. To recap: ambient part is the part of light that is constantly present with specific intensity and represents light that has been scattered all over the place and provides constant illumination. Diffuse part requires a little calculation and depends on the angle between surface normal and direction of light. Today, we are going to add yet another part - specular part. This is a part, that is responsible for creating shiny effects on materials like metal, but only if we look at the object from specific place. And that's where another variable comes to play - specular part doesn't depend only on normal, but also on material properties of object and most importantly - position of the viewer!
Let's get into some deeper details. Camera (the player, you, whatever ) looks at the object. Because our light has some specified direction, it hits the object and the object reflects light back depending on the normal. The angle between incident vector (vector that comes from light source and hits the object) and normal is same as angle betweem reflected vector and normal. The following illustration shows this pretty clearly:
I is the vector that is coming from the light source to the surface. However, I used negated vector I, so that I would align it properly with reflected vector R. Original incident vector points to the surface. The angle Thetai and Thetar are identical. Now, the known variables are these - vector I and vector N. Our goal is to find vector R. This will be the first task to calculate specular reflection.
Reflection equation
There is an old saying, that my parents used to tell me when I was younger. It was something like this: "Son, wherever you'll be in trouble and you'll need to calculate reflected vector, it's this:"
('*' stands for regular multiplication and '.' stands for dot product). If you really think, that my parents taught me this, they didn't . This is the equation you can find anywhere around the internet. Now there are two approaches to this - either you just learn it, memorize it and believe it works, or you will try to understand how could someone come with such an equation. In the following lines, I will do my very best to explain this.
The trick here is to complete a parallelogram using the incident and reflected vertex. This parallelogam will help us understand several things, so now a picture is worther than thousands of words written here:
You may notice several things here. First, there is a mysterious vector X, which goes from the point of impact to the center of parallelogram. If we continue further in that direction, we will notice, that at the endpoint of the parallelogram we actually have 2X. But how do we get X? Really easily . X is just vector -I projected on normal vector. This means, that the dot product of -I and N results in a number (a scalar), which basically says how much we need to multiply N to get to the center of the parallelogram. This way, we get vector X (not mysterious anymore ).
Now some really basic vector additions are remaining. We can see, that following equation holds:
From my previous arguments we can conclude, that:
If we replace X in the equation 1, we get:
Finally, doing some basic rearrangements of equation, we will get the formula I mentioned at the beginning (the one from the old saying ):
So we passed the point, where we all should understand the reflection equation and how it was developed. Some notes though: you should always normalize the resulting vector to get unit vector. The vector that is being reflected will be reflected by a vector with SAME LENGTH (supposing that the normal vector is unit vector, if the normal isn't of unit length, reflected vector won't have proper length), so if you normalize your incident vector before applying reflection equation, you should be fine even without normalizing after. But never forget to normalize a normal ok? This fact just holds, if you look at all the previous pictures, it's obvious. I have even brute-force checked it, i.e. I generated ten thousands of random vectors and normalized normals to see, if after applying reflection equation they would have same length, and they all did . I bet, there is some really easy way to prove this mathematically, but I don't really know at this very moment .
With the reflected vector in our hands, we can finally go to some more theory behind specular highlights on objects.
Specular Highlights
Specular highlights on objects appear, because the light reflected from the object hits viewer. Sometimes, we are hit directly by the light and the highlight appears to be very intense, and sometimes we are hit so slightly, that we basically don't see the specular highlight. The strength of this highlight depends on cosine of angle between the reflected vector and vector taken from the point at oject to the viewer's position:
Now you can see it all clearly. In addition to the reflected vector, we need to calculate vector from the object's point to the viewer and then we can calculate cosine of angle between these two vectors using dot product. Now, you MUST make sure that both vectors are normalized to get correct cosine. The resulting value is called Specular Factor. However, the specular factor isn't all that is playing role in specular highlight. The highlight depends on another factor - material properties. In this world, we have many different materials and not all of them shine. Take wood for example. Can you imagine shining wood? In real world, I cannot, but we can program it of course .
Material properties
Jokes aside, there are basically shiny materials, like gold, metal, silver, and dim materials, like wood, fabrics and so on. In old good OpenGL, you could set material properties with functions like glMaterialfv. There were several properties to set, but we will only play with two, that are really basic and included in every lighting model I've seen so far - Specular Power and Specular Intensity.
Specular Power is the number, that we exponentiate specular factor to. It's usually ranging from 1 to 128 at max (I think these were the limits in old OpenGL, but in shaders you can work with arbitrary numbers of course and go beyond these limits). Why would we do this? Without doing this, the specular highlight would be too big, too unrealistic and too wide. Just think about it. Specular factor is the number ranging from 0 to 1 and it's obtained by cosine of the angle. The cosine of 0 degrees is 1 and at 45 degrees it's still 0.707. This means, that the specular highlight would be too powerful looking from even pretty big angles like 45 degrees. By exponentiating this number to a power like 32, we will get significantly lower number. For the record, 0.70732 is already really small number - 0.000015185, which means that the highlight will be practically not visible from this angle. However, if we aren't too askew from the reflected vector and the cosine of angle is a number close to 1 (let's say 0.97), the resulting value would be 0.9732 = 0.377, which is a reasonable number and that will make the highlight visible! So by playing with power, you can change the size and intensity of specular highlight. Try it and play around with this number. See for yourself, that if you set the power to 1, the highlight is no good, it's just a mess . I also allow you to go to negative values to see what happens if you raise specular factor to negative powers. It's just fun .
Specular Intensity is now a really, really simple thing in comparison to specular power. After you raised specular factor to specular power, specular intensity just linearly controls the intensity of calculated highlight. So if we calculated highlight was for example 0.377 and our specular intensity is 0.5, the very final value will be 0.377 * 0.5 = 0.1885. There is really nothing difficult here.
I hope, that now it is clear to you, what Specular Factor, Specular Power and Specular Intensity are. With the knowledge you should have now, we can move to actual code in the shaders.
Shader Code
All of the code is inside the dirLight.frag, because the light we work with in this tutorial is only classic directional light. This direction of light is going to be incident vector


text:
A timeline history of the Top 15 Countries in Europe Continent has the Highest Number of Carbon Dioxide emissions starting from the year 1960 to 2016. Numbers represent the total number of CO2 emissions in kiloton (kt) for the Top 15 Countries on the European Continent.
The unit of measurement of Carbon dioxide is kt (kiloton). Carbon dioxide emissions are often calculated and reported as elemental carbon. They were converted to actual carbon dioxide mass by multiplying them by 3.667 (the ratio of the mass of carbon to that of carbon dioxide).
Carbon dioxide (CO2) is the primary greenhouse gas emitted through human activities.
Have fun and enjoy it! Sap Wayne video.

source: m-a-p/FineFineWeb


text:
The law relating to labour and employment in India is primarily known under the broad category of "Industrial Law". Industrial law in this country is of recent vintage and has developed in respect to the vastly increased awakening of the workers of their rights, particularly after the advent of Independence. Industrial relations embrace a complex of relationships between the workers, employers and government, basically
concerned with the determination of the terms of employment and conditions of labour of the workers. Escalating expectations of the workers, the hopes extended by Welfare State, uncertainties caused by tremendous structural developments in industry, the decline of authority, the waning attraction of the work ethics and political activism in the industrial field, all seem to have played some role.
Click here for labour laws


text: Daniel Buren is a French Conceptual artist best known for his distinctive site-specific installations of alternating stripe patterns. His concept of a "degree zero of painting", which he developed in the early 1960s, is the artist's hallmark approach to the conditions of making a work of art. Throughout his work, he often employs simplified patterns as an approach to color and graphics in relation to architecture and space. "My painting, at the limit, can only signify itself", he once declared. "It is. So much so, and so well, that anyone can make it and claim it". Born on March 25, 1938 in Boulogne-Billancourt, France, he went on to study at the Ecole Nationale Supérieure des Métiers d'Art in Paris, where he graduated in 1960. Buren's work soon developed to focus on the formal qualities of stripes as an aesthetic archetype, inspired by their ubiquity in both mercantile designs and clothing in his native France. Today, Buren's works are in the collections of the Musée d'Art Moderne de la Ville de Paris, the Tate Modern in London, The Museum of Modern Art in New York, and the Moderna Museet in Stockholm, among others. He lives and works in Paris, France.


text:
OWL (Our Whole Lives)
OWL is a values-based curriculum that helps participants make informed and responsible decisions about their sexual health and behavior. It equips participants with accurate, age-appropriate information in six subject areas: human development, relationships, personal skills, sexual behavior, sexual health, and society and culture. Grounded in a holistic view of sexuality, OWL provides not only facts about anatomy and human development, but helps participants to clarify their values, build interpersonal skills, and understand the spiritual, emotional, and social aspects of sexuality.
In order for a child to participate in the program, parents must attend a mandatory orientation session. At the orientation session, the teaching team will introduce parents to the curriculum and the philosophy of the program.


from the web, through ports -- typically as serial or TCPIP data, or from attached instruments that communicate through specialized device drivers.
Input from a console and keyboard
To have a Python program accept data from a user at a console, include lines like these in Python 2.7
newtext = raw_input()
print newtext
to take the raw input as text and print it. You can prompt for the input too
newtext = raw_input('Write what you like: ')
print 'This is what I like: ', newtext
In Python 2.7 there is also a Python command "input()" which treats incoming text as Python code. With Python 3.0 this has changed, so some care is needed if you write for the new Python. In that case, rather than raw_input() you would use input(), and to get the effect of the old "input()", you would use eval(input()). You can see why using the newer Python 3.0 with older programs can raise some problems, though they are usually easy to fix.
The input is text, but suppose we want a number instead. If we know it's a number, then
newtext = raw_input('Input a number >> ')
x = float(newtext)
print 'My number was ', x
should do it. But, if you try this and input text that is not a number, the program will generate an error and respond with something like this
python input_number.py
Input a number >> x
Traceback (most recent call last):
 File "input_number.py", line 2, in <module>
 x = float(newtext)
ValueError: could not convert string to float: x
How would we know if we have a number, given arbitrary text in the data, and avoid this error? One way is to use isdigit() --
newtext = raw_input('Input a number >> ')
if newtext.isdigit():
 x = float(newtext)
 print 'My number was ', x
else:
 print 'That is not a number.'
In this you see that isdigit() tests whether newtext is a number. It returns a True or False which is used by the "if" statement to control what to do with the data. We will look at such flow control more later.
You may also want to read data by splitting a line of text into pieces, for example with something like this --
newtext = raw_input('Input the item name and quantity >>')
print newtext.split()
When to this last one you input "eggs 12", newtext.split() will return ['eggs','12']. That is, it makes a list of the items that are on the line. You can now go through that list and look for the information you want, one entry at a time.
Input from the command line
In Linux, MacOS, or other Unix-like environments you can pass information to a program on the command line. There's a straightforward way to do this in Python using sys:
import sys
if len(sys.argv) == 1:
 sys.exit("Usage: convert_fits infile.fits outfile.fits newbitpix")
 exit()
elif len(sys.argv) == 4:
 infits = sys.argv[1]
 outfits = sys.argv[2]
 newbitpix = sys.argv[3]
else:
 sys.exit("Usage: convert_fits infile.fits outfile.fits newbitpix ")
 exit()
Alternatively there is argparse, a standard command-line parsing module, and this example from the Python on-line tutorial to find xy:
import argparse
parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y
Printing to the display
When you have data or text to display, you'd use a "print" function to have the data appear on the console as the program executes. (In Windows, you may follow this with a raw_input() (in Python 2.7, or input() in Python 3) so that the console will not disappear before you read it.) In Linux or MacOS, you would usually run Python from a console, and the printed information appears on the display and remains visible after the program has finished. Unix-like environments "print" to the standard output, stdout, and may be redirected to a file. For example running a Python program from the command line that generates output, you could write
python myprogram.py >> myfile.txt
and the output would go into myfile.txt instead of displaying. Similarly, output can be parsed to send the error information to a separate file
python myprogram.py 1> myfile.txt 2>myerrors.txt
sends the stdout to myfile.txt and stderr to myerrors.txt . These options are not available in Windows.
To print text the command is
print 'This will print on the screen.\n'
where the quoted (' and " have the same effect) text is sent. The '\n' is a line feed.
To print variables simply use them in the print statement
x = 1
y = 2
z = 3
h = 'Help me!!'
print x,y,z,h,'\n'
will display the values of x, y, or z regardless of whether they are numbers or text.
1 2 3 Help me!!
Of course, printing can be formatted. If you are familiar with C or Fortran, you'll find similarities that will help creating formatted output. I in this instance, it's also helpful to remember that the "print" function is converting internal data into displayed "text", so the formatting is really a way of controlling how some text and numerical data are mapped onto text that is then displayed.
Formatting is available in both versions 2.7 and 3 in two ways
 - Formatting expressions that are like C's printf are commonly used.
 - Formatting methods are unique to Python and use operators that act on text (strings).
Before we can really use these effectively we will need to explain what we mean by "strings", "integers", "floats" and other data types. But, here are a few examples that illustrate how this works. From Mark Lutz' Learning Python we have this summary
To format strings using expressions
 1. Insert a % "operator". To the left of it, put a string that that is operated on by the instruction that immediately follows.
 2. To the right of the % and its instruction, provide the objects that are inserted into the format string on the left.
Here's an example:
'That is %d %s cat! % (1, 'fluffy')
which will print
That is 1 fluffy cat!

Here %d is an integer format in the style of C, and %s is a string format conversion code. Other common type codes
s String
d Integer "double"
i Integer
x Hex (also X for capital letters)
e Exponent (also E)
f Floating point
The general structure with formatting commands is
%[(name)][flags][width].[precision]typecode
For example, in interactive Python try
>> x=1.2345678901234567890
If you ask for "x"
>> x
Python will respond with
1.2345678901234567
to the precision of its floating point storage. You can format this by
>> '%6.2f'%x (or with spaces for clarity, %6.2f' % x but no spaces after the first %
to which Python will respond
' 1.23'
You see that it left 6 places for the text, used a precision of 2 decimal places, and right-adjusted the text to the field. If you ask for more precision than you've allowed, Python will expand the field as needed. To have the data left-adjusted, put a minus sign in the formatting like this
>> '%-6.2f'%x
'1.23 '
In a program, rather than interactively, statements like these work in a print command
>> print '%6.5e'%x
1.2346e+00
The alternative is a new "format method" scheme that is being developed for Python 3. In this the method acts on string object to create


beginning of a pattern, and, as well as with '/' and '$', cannot be grouped inside parentheses. A '^' which does not occur at the beginning of a rule or a '$' which does not occur at the end of a rule loses its special properties and is treated as a normal character.
The following are illegal:
foo/bar$ foobar
Note that the first of these, can be written "foo/bar .
The following will result in '$' or '^' being treated as a normal character:
foo|(bar$) foo|^bar
If what's wanted is a "foo" or a bar-followed-by-a-newline, the following could be used (the special '|' action is explained below):
foo | bar$ /* action goes here */
A similar trick will work for matching a foo or a bar-at-the-beginning-of-a-line.
The advantage of %array is that you can then modify yytext to your heart's content, and calls to unput() do not destroy yytext (see below). Furthermore, existing lex programs sometimes access yytext externally using declarations of the form:
 extern char yytext[];
%% "zap me"
%% [ \t]+ putchar('' ); [ \t]+$ /* ignore this token */
If the action contains a '{', then the action spans till the balancing '}' is found, and the action may cross multiple lines. flex knows about C strings and comments and won't be fooled by braces found within them, but also allows actions to begin with %{ and will consider the action to be all the text up to the next %} (regardless of ordinary braces inside the action).
- ECHO copies yytext to the scanner's output.
- REJECT directs the scanner to proceed on to the "second best" rule which matched the input (or a prefix of the input). The rule is chosen as described above in "How the Input is Matched", and yytext and yyleng set up appropriately. It may either be one which matched as much text as the originally chosen rule but came later in the flex input file, or one which matched less text. For example, the following will both count the words in the input and call the routine special() whenever "frob" is seen:
int word_count = 0; %%
frob special(); REJECT; [^ \t + ++word_count;
%% a | ab | abc | abcd ECHO; REJECT;.| /* eat up any unmatched character */
- yymore() tells the scanner that the next time it matches a rule, the corresponding token should be appended onto the current value of yytext rather than replacing it. For example, given the input "mega-kludge" the following will write "mega-mega-kludge" to the output:
%% megaECHO; yymore(); kludge ECHO;
First "mega-" is matched and echoed to the output. Then "kludge" is matched, but the previous "mega-" is still hanging around at the beginning of yytext so the ECHO for the "kludge" rule will actually write "mega-kludge".
%% foobar ECHO; yyless(3); [a-z]+ ECHO;
{ int i; /* Copy yytext because unput() trashes yytext */ char *yycopy = strdup( yytext ); unput( ')' ); for ( i = yyleng - 1; i >= 0; --i ) unput( yycopy[i] ); unput( '(' ); free( yycopy ); }
An important potential problem when using unput() is that if you are using %pointer (the default), a call to unput() destroys the contents of yytext, starting with its rightmost character and devouring one character to the left with each call. If you need the value of yytext preserved after a call to unput() (as in the above example), you must either first copy it elsewhere, or build your scanner using %array instead (see How The Input Is Matched).
Finally, note that you cannot put back EOF to attempt to mark the input stream with an end-of-file.
- input() reads the next character from the input stream. For example, the following is one way to eat up C comments:
%% "/*" { int c;
for ( ; ; ) { while ( (c = input())!= '*' && c!= EOF ) ; /* eat up text of comment */
if ( c == '*' ) { while ( (c = input()) == '*' ) ; if ( c == '/' ) break; /* found the end */ }
if ( c == EOF ) { error( "EOF in comment" ); break; } } }
- YY_FLUSH_BUFFER flushes the scanner's internal buffer so that the next time the scanner attempts to match a token, it will first refill the buffer using YY_INPUT (see The Generated Scanner, below). This action is a special case of the more general yy_flush_buffer() function, described below in the section Multiple Input Buffers.
- yyterminate() can be used in lieu of a return statement in an action. It terminates the scanner and returns a 0 to the scanner's caller, indicating "all done". By default, yyterminate() is also called when an end-of-file is encountered. It is a macro and may be redefined.
int yylex() {... various definitions and the actions in here... }
%{ _TAG_ YY_INPUT(buf,result,max_size) \ { \ int c = getchar(); \ result = (c == EOF)? YY_NULL : (buf[0] = c, 1); \ } %}
If you do not supply your own version of yywrap(), then you must either use %option noyywrap (in which case the scanner behaves as though yywrap() returned 1), or you must link with -ll to obtain the default version of the routine, which always returns 1.
[^"]* { /* eat up the string body... */... }
\. { /* handle an escape... */... }
%s example %%
foo do_something();
bar something_else();
is equivalent to
%x example %%
foo do_something();
bar something_else();
Without the qualifier, the bar pattern in the second example wouldn't be active (i.e., couldn't match) when in start condition example. If we just used to qualify bar, though, then it would only be active in example and not in INITIAL, while in the first example it's active in both, because in the first example the example start condition is an inclusive (%s) start condition.
Also note that the special start-condition specifier <*> matches every start condition. Thus, the above example could also have been written;
%x example %%
foo do_something();
<*>bar something_else();
<*>.| ECHO;
BEGIN(0) returns to the original state where only the rules with no start conditions are active. This state can also be referred to as the start-condition "INITIAL", so BEGIN(INITIAL) is equivalent to BEGIN(0). (The parentheses around the start condition name are not required but are considered good style.)
int enter_special;
%x SPECIAL %% if ( enter_special ) BEGIN(SPECIAL);
blahblahblah...more rules follow...
%{ _TAG_ %} %s expect
%% expect-floats BEGIN(expect);
[0-9]+"."[0-9]+ { printf( "found a float, = %f , atof( yytext ) ); } { /* that's the end of the line, so * we need another "expect-number" * before we'll recognize any more * numbers */ BEGIN(INITIAL); }
[0-9]+ { printf( "found an integer, = %d , atoi( yytext ) ); }
"." printf( "found a dot );
%x comment %% int line_num = 1;
"/*" BEGIN(comment);
[^* * /* eat anything that's not a '*' */ "*"+[^*/ * /* eat up '*'s not followed by '/'s */ ++line_num; "*"+"/" BEGIN(INITIAL);
%x comment foo %% int line_num = 1; int comment_caller;
"/*" { comment_caller = INITIAL; BEGIN(comment); }
"/*" { comment_caller = foo; BEGIN(comment); }
comment_caller = YY_START;
%x str
%% char string_buf[MAX_STR_CONST]; char *string_buf_ptr;
\" string_buf_ptr = string_buf; BEGIN(str);
\" { /* saw closing quote - all done */ BEGIN(INITIAL); *string_buf_ptr = '\0'; /* return string constant token type and * value to parser */ }
 { /* error - unterminated string constant */ /* generate error message */ }
\\[0-7]{1,3} { /* octal escape sequence */ int result;
if ( result > 0xff ) /* error, constant is out-of-bounds */
*string_buf_ptr++ = result; }
\\[0-9]+ { /* generate error - bad escape sequence; something * like '\48' or '\_PHONE_' */ }
nbsp; *string_buf_ptr++ = ' ; \\t *string_buf_ptr++ = '\t'; \\r *string_buf


text:
In the cemented carbide, our most commonly used three functions of tantalum and niobium is to inhibit grain growth, improve alloy red hardness and fatigue resistance. We must understand that the characteristics of the tantalum and niobium comparison, is basically a comparison of the two elements. Since the amount of alloy in the addition is not a lot, so to get the same quality of the alloy, you can change from the amount of tantalum and niobium obtained. However, due to the atomic weight of tantalum and niobium and the crystallization temperature of the two different, therefore, in the alloy production must be comprehensive and balanced production process in order to obtain the desired product quality.
For more information please link: _URL_,please contact us: _EMAIL_


text:
The shift to building dense, walkable communities has placed Detroit in the midst of its renowned turnaround, according to a George Washington University report.
The key to revitalizing downtown Detroit is dense, walkable urban redevelopment, according to a report from George Washington University researchers.
The report conducted by the Center for Real Estate and Urban Analysis (CREUA), which is housed in GW's School of Business, looked at the impact of the concentration of key industries in the Detroit region.
Christopher Leinberger, chair of the CREUA, research professor and Charles Bendit Distinguished Scholar, co-authored the report with Michael Rodriguez, a former research director at CREUA.
Downtown Detroit's revival is directly related to the presence of knowledge-based companies—those that prioritize the production and use of knowledge to engage in research and development—the report states. A knowledge economy is generally located in walkable urban places, and in the past, Detroit delayed in developing these walkable urban places, which, in turn, contributed to the city's reduced growth.
Metropolitan Detroit's economic recovery, which began in 2010 after the region had suffered tremendous decline, added walkable urban development faster than the 30 largest metropolitan areas in the nation, according to the report. The growth is largely the result of Rock Ventures Family of Companies' (RVFOC) relocation to, and investment in, downtown Detroit, according to the report.
A portfolio of more than 100 companies, RVOFC includes Quicken Loans, real estate firm Bedrock, gaming company JACK Entertainment and the Cleveland Cavaliers. Its investment, in addition to investments made by Olympia Development, General Motors, the Ford family and the Downtown Detroit Partnership, catalyzed the development Detroit is seeing now, according to the report.
RVFOC's $7.96 billion investment from 2011 to 2016 in Detroit achieved $17.8 billion in economic growth. The projected $3.89 billion investment projected between 2017 and 2022 is expected to result in another $7.12 billion in economic growth for the city.
"As of the end of 2016, RVFOC has had a larger economic impact on Wayne County than major industry segments such as motor vehicle transmission/power train manufacturing, truck transportation and engineering/architectural services," the report states. "This adds an additional leg to the economic foundation of Wayne County and the State of Michigan."
The report also found that the concentration of these businesses in downtown Detroit led to 29 percent of the $17.8 billion impact of RVOFC investments. The report explains that RVFOC's impact would have been less substantial in a lower-density, drivable suburban environment.
"In [co-locating], these knowledge-sector companies have been better able to share ideas, compete for employees, attract more educated employees and grow in ways they could not have without being located in this walkable urban environment," the report states.
Researchers concluded that having walkable urban areas is vital to Michigan's economic growth.
"The knowledge economy and its creative class employees demand workplaces and housing in walkable urban places," the report states. "If the State of Michigan does not have walkable urban places for these companies and employees to locate, they will look to other states and metropolitan areas that do provide them."


Nourishing Ourselves evolved out of the Nourishing Our Children educational initiative founded and led by Sandrine Perez in order to focus on how we nourish ourselves as adults.
We are inspired by but not formally associated with the Weston A. Price Foundation, to teach the nutritional dietary wisdom of the healthy population groups that Dr. Weston A. Price discovered in the 1930's. We are developing a website and educational materials in order to answer this very question: what is a healthy diet? Meanwhile, you can get a sense of the dietary recommendations we promote here, as outlined the Weston A. Price Foundation.
Raine Saunders of Agriculture Society has joined Sandrine as a contributing partner and coauthor of Nourishing Ourselves.


text:
Teach young children the science of color with this unique lightbased color mixing tool. Use the peg board and translucent pegs along with the activity sheets to mix color right on our Educational Light Cube. The light shines through the activity sheets and illuminates the pegs which allows the colors to interact. Content: 4 peg boards 15 x 15 cm, 600 pegs (red, yellow, blue, green, purple, orange and 12 colour mixing activity sheets.
Arts and crafts


text:
Smoke Creek Desert Water Resources Study
Nevada and California – Sempra Energy
Interflow Hydrogeology held a lead hydrogeology role working with a team of professionals undertaking a study of the water resources of Smoke Creek Desert in Washoe County, Nevada and Lassen County, California. This comprehensive, multi-year study was undertaken to better define the groundwater flow systems and the water budgets for the basin, and was funded by Sempra Energy, which at the time was assessing the feasibility of a large-scale power generating plant, requiring 13,000 acre-ft per year of water supply (8,100 gpm continuous flow). Interflow Hydrology conducted a preliminary feasibility study along with a small team of private consultants specializing in water resources engineering, geology and hydrogeology. A more comprehensive study program was developed as a second phase, to help reduce uncertainties regarding to the groundwater flow systems and water budgets. Interflow Hydrology had direct responsibilities in development of the numeric flow model for the project, and for exploration drilling, test well construction, aquifer testing, conducting artesian well and spring flow and potentiometric head measurements, water chemistry sampling and interpretation, and assisted in other aspects of the study such as implementing a stream flow gaging network, and providing peer review to evapotranspiration studies. The Phase II project team included, private-sector professionals and several research groups, including:
- Desert Research Institute, which conducted measurements of evapotranspiration and playa discharge of groundwater in the basin,
- US Geological Survey – Geologic Division, which conducted regional geophysical surveys for the basin including gravity and aeromagnetic surveys, and
- Nevada Bureau of Mines and Geology, which provided detailed geologic mapping at focus areas.


text:
24 easy to print, double sided Body flashcards. Just print and fold. Finished! (Laminating isn't a bad idea either.) Download includes teachers guide for full set!
Key Points of this set:
- Each card is numbered for easy sorting. This set includes cards 25 to 48.
- Body parts in order from head to toes.
- Images appear on the front of the card with text on the back.
- Text is shown both as a word and broken down by syllable.
Cards Appearing in this set:
- head, hair, face, eyes, ears, nose, cheeks, mouth, teeth, tongue, chin, neck, shoulders, belly, back, arms, elbow, hand, fingers, legs, knees, feet, toes, butt


Google

Trailing-Edge - PDP-10 Archives - BB-JR93L-BB_1990 - 10,7/mic/micctl.hlp
There are 2 other files named micctl.hlp in the archive. Click here to see a list.
MIC Commands
MIC (Monitor Interpreted Commands) allows you to create a new command
by writing any desired sequence of monitor and MIC commands in a
command file. Some MIC commands are briefly described here, and are
more fully described in the file MICV2.DOC.
 DO Executes a MIC command file.
 or
 @
 BACKTO Specifies a label at which MIC processing is to
 GOTO resume within the command file.
 COJOB Creates a COJOB.
 ERROR/ Specifies an error condition character.
 NOERROR
 IF Conditionally processes a monitor command.
 LET Changes the values of user parameters.
 MIC Passes a subcommand to MIC.
 OPERATOR/ Introduces a line requiring user attention.
 NOOPERATOR
 SILENCE/ Suppresses/resumes output to the terminal.
 REVIVE
 WHENEVER/ Changes the default action wherever a particular
 ON event occurs.


text:
The crystal structure and stability of a giant tetragonal phase in electron-doped Pb 1-x Bi x VO 3 (x = 0.1, 0.2, and 0.3) and hole-doped Pb 1-x Na x VO 3 (x = 0.1, 0.2, and 0.3) were studied. Electron doping effectively destabilized the tetragonal structure. The c/a ratio, spontaneous polarization, and tetragonal-to-cubic phase transition pressure systematically decreased with increasing Bi 3+ substitution. In contrast, hole doping hardly affected the tetragonal distortion and structural stability. We showed that electron doping is an effective way to control the stability of the tetragonal phase of PbVO 3 with a 3d 1 electronic configuration.
ASJC Scopus subject areas
- Physical and Theoretical Chemistry
- Inorganic Chemistry


text:
Many plant populations fluctuate between years of high and low seed production. These fluctuations, often called mast-seeding, have typically been attributed to fluctuations in resource availability.
Recent theoretical models show that mast-seeding could also be due to the dynamics of resource allocation within individuals, synchronized among individuals by pollen limitation in low flowering years. This "pollen coupling" mechanism appears to explain synchronous, alternate-year flowering in a perennial wildflower, Astragalus scaphoides. Our past research shows that plants are more pollen limited in low-flowering years, and that pollen coupling models fit to data for this species predict alternate-year flowering in the absence of environmental forcing. Here, we present tests of two additional components of pollen coupling. First, we directly tested whether preventing fruit set caused plants to flower in successive years.
Removing flowers in 2005, a high flowering year, caused these plants to flower again in 2006. Because few other plants flowered in 2006, these plants did not set seed, and flowered again in 2007. We also directly measured resource depletion by quantifying N, P, and nonstructural carbohydrates before flowering, after fruiting, and at the end of the season in plants with flowers removed.


print header
Emergencies and Crises
The Dean of Students Office has as one of its functions the task of responding to crisis situations which involve University of Wisconsin-Eau Claire students on campus, in the community, and in other locations as appropriate. It is desirable to have the individuals most immediately responsible for activities in their area alerted to serious situations.
Crisis is defined as a significant event or radical change of status in a person's life, or as an unstable or crucial time which requires special assistance or intervention. Types of crises likely to be found in the University environment include the following:
1. Death (student, friend, family)
2. Serious injury
3. Mental health related events including involuntary detention
4. Sexual assault
5. Discipline
6. Crisis arising from environmental or ecological disaster
7. Threats to the public welfare
During a student crisis, our office goals are:
1. Assist the student (or students) or other involved individuals to best cope with and resolve the crisis they may be facing.
2. To provide coordination with external agencies, including the media, that may be involved with the University during the crisis.
3. To provide communication and coordination internally within the University.
4. To assist in post-crisis support.
During a crisis, the Dean of Students Office will work with and coordinate efforts with external agencies such as clergy, law enforcement personnel, family, or friends in assisting those affected by the crisis. The office will also notify the appropriate University offices or individuals, and assist in the designation of an institutional spokesperson to the media.
Bias/Hate Incident Reporting
A bias/hate incident is an act of conduct, speech, or expression motivated by race, religion, color, disability, national origin, sexual orientation, or ancestry, that results in intimidation, harassment, or violence (regardless of whether the act is criminal).
Student in Crisis
In the event of short term illnesses (less than 3 days) it is best to contact your instructor directly. If your student is hospitalized or experiencing a difficulty that will keep them out of school for 3 days or more you will want to report a student absence. If you are concerned about your student's health or wellness and you want to let UW-Eau Claire know - you can also contact our office at _PHONE_ or email:
Family in Crisis
Sometimes a family member might have difficulty contacting a student in a time of crisis, such as a medical emergency or a death in the family. All emergency inquiries during business hours should be directed to our office at _PHONE_. After hours, contact the University Police Department at: _PHONE_.
Campus Emergency Status
The campus posts any large scale campus emergency on our emergency status notice on the website. Students will be notified (via text message if they've signed up for the service) in the event of a campus wide emergency.
Pandemic Plan


Advanced searches left 3/3
Ablation - Springer Nature
Summarized by Plex Scholar
Last Updated: 10 November 2022
* If you want to update the article please login/register
Computation of Microchannel Dimensions During Laser-Induced Plasma-Assisted Ablation (LIPAA) of Polycarbonate with Copper Metal Target
Laser filtration of such materials is a difficult challenge due to the high transfer of transparent polycarbonate over a range of wavelengths. LIPAA is a high-potential machining process that solves the challenge of machining transparent materials amid of their high visibility in the visible and near-infrared spectral ranges. Extreme numerical simulations were achieved by altering the laser process parameters, viz. Maintaining the scanning speed at a set speed of 4 mm/s, maintaining the pulse repetition rate, pulse duration, and pulse power density, kept the scanning speed at a set value of 4 mm/s. The effect of the laser parameters on the geometric parameters was investigated subsequently.
Source link: _URL_
Percutaneous and Laparoscopic-Assisted Ablation of Hepatocellular Carcinoma
Ablation of hepatocellular carcinoma evolved from a palliative drug for unresectable disease to a viable alternative to hepatectomy. A breakthrough in HCC therapy for cirrhotic patients and laparoscopic ablation has been safe and effective in those patients at risk of complications or unsuccessful therapy through a percutaneous route.
Source link: _URL_
Declines in serum uric acid level after catheter ablation of atrial fibrillation
Background: Few studies have investigated whether catheter ablation in AF patients improves biomarkers other than serum measurements of brain natriuretic peptide and renal function. Methods and findings were included in the initial AF ablation procedure, but the study included a total of 206 patients who underwent initial AF ablation without changes to oral medications. Both persistent and paroxysmal AF patients were identified, and the degree of post-procedural serum UA decline after ablation was much higher in patients with persistent AF than those with paroxysmal AF. 28 patients with elevated UA level before surgery showed improvement in UA level to normal range, out of 48 patients with elevated UA level before surgery. Conclusions Catheter ablation for AF patients dramatically raised serum UA levels without apparent causes of heart disease, renal function, or inflammation, suggesting that AF ablation could be helpful to AF patients with hyperuricemia.
Source link: _URL_
Effect of the Medium on the Laser Ablation Characteristics of Aluminum Irradiated by Femtosecond Laser Pulses
The aim of this research was to investigate the effect of the surrounding medium on aluminum's laser ablation properties. specimens were exposed to a narrowly focused laser beam in three dissimilar media; air, water, and ionic liquid. For processing, the laser beam was tightly focused using a converging lens, and the laser pulse energy was varied from 1:u20135 –u00b5J. The produced laser tracks and areas were analyzed by field emission scanning electron microscope for their microstructural characterization. Surface patterns induced by laser pulse energy were observed in air, but no LIPSS were observed in the case of water and ionic liquid media for the same laser pulse energy. Due to a change in laser-matter interactions and a halt in the settling of the ablated coating on the surface, the laser ablated surface was cleaner for liquid media as compared to air. In particular, the ablation mechanism of air and liquid has been investigated.
Source link: _URL_
The First Evaluation of Remote Magnetic Navigation-Guided Pediatric Ventricular Arrhythmia Ablation
Catheter ablation is a common treatment option for pediatric cardiology's ventricular arrhythmias. However, no studies have reviewed RMN-guided ablative therapy results in children with VA. This report was designed to determine both procedural and long-term effects in children under the guidance of a RMN-guided VA ablation program. This single-center, retrospective review included all CA procedures for VA treatment in children with or without structural heart disease from 2008 to 2020. RMN or MAN were characterized as two research groups by CA technology: RMN or MAN. At a mean follow-up of 5. 2 u00b1 3. 0 years, recurrence rates were significantly lower in RMN compared to MAN, owing to a first-treatment. Similarly, fluoroscopy doses were dramatically lower in RMN compared to MAN [20 versus 48 mGy, P = 0. 043]. Following their final ablation procedure, 20 patients were out of VA. This is the first analysis to look at the use of RMN in pediatric VA ablation.
Source link: _URL_
Combination Therapy of Mesenchymal Stem Cell Transplantation and Astrocyte Ablation Improve Remyelination in a Cuprizone-Induced Demyelination Mouse Model
However, mesenchymal stem cells can influence myelination in demyelinating disorders. In the cuprizone model of MS, C57BL/6 mice were fed 0. 2% CPZ diet for 12 weeks. This research was conducted to see the effects of single and mixed therapies of astrocyte destruction and MSC transplantation on remyelination. Astrocytes were ablated twice by L-a-adipate at the start of weeks 13 and 14, but MSCs were injected in the corpus callosum at the start of week 13. Motor coordination deficits were significantly reduced in comparison to single treatments in comparison to CPZ mice, after combination therapy of astrocyte destruction and MSC transplantation. Ultimately, the MSC administration's efforts culminated in a dramatic rise in BDNF and NGF mRNA expression levels. In a chronic denyelinating mouse model of MS, our results show that transient abomination of astrocytes as well as MSCs therapy may contribute to remyelination by increasing oligodendrocytes and attenuating gliosis.
Source link: _URL_
Prevention of major biliary complications by fusion imaging for thermal ablation of malignant liver tumors adjacent to the bile ducts: a preliminary comparative study
Thermal ablation, carried out by Purpose Ultrasound -guided thermal ablation, may cause significant biliary problems, particularly in patients with malignant liver tumors adjacent to the bile ducts. MLTs proximal to the bile ducts are proximal to the bile ducts and should be evaluated for the safety and efficacy of FI for the testing. Methods An retrospective single-center review was conducted on a total of 289 patients with 316 MLTs adjacent to the bile ducts. Patients were divided into two groups based on whether FI was used in the ablation procedures. Results of the included tumors The incidence of major biliary complications after ablation in the FI group was 1. 6%, which was significantly less than that in the non-FI group. The FI for a US-guided TA can be a noninvasive way to eliminate significant biliary disorders.
Source link: _URL_
Serum periostin as a predictor of early recurrence of atrial fibrillation after catheter ablation
Catheter ablation is a safe method of rhythm therapy for atrial fibrillation. After a successful atrial septal puncture to detect serum periostin, venious blood was collected before ablation and left atrial blood was collected. After catheter ablation, 27 patients had a recurrence of atrial arrhythmia after catheter ablation. Patients with recurrent atrial arrhythmia had a larger left atrial volume and higher serum periostin levels than those in the non-recurrent group. Patients with left atrial low-voltage areas were more prevalent in the recurrence group. In univariate and multivariate COX regression study, left atrial volume, serum periostin, and left atrial LVAs were included. serum periostin A was 87. 95 ng/ ml at the cut-off value of 87. 95 ng/ ml. The recurrence rate of AF was higher in patients with left-atrial LVAs and elevated serum periostin, according to the Kaplan-u2013Meier survival curve, with a higher mortality rate.
Source link: _URL_
Feasibility analysis and process characteristics of selective laser ablation assisted milling Inconel 718
However, the traditional LAM process used a large spot laser, often leading to high processing costs and overheating bulk materials. A new method of selective laser ablation assisted milling process for nickel-based superalloys was suggested in this paper, but a small power laser with small spot size was used to selectively ablate the uncut surface in front of the cutting machine, resulting in numerous surface defects emerging. The laser ablation effect with low power and a small spot size was first investigated. Process parameters and process characteristics of SLA-Mill were systematically explored. In addition, the chip manufacturing process in the SLA-Mill process was investigated in depth. The resultant cutting force has a reduction of about 30% at laser power of 60 W, cutting speed of 90 m/min, and a minimum depth of 0. 1 mm.
Source link: _URL_
Three-Dimensional Modelling of Femtosecond Laser Ablation of Metals
Metal plating and micro-machining applications are gaining traction due to its high accuracy and negligible heat affected zone. A difference between the temperature of the electrons excited by the laser pulse and the temperature of the lattice is predicted by the two-temperature model, which can be shown by the two-


text: Eelgrass is a seed plant and not a seaweed. It has roots and seeds just like land plants. Mattresses and cushions filled with eelgrass, dikes made from eelgrass for defending the land from the sea - just some of the ways this plant was used before it practically disappeared in the Wadden Sea, Zuiderzee and delta region. It's understandable that Dutch people think it's a seaweed. 'Wier' in Dutch means seaweed. The northeastern corner of the province North-Holland is called Wieringen. It used to be an island up till the 1920s. Lots of so-called wier grew in the surrounding water, giving the island its name. The 'wier' was eelgrass. In earlier times, it was harvested and formed a major source of income for residents of the islands, including Wieringen. It was a disaster for them when the eelgrass disappeared in the 1930s. There are two species found in the Wadden Sea region: Zostera marina and Zostera noltii.


Take the 2-minute tour ×
Here's a screenshot of the duty calendar in the system I'm working on (I've deleted all names here for privacy reasons).
Each person can have a day of particular type (listed in the legend above: working day, friday (i.e. shortened) etc.).
Those types are changing in a way shown in the picture: first you click in the type inside the legend (legend changes it's background) and then put it in the calendar - just like color picker in photoshop.
enter image description here
So: is this method good or do I have to think of something else?
share|improve this question
I would consider not repeating the day number and day name inside each cell, instead have that information as a column header... it would remove a lot of the visual clutter. – Erics Jan 27 '12 at 5:05
_USER_, that's not actualy my idea, i was told to do so by users – k102 Jan 30 '12 at 13:16
2 Answers 2
up vote 7 down vote accepted
The Right Information
Firstly, make sure your displays show the information the user needs to make good decisions and input. The use of a color-coded matrix assumes that your user is trying to achieve a certain pattern of assignments, such as a certain number of people in each duty type per day (e.g., have adequate coverage when some are on vacation), or systematic rotation of duties among the workers, or cyclic frequencies of duties per month. It implies that the user sits down each month and plans the roster. If that's the way users do things, then it's fine. Your user research will tell you if that's the case.
Consider an alternative where the pattern of duties over workers and time doesn't matter. What if, instead, assigning a person to a duty depended on their rank, training, level of experience, and sock color? That would imply a very different interface that focuses on the characteristics of the individual rather than the pattern of duties over a month, perhaps a UI showing one worker per page. Possibly, duty assignment involves relative individual characteristics, so you want a table to see who has higher values of relevant characteristics for duty assignment. Possibly both the monthly pattern and individual characteristics are important, so you need to show both.
The Right Input
Assuming the matrix is the way to go, your suggested method of input is a good way to do it. I call it a pointer-tool input, which, as you note, is similar to the "palettes" of "tools" (there's a mixed metaphor) used in drawing and image manipulation programs (e.g., to fill a space with a certain color). IMO, pointer-tool is underutilized.
The main alternative is basic selection-action input. Here, the user selects the days for each worker first then selects a command button to set the duty for the selected worker-days.
Assuming you're supporting multi-selection in either case (with dragging, control-clicking, and shift-clicking), both methods are about equally efficient. The main difference is that pointer-tool puts the user in a mode. That's good if the user tends to stay with assigning one kind of duty for a long time, gradually filling the matrix with that duty. In contrast, selection-action in such a case means lots of single-selection of a worker-day followed by a command button, a two-step process that gets old fast (although putting the Duty commands on a context menu would make it a lot easier). Or the user of selection-action uses Ctrl-click to select a complicated pattern of worker-days to set them all to a single duty, but then accidentally clicks somewhere else blowing away the multi-selection. That error can't happen with pointer-tool.
The main problem with pointer-tool is that users may forget what mode they're in and accidentally set a bunch of worker-days to the wrong duty with a single swipe of the hand. Obviously you should have Undo whether you use pointer-tool or selection-action, so that should only be a mild annoyance, but it is something to consider. The main way to combat mode-forgetting is with strong feedback on the current mode. The currently selected duty should be obvious (I don't see that in the wireframe), and the sprite (pointer symbol) should change to represent the current duty (both with color and shape, in your case).
Another potential issue is that many users are less familiar with pointer-tool than selection-action, but that has to be weighed against similar unfamiliarity with multi-selection, which may be a critical skill for efficiently using selection-action. Check with your users. If they are familiar with Photoshop, then pointer-tool will probably work okay, especially if you make your duty menu look more like a tool palette and less like a bar of buttons.
The bottom line is selection-action is probably better when there is a lot of switching between duty types, while pointer-tool is better when users stick with one duty type for many interactions. Your user research will tell you which is compatible with your users.
Details make the Difference
Beyond the form of input, consider what you can do to attend to the details of the users' specific task. That will make the bigger difference in the UX than pointer-tool versus selection-action. This may include:
 - Multi-selection, which I already mentioned, so that users can set a whole block of worker-days to the same duty (probably especially handy for assigning vacation times).
 - Good defaults minimizing the amount of work in the first place. Perhaps each new month can by default be the same as the previous month. Or perhaps Fridays should by default all be the Friday Duty. Whatever saves your users work.
 - Automation tools that allow the user to set a common pattern for a given worker(s) or day(s) ( e.g., standard rotation of duties).
 - Aggregates showing counts or other statistics of each duty type in the margins, which may be important for achieving target numbers of duties per day or per worker.
 - Copying and moving allowing users to duplicate or shift a block of duties to a different set of days and/or workers. This may be through Cut/Copy and Paste, supplemented with drag-and-drop. Note that for pointer-tool, this implies you need a generic Selection tool in addition to your duty tools.
 - Redundant codes where shade or distinct symbols also indicate the duty of the worker-day. This is primarily for accessibility reasons, but a symbol may also be easier to learn and remember than a color code, reducing the need for the user to refer to the legend/palette/toolbar. With some work on the graphic design so it's easier to use the column header, you can show the symbol instead of the date in the worker-day.
As always, the needs for such things are determined from user research.
share|improve this answer
thanks for a great answer! wehat i'm going to do now is creating multi-selection. – k102 Jan 27 '12 at 8:54
Your current system is strange for 2 reasons:
 1. Legend is usually an inactive element used only for reference unless it's also a filter (i.e. click a legend item to show just it).
 2. A more natural workflow is to find the person, then click the date, and then set its status.
However, if your users find your system easy-to-understand then you shouldn't change it. If they aren't complaining, ask them directly as they might be just holding it to themselves.
Also, I see inconsistencies between Russian and English labels (e.g. Friday in English and "short day" in Russian). Is it because you added English for the screenshot or is your interface really bilingual? If it's the latter, you have to make them the same. You also need to have the day of the week marked in both languages. Though a more elegant solution is to separate the languages and let your users decide which one is more comfortable to them.
share|improve this answer
all the content is made by users (including the labels), so it was up to them naming day types in english – k102 Jan 30 '12 at 13:19
_USER_: You shouldn't let users edit the interface of a multi-user system so much if you want them to have a stellar experience. Inconsistent/improper microcopy will confuse those who haven't participated in the creation. – dnbrv Jan 30 '12 at 13:23
if i could choose, i'd never let them to do it :) but i had to create "root" user who cah edit anything – k102 Jan 30 '12 at 13:32
Your Answer


Data exploration systems that provide differential privacy must manage a privacy budget that measures the amount of privacy lost across multiple queries. One effective strategy to manage the privacy budget is to compute a one-time private synopsis of the data, to which users can make an unlimited number of queries. However, existing systems using synopses are built for offline use cases, where a set of queries is known ahead of time and the system carefully optimizes a synopsis for it. The synopses that these systems build are costly to compute and may also be costly to store. We introduce Overlook, a system that enables private data exploration at interactive latencies for both data analysts and data curators. Overlook enables fast computation of private synopses using the idea of a "virtual synopsis," which represents a potentially large private synopsis implicitly using a pseudorandom function that is evaluated on demand. Overlook uses a synopsis that is simple but fast and has accuracy comparable to other state-of-the-art synopses, requiring 0.5 seconds or less to generate a histogram over 60 GB of data -- only 2.5 × slower than the equivalent public histogram. Together, these allow Overlook to provide a rich, interactive, and fast visual query interface that allows users to explore private data with minimal storage overhead -- tens of bytes -- on the server
November, 2020
Related projects
Research Areas
 - big data
Theory and Practice of Differential Privacy (TPDP 2020)


text:
On using the theory of regular functions to prove the ε-Optimality of the Continuous Pursuit Learning Automaton
Chapter, Peer reviewed
MetadataShow full item record
Original versionZhang, X., Granmo, O.-C., Oommen, B. J., & Jiao, L. (2013). On using the theory of regular functions to prove the ε-Optimality of the Continuous Pursuit Learning Automaton. In M. Ali, T. Bosse, K. Hindriks, M. Hoogendoorn, C. Jonker & J. Treur (Eds.), Recent Trends in Applied Artificial Intelligence (Vol. 7906, pp. 262-271): Springer. 10.1007/978-3-642-38577-3_27
There are various families of Learning Automata (LA) such as Fixed Structure, Variable Structure, Discretized etc. Informally, if the environment is stationary, their ε-optimality is defined as their ability to converge to the optimal action with an arbitrarily large probability, if the learning parameter is sufficiently small/large. Of these LA families, Estimator Algorithms (EAs) are certainly the fastest, and within this family, the set of Pursuit algorithms have been considered to be the pioneering schemes. The existing proofs of the ε-optimality of all the reported EAs follow the same fundamental principles. Recently, it has been reported that the previous proofs for the ε-optimality of all the reported EAs have a common flaw. In other words, people have worked with this flawed reasoning for almost three decades. The flaw lies in the condition which apparently supports the so-called "monotonicity" property of the probability of selecting the optimal action, explained in the paper. In this paper, we provide a new method to prove the ε-optimality of the Continuous Pursuit Algorithm (CPA), which was the pioneering EA. The new proof follows the same outline of the previous proofs, but instead of examining the monotonicity property of the action probabilities, it rather examines their submartingale property, and then, unlike the traditional approach, invokes the theory of Regular functions to prove the ε-optimality. We believe that the proof is both unique and pioneering, and that it can form the basis for formally demonstrating the ε-optimality of other EAs.
Published version of a chapter in the book: Recent Trends in Applied Artificial Intelligence. Also available from the publisher at: _URL_