PAM_ECHO
Section: Linux-PAM Manual (8)Updated: 06/16/2009
Index Return to Main Contents
pam_echo - PAM module for printing text messages
Synopsis
- pam_echo.so [file=/path/message]
DESCRIPTION
%H
- The name of the remote host (PAM_RHOST).
%h
- The name of the local host.
%s
- The service name (PAM_SERVICE).
%t
- The name of the controlling terminal (PAM_TTY).
%U
- The remote user name (PAM_RUSER).
%u
- The local user name (PAM_USER).
All other sequences beginning with % expands to the characters following the % character.
OPTIONS
file=/path/message
- The content of the file FC/path/messageF[] will be printed with the PAM conversion function as PAM_TEXT_INFO.
MODULE TYPES PROVIDED
All module types (auth, account, password and session) are provided.
RETURN VALUES
PAM_BUF_ERR
- Memory buffer error.
PAM_SUCCESS
- Message was successful printed.
PAM_IGNORE
- PAM_SILENT flag was given or message file does not exist, no message printed.
EXAMPLES
For an example of the use of this module, we show how it may be used to print information about good passwords:
-
password optional pam_echo.so file=/usr/share/doc/good-password.txt password required pam_unix.so
SEE ALSO
AUTHOR
Thorsten Kukuk<EMAIL_ADDRESS>Index
This document was created by man2html, using the manual pages.
Time: 05:34:28 GMT, December 24, 2015


Marking the memories of a million service personnel
by Jonathan BealeThe act of Remembrance takes place every day of the year for the Commonwealth War Graves Commission.
It works to maintain more than one million headstones and memorials in 154 countries around the world to mark those who died in World War One and World War Two.
Tyne Cot cemetery near the town of Ypres in Belgium is where almost 12,000 soldiers who fought in World War One are buried.
"We are probably the world's largest gardener," Peter Francis from the Commission says, with staff mowing the equivalent of 1,000 football pitches every week.
The headstones are the same size surrounded by uniform lawns and flowers.
The Commission says everyone who died is treated equally, adding it "doesn't matter whether you were killed in battle and awarded a Victoria Cross or whether you died from influenza".
The Commission employs 13,000 staff around the world - many of them locals. Four generations of the Jaradah family have been tending the Gaza cemetery that dates from WW1.
"I'm a son of the cemetery," Ibrahim, the youngest member of the family, says. "I've grown up with these men."
Meanwhile it's a husband and wife team, Shadrack Paull and Lusia Axalte, that look after the cemetery at Morogoro in Tanzania.
Ben More Assynt in north-west Scotland is the most remote war grave in the UK. In April 1941 an RAF Anson bomber crashed on the mountain killing all six crew on board.
The grave was originally marked with a cairn, a man-made stack of stones, which deteriorated over time. In 2012 they flew in a new granite marker by RAF helicopter to replace the original stones.
Continuing conflict can make the job of maintaining war graves more difficult.
However, the Commission has recently managed to restore hundreds of graves at Habbaniya war cemetery, west of Baghdad in Iraq.
There are 54,000 war dead remembered in Iraq alone.
War-torn Yemen is another challenging location. The CWGC was recently informed of vandalism at the Maala cemetery in the south of the country.
It says it has already made replacement grave markers, but is waiting for safe access to the site to carry out repairs.
Encroachment is another problem. In Nairobi farmers have been using the Kariokor cemetery to dry cow hides for sale.
The CWGC says it is working with local authorities to find a long-term solution.
Though each cemetery has familiar themes with gardens and flowers, no two sites are exactly the same.
Portland stone is often used for the headstones at the large cemeteries in Belgium and France while in Scotland granite is often used.
In Turkey the graves are marked with plinths rather than headstones because of the harsher climate.
"Remembrance is still a living, breathing process," says the CWGC.
It recently completed a memorial in Abuja, Nigeria, commemorating more than 2,000 Nigerian nationals who lost their lives serving with Commonwealth forces.
All pictures copyright of the Commonwealth War Graves Commission.


Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
Cofounder
Inspired, driven and hard working student from University of Toronto Computer Engineering Program. I believe big in software and hardware that influence the world to do exraordinary things. My software interest combined with business development pulls me to work on businesses that create value and empower fans to aim out of the impossible. I vision a big influence on the world with my work.
Cofounder
After winning a state championship in basketball and placing third in state of Arkansas in wrestling, resulting in receiving the New Comer of the Year Award, I've been highly passionate about improving high school athletics. I pursued a Computer Engineering degree to help design innovative software by improving the communications throughout all high school systems. I enjoy inspiring children and help them overcome adversity.
Cofounder
Small town boy with big city dreams, hoping to bring high school sports with me.
Cofounder
From Nepal to Canada. I love to watch movies and code. I love horror, drama, romance, and of course sci-fi. I know Objective C, C++, Java, and Swift. I like money too
We take pride in excellence. We truly believe Team Sync will elevate your team, coaches and players game to the next level.


Supplementary Figure 3
CPSF1-expression in RNA-seq data. (A) Genome browser plots showing the RNA-seq read coverage of CPSF1. (B) Gene expression of CPSF1 in the RNA-seq data was analyzed using Student’s t-test. Statistical data are presented as mean ± SD. * P < 0.05.
Click here for additional data file.


Hucknall dad's anger as garden floods for second time in two years
The dad said his two sons were left upset by the garden flooding, where they go and play football
by Ben ReidA Hucknall dad has spoken of his anger after his garden was completely flooded for the second time in two years.
Heavy rainfall battered Nottinghamshire on Thursday, November 14, where a yellow weather warning was in place for 13 hours.
Floods wreaked havoc across the county during the day and dad of two David Bull was left furious that his garden in Johnson Avenue was covered with water.
The 41-year-old said his two sons were left upset by the garden flooding, where they go and play football.
"It's happened to me twice now. It's major flooding," he told Nottinghamshire Live.
 But it hasn't helped my garden at all. Nowhere else floods that I know of around here.
"It is worrying to see. My two lads have been left really upset and it keeps happening. Every time it rains I worry.
"My garden is just a floodplain.
"It just came in so fast. I just feel a bit forgotten about by the council."
Councillor for Hucknall North, John Wilmott, of the Ashfield Independents, told Nottinghamshire Live Ashfield District Council was preparing for a specialist to go out and help Mr Bull.
He added: "Flooding is never a good thing, wherever it happens, and I can assure Mr Bull we will be helping him where we can.
"My thoughts go out to any families affected by flooding."
An Ashfield District Council spokesman said: "Our Environment Team is aware of this isolated issue involving a property adjoining Titchfield Park in Hucknall.
"We are in contact with the affected resident and we are working with specialists to better understand why this single property is affected by excess water."
To receive one WhatsApp message a day with the main headlines, as well as breaking news alerts, text NEWS to 07790 586202. Then add the number to your phone contacts book as 'Nottingham Post'.Your phone number won't be shared with other members of the group.


Andy Puzder: Even 'SNL' knows Warren's 'Medicare-for-all' plan would be 'devastating'
by Joshua NelsonAfter “Saturday Night Live” mocked Sen. Elizabeth Warren’s $52 trillion “Medicare-for-all" plan, former CEO of CKE Restaurants Andy Puzder said that the presidential hopeful has no understanding of how interrelated the economy is.
“Her plan is ridiculous, it’s a fantasy, it’s unachievable, you couldn’t pass it. If you did pass it, it would tank the economy, it’s absurd,” Puzder, the author of “Capitalist Comeback,” told “Fox & Friends” on Monday.
There’s so much about this plan that would be so devastating for the American people and I think people are smart enough to know that. The 'Saturday Night Live' people certainly are.”
SNL MOCKS WARREN'S $52T 'MEDICARE-FOR-ALL': 'WHEN THE NUMBERS ARE THIS BIG THEY’RE JUST PRETEND!'
Asked why it took her so long to release her health care plan, "SNL" star Kate McKinnon – playing Warren – answered, “When Bernie [Sanders] was talking 'Medicare-for-all,' everybody was like, ‘Oh cool,’ and then they turned to me and said, ‘Fix it, Mom.’”
The fictional Warren added that her plan “compares favorably” to former Vice President Joe Biden’s “in that it exists.”
She then answered a question about estimates of how much her plan would cost.
“We’re talking trillions,” McKinnon answered. “When the numbers are this big they’re just pretend.”
CLICK HERE TO GET THE FOX NEWS APP
"Fox & Friends" host Steve Doocy reported that independent estimates show that Warren’s plan could result in the loss of 2 million jobs in the private health care insurance industry.
“Destroying those 2 million jobs destroys a lot more than just those 2 million,” Puzder responded.
Warren has surged in polls recently as Biden has faded and she is in the lead in a new Iowa poll.
Fox News’ Brie Stimson contributed to this report.


by IT(13) Group 2
2017
The lastest rankPython has continued its upward trajectory from last year and jumped two places to the No. 1 slot, though the top four - Python, C, Java, and C++ - all remain very close in popularity. Indeed, in Diakopoulos’s analysis of what the underlying metrics have to say about the languages currently in demand by recruiting companies, C comes out ahead of Python by a good margin.
So, our group would like to introduce the top four languages to you.
Here are the the Top Ten Languages for the typical Spectrum reader of 2017.
our topic
About IEEE Spectrum
IEEE Spectrum is the flagship magazine and website of the IEEE, the world’s largest professional organization devoted to engineering and the applied sciences. Our charter is to keep over 400,000 members informed about major trends and developments in technology, engineering, and science. Our blogs, podcasts, news and features stories, videos and interactive infographics engage our visitors with clear explanations about emerging concepts and developments with details they can’t get elsewhere.
About The Rank
Unlike other programming language surveys, the IEEE Programming Language Survey gives you the ability to interactively alter the weights on the ranking criteria. Applying 12 metrics to 10 data sources, they rank 48 languages. They also explain their design, methods, and data sources.
Several preset rankings are given: for a typical reader of the IEEE Spectrum, emerging trends, employer interest, and open source. You can also filter based on industry sector: web, mobile, enterprise, or embedded. You can compare the results to a previous year. Changing the weights on the various data sources allows changing how much importance you want to give them. One of the survey's data sources is the IEEE Xplore Digital Library of conference and journal articles about scientific and engineering.
The IEEE survey is more flexible than other language surveys. This survey does not offer a statistically valid representation of current use. It tries to relate language discussion (Stack Overflow) with use (GitHub) in an effort to extract insights about potential future adoption trends.


Lost Ember Is a Gorgeous Animal Shifting Adventure Out on PS4 Today
The wolf among us
by Stephen TailbyGame Profile
Title:
Lost Ember
Developer:
Mooneye Studios
Genre:
Adventure
Players:
1
PlayStation Network Release Date:
22nd Nov 2019 (USA)
22nd Nov 2019 (UK/EU)
Official Site:
lostember.com
Where to buy:
Buy on Amazon
Five years in the making, Lost Ember is now available on PlayStation 4, and it's looking pretty good. For those who aren't aware, it's a game in which you play as a wolf with the ability to possess other animals. Using this power, you'll need to traverse the game's luscious natural environments and uncover its secrets.
Each creature will have pros and cons, so it's all about finding the right animal to get you through each location. We quite like this launch trailer, which shows off the game's lovely stylised look. If nothing else, hopping from one beast to another looks like a fun way to explore.
As we said, the game releases today on PS4. What do you think of Lost Ember? Walk with the animals, talk with the animals in the comments below.
[via youtube.com]


Welcome to Cosa Nostra!
Thanks for creating an account! We need to verify your email address so you can enjoy the full extension of this gangster world.
Feel free to access the edit profile screen in your app to change it to whatever it is more convenient for you.
Sincerely,
Stayzest team


1 Among the Greeks, Heracles, Dionysus, and Pan are held to be the youngest of the gods. But in Egypt, Pan is the most ancient of these and is one of the eight gods who are said to be the earliest of all; Heracles belongs to the second dynasty (that of the so-called twelve gods); and Dionysus to the third, which came after the twelve.
2 How many years there were between Heracles and the reign of Amasis, I have already shown; Pan is said to be earlier still; the years between Dionysus and Amasis are the fewest, and they are reckoned by the Egyptians at fifteen thousand.
3 The Egyptians claim to be sure of all this, since they have reckoned the years and chronicled them in writing.
4 Now the Dionysus who was called the son of Semele, daughter of Cadmus, was about sixteen hundred years before my time, and Heracles son of Alcmene about nine hundred years; and Pan the son of Penelope (for according to the Greeks Penelope and Hermes were the parents of Pan) was about eight hundred years before me, and thus of a later date than the Trojan war.


An HTTP content negotiator for Node.js
sh
$ npm install negotiator
js
var Negotiator = require('negotiator')
```js availableMediaTypes = [‘text/html’, ‘text/plain’, ‘application/json’]
// The negotiator constructor receives a request object negotiator = new Negotiator(request)
// Let’s say Accept header is ‘text/html, application/*;q=0.2, image/jpeg;q=0.8’
negotiator.mediaTypes() // -> [‘text/html’, ‘image/jpeg’, ‘application/*’]
negotiator.mediaTypes(availableMediaTypes) // -> [‘text/html’, ‘application/json’]
negotiator.mediaType(availableMediaTypes) // -> ‘text/html’ ```
You can check a working example at examples/accept.js
.
Returns the most preferred media type from the client.
Returns the most preferred media type from a list of available media types.
Returns an array of preferred media types ordered by the client preference.
Returns an array of preferred media types ordered by priority from a list of available media types.
```js negotiator = new Negotiator(request)
availableLanguages = [‘en’, ‘es’, ‘fr’]
// Let’s say Accept-Language header is ‘en;q=0.8, es, pt’
negotiator.languages() // -> [‘es’, ‘pt’, ‘en’]
negotiator.languages(availableLanguages) // -> [‘es’, ‘en’]
language = negotiator.language(availableLanguages) // -> ‘es’ ```
You can check a working example at examples/language.js
.
Returns the most preferred language from the client.
Returns the most preferred language from a list of available languages.
Returns an array of preferred languages ordered by the client preference.
Returns an array of preferred languages ordered by priority from a list of available languages.
```js availableCharsets = [‘utf-8’, ‘iso-8859-1’, ‘iso-8859-5’]
negotiator = new Negotiator(request)
// Let’s say Accept-Charset header is ‘utf-8, iso-8859-1;q=0.8, utf-7;q=0.2’
negotiator.charsets() // -> [‘utf-8’, ‘iso-8859-1’, ‘utf-7’]
negotiator.charsets(availableCharsets) // -> [‘utf-8’, ‘iso-8859-1’]
negotiator.charset(availableCharsets) // -> ‘utf-8’ ```
You can check a working example at examples/charset.js
.
Returns the most preferred charset from the client.
Returns the most preferred charset from a list of available charsets.
Returns an array of preferred charsets ordered by the client preference.
Returns an array of preferred charsets ordered by priority from a list of available charsets.
```js availableEncodings = [‘identity’, ‘gzip’]
negotiator = new Negotiator(request)
// Let’s say Accept-Encoding header is ‘gzip, compress;q=0.2, identity;q=0.5’
negotiator.encodings() // -> [‘gzip’, ‘identity’, ‘compress’]
negotiator.encodings(availableEncodings) // -> [‘gzip’, ‘identity’]
negotiator.encoding(availableEncodings) // -> ‘gzip’ ```
You can check a working example at examples/encoding.js
.
Returns the most preferred encoding from the client.
Returns the most preferred encoding from a list of available encodings.
Returns an array of preferred encodings ordered by the client preference.
Returns an array of preferred encodings ordered by priority from a list of available encodings.
The accepts module builds on this module and provides an alternative interface, mime type validation, and more.


%#
aStor2 -- storage area network configurable via Web-interface
Copyright (C) 2009-2012 ETegro Technologies, PLC
Vladimir Petukhov<EMAIL_ADDRESS>This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
|
<%+san/logical/title%>
<% if ( line.logical.volume_group.total_mib - line.logical.volume_group.allocated_mib ) ~= 0 then %>
<%+san/logical/logical_volume-control%>
<% end %>
<% if line.logical.deletable then %>
<%+san/logical/remove%>
<% end %>
|
| <%+san/logical/fillbar%> |
| <% if ( line.logical.volume_group.total_mib - line.logical.volume_group.allocated_mib ) ~= 0 then %> <%+san/logical_volume/forms/add%> <% end %> |
| <%+san/logical/writecache%> |
| <%+san/logical/cache_mode%> |


flyctl
Command-line tool for flyctl.io.
More information: home page
- Sign into a Fly account:
flyctl auth login
- Launch an application from a specific Dockerfile (the default path is the current working directory):
flyctl launch --dockerfile path/to/dockerfile
- Open the current deployed application in the default web browser:
flyctl open
- Deploy the Fly applications from a specific Dockerfile:
flyctl deploy --dockerfile path/to/dockerfile
- Open the Fly Web UI for the current application in a web browser:
flyctl dashboard
- List all applications in the logged-in Fly account:
flyctl apps list
- View the status of a specific running application:
flyctl status --app app_name
- Show version information:
flyctl version


There are a handful of . | Learn a bit more |
insight.
Our different PLPs have their own strengths and weaknesses
Traffic, conversion and cart additions are very different by template type.
Visits to orders conversion for PLP visitors
Expand (or not) on the summary above.
insight
As a percentage of the total, visits to
Expand (or not) on the summary above.
insight
Add to Cart instances for visits passing through a PLP
Expand (or not) on the summary above.
insight
PLP page type conversions
We have 3 different PLP templates; Category, Brand and Search. Each are unique but visually identical.
Need to say when we use each...


--- layout: post title: When wordpress went down...! date: 2010-06-11 07:21:23.000000000 +02:00 categories: - blog - news tags: [] status: publish type: post published: true meta: _edit_last: '1' author: ---
The early morning of June 11th (or June 10 evening for the folks in US west coast) saw wordpress.com going down! This is the first time that I remember such a big outage ever since I started with wordpress. It was just giving an error message saying "Wordpress will be back shortly!". Millions of blogs hosted on wordpress were affected because of this. Also non-wordpress hosted blogs using wordpress were affected for their stats. As the stats plugin uses API keys issued by wordpress.
[caption id="attachment_141" align="alignleft" width="779" caption="Wordpress.com goes down, affects wordpress stats as well."][/caption]
Majority of wordpress blogs are up now and rest are slowly crawling back to normalcy. The main site is yet to be restored.


Notebooks
Story: Kki-a-||ken who threw stones at swallows
Kki-a-||ken who threw stones at swallows
Title
Kki-a-||ken who threw stones at swallows
Collection
Summary
Regarding various Bushmen. Partly in English after and partly in Bushman (L V.-21. 5702 rev. and 5703 rev.). A note about the child Kki-a-||ken (who had been made very ill after throwing stones at a swallow). He lived and was killed in adulthood by 'half-white' (and half kku'obbo) people. Some biographical details of his relations (he was one of Dia!kwain's cousins) and a description of how he died along with three other |xam. They were driven to a cliff by men on horseback and killed there. This account includes the names of the other man who died with Kki-a-||ken, or Stuurman (Gert Rounabout, ||kum-!kan or Prince Santkop, and Swaart Klaas).
Comments
1) See also Swallows, 2) This story is found in Book V-21
Contributors
Date
December 1875
Categories
History (personal), Relations with others
Keywords
personal history (of Kki-a-||ken who threw stones at swallows) , personal history (of Dia!kwain's cousin, Kki-a-||ken) , personal history (death of Kki-a-||ken and three other |xam) , death (of Kki-a-||ken and some other |xam) , names (of Kki-a-||ken's relations) , names (of the |xam men killed along with Kki-a-||ken) , swallows (Kki-a-||ken who threw stones at) , stones (throwing at swallows prohibited) , stones (and Kki-a-||ken who threw them at swallows) , illness (of Kki-a-||ken who threw stones at swallows as a child) , illness (and throwing stones at swallows)
Story Pages
5702v-5703v


ZRender
View on GitHub
Home
Example
Demo
Animation
Chart
Color Series
Artist
slice
API & Doc
Download
ZIP (2.0.6)
ZIP (Latest)
Link
Ecom-FE
Data Visualization
ECharts
Refresh ~


Biography
Throughout the years I've found coding to be fun, challenging, and the one
thing I enjoyed learning about. I have been coding for about 5 years and
also completed an immersive web development program at DevMountain,
learning full stack web development and refining my computer science
fundamentals. I worked as a supervisor for a landscaping company in Hawaii
doing government contracts. Prior to that, I was going to school while
working at Adidas as a retail associate and at Honda as a detailer. I'm
excited for what the future holds and ready for the unexpexted adventures
to come.


Arabidopsis cell expression genes cells {border-style px;} #ffffff;} plant root genome shown CYCLIN cells. ADF different epidermal involved kinase microtubule organization presented protein proteins px; {font-family UK) font-size formation identified normal plants MIXTA actin demonstrated double; elements expressed flower functional functions gene mutants overexpression profilin reduced required trichomes (University Interestingly, activity auxin border-color border-width cells, conical contains encodes indicating majus mesophyll solid; specifically {font-style {font-weight α-tubulin (John Centre, DNA Genes Innes Martin Norwich, addition, bold caused causes cellular courier; data developmental division early elongating em; encode essential expansion form formed function gene. genes. identification identify lateral levels living maize meristems microtubules mutant new observation pt;} reported right-handed roots spr tobacco transcriptional vegetative


{% load i18n %} {% blocktrans %}
Images are dedicated to keep virtual machine's configuration, such as operating system, software and configs. Thats what new virtual machines are created from and existing ones are saved to.
List of all your private images. You can:
any of them.
You can also upload your own private image, providing:


#1
#2
#3
×
Toggle Drawer: D
Toggle FullScreen: F
Pause Visualization: P
×
Restore to default themes?
Warning: This will erase all saved options!


Maze Generator Demo (For Disjoint Sets): Follow the lines!
Controls:
Redraw
Clear
Line length (smaller lines=bigger maze):
Hide/show solution


<booklibrary>
The <booklibrary>
element contains the library information for a book.
Library entries contain information about the series, library, or collection of documents
to which the book belongs.
Category: Bookmap content elements


On 1 December 2018, 11 new articles were published in 5 journals.
A Model of Neutralization Techniques
The Case Studies of Fraud Prevention Mechanisms in the Malaysian Medium Enterprises
Helping Auditors Identify Deception Through Psycholinguistics
Healthcare Fraud Under the Microscope: Improving Its Prevention
Be Like Water: Developing A Fluid Corruption Prevention Strategy
Terrorism Financing and Money Laundering: Two Sides of the Same Coin?
Terrorism, Organised Crime and Threat Mitigation in A Globalised World
Nothing to Lose? An Examination of Prison Misconduct Among Life-Without-Parole Inmates
Adults’ Perceptions of Children’s Referentially Ambiguous Responses


Sprint 6 Ready for live
Prototypes to guide the creation of the live site. The code should not be used directly in the live environment
Useful links
This prototype is to be used to define the 'Useful links' section only
Job categories
From the homepage you are able to follow the job category journey by clicking on 'Engineering and maintenance'


|
C Training
1.0
|
Which is better?
No clear answer, but there are known trade-offs.
“Mathematicians” often prefer recursive approach. ! Solutions often shorter, closer in spirit to abstract mathematical entity. ! Good recursive solutions may be more difficult to design and test.
“Programmers” often
prefer iterative solutions. ! Somehow, it seems more appealing to many. ! Control stays local to loop, less magical
To free memory allocated from heap by
When you think you know well enough about pointers, boom, here comes BTLevelOrderTraversal_1.c
to improve you are wrong.
Review how to implement a heap by 2 stacks to help understand the more complex usage of pointers.
Compare to a bash script, you just collect all the bash commands into a file, nothing more. it is feasible when the dependency relation is easy,
with [Makefile
](Makefile)
A common requirement when writing code is the ability to use the identical, or nearly identical code for different data types.
in tree.h
, I define 3 functions.
I just write the same code for multiple times.


Talks
We all know the classic web application that has a database connected to it. Over time the app grows and we add more bells and whistles, like a search functionality via ElasticSearch. Soon we notice that we need a cache too.
Now we have a fairly complex application and a completely new set of problems like the cache invalidation, stale data, consistency issues etc.
What if I said that using logs would help you here? This talk looks into using Kafka via Python to build solid data structures.
Overview of the talk outline is:
- Description of the problem
- What are log based data structures
- What's Kafka and why is it amazing?
- Using Kafka via Python
- Demo time!
About the author: I'm a content engineer at the music streaming company Spotify. I've been using Python for professional and personal projects for over 10 years now. Over the course of years I've built open-source tools for Python and even contributed to the cpython itself.
I have also been a part of creating both PyCon Finland and PyCon Sweden. I'm also organising the PySthlm meetups in Stockholm.
I would like to talk about software testing from a real world point of view, explaining a healthy testing mindset for all programming skill levels. Just as programming skill is a continuum of experience, testing best practices are also not black and white. I will begin with a brief introduction to some testing concepts (unit testing, integration testing, system testing, etc) but the main focus of the presentation will be on ways for both professional developers and hobbyist programmers to improve their use of testing in everyday life.
About the author: I'm a junior developer working in a Django e-commerce company in Helsinki. I've worked with Python for 3 years in both the fields of web development and scientific computing. I moved to Finland from England around 10 months ago and I love talking about Python and progamming in general.
PEP492 accepted and Python 3.5 will have new async/await statements. Talk will introduce them to the audience and shows examples on how to and when to use.
Talk also covers how async/await helps to write better and clear asyncio web applications on top of aiohttp library and shows common patterns to use, while making backend applications on Python 3.5.
About the author: Python & React.js developer from Kyiv, Ukraine. Love creating API for humans, open source libraries, and giving talks about the process. In Python 3 & asyncio I trust.
Motivation for this talk is sharing my own experience with implementing Stripe payments in a Django application. I will, specifically, touch on Stripe Connect which is meant for marketplaces. Django is still missing a package for this purpose.
The talk will include challenges faced and some of the solutions.
About the author: I've been a speaker in 2014 and 2013 at PyCon Finland. I am the founder of Helsinki PyLadies.
In this talk I will discuss my attempt to build a search engine for legal documents that lawyers would love to use. I tried to figure out how lawyers work with documents and to build a search engine that would best fit their workflows. I will discuss the methods that I have used for finding out about their workflows and the decisions that I had to make to best accommodate the workflows of my users. The talk will include practical advice on using Elasticsearch.
About the author: I was a lawyer, then decided to become a coder because I enjoyed coding so much and I was motivated by the ability to make a difference that coders possess more than lawyers. Currently I have three years of experience in software development, including 1.5 years working for a software development firm. The project that will feature in my talk is online at http://legal.ee/ and I am currently putting in full time effort to develop it.
Worms, Trojans, BotNets and Ransomware. These bad guys are quite known nowadays but how do they look like?
I am gonna show one of the approaches IT Security experts employ to study these threats using open source Python technologies.
The presentation would be a live demo in which I'll execute some malware in a secure environment and show how it behaves and how to detect it.
I will show a Sandboxing technology developed within F-Secure named Sandboxed Execution Environment (SEE). SEE is a Python framework which allows to quickly build behavioural scanning engines.
SEE will be used altogether with other open source technologies to show some recent malware to the audience.
About the author: I am a software engineer working in F-Secure Labs. F-Secure Corporation is an IT security company based in Helsinki.
Among my duties, malware handling and analysis automation is one of the most interesting to me.
I develop and maintain the main behavioural scanning engines within F-Secure back-end and SEE is one of their core technology.
Most existing server frameworks only cater to a specific network protocol, forcing developers to learn everything anew when building an app for a different protocol. Or worse, there's no framework available so they have to reinvent everything by themselves.
Now, meet Asphalt -- a new general purpose server microframework that not only solves these problems, but also provides strong compatibility guarantees through the use of semantic versioning and PEP 484 type hints.
In this talk, you will hear how Asphalt compares (or doesn't) to Twisted, how to mix asynchronous code with synchronous code and how to develop multi-protocol applications that work seamlessly together.
About the author: I'm a private contractor from Espoo, 35 years old. I'm a Jython core developer and the author of APScheduler, sqlacodegen, jython-swingutils, the concurrent.futures backport and of course the Asphalt framework. I build and maintain Enterprise Resource Planning systems for a living.
Want to enable single sign-on in your web applications and allow Kerberos logins in an enterprise next to you to work? This talk covers recent developments in FreeIPA, SSSD, and Ipsilon projects that allow application developers to integrate with traditional corporate infrastructure with ease.
About the author: I'm Principal Software Engineer at Red Hat, working on FreeIPA, Samba, SSSD, Kerberos, and many other things. FreeIPA is a free software infrastructure project doing to Linux and other POSIX-compatible operating systems what Active Directory is for Windows environment. FreeIPA is written in Python and C.
What are plugins? Why are they nice? How do you write them for applications? How do you make your application accept plugins?
About the author:Python for about 15 years, since version 1.5 at school. Started coding
Python for the web
making his own frameworks before they were a thing. Since then a
Django veteran who
likes to take breaks writing Python in other ways, like Ripwhine the
CD ripping tool. Original
roots in system administration, then onto coding, being CTO at his
startup for some years
and currently Software Architect at Codento. https://fi.linkedin.com/in/mjtorn
I would like to introduce and expand the ideas presented by Adam Tornhil in his work (Your Code as a Crime Scene – applying forensics to mining software repositories - where do the bugs propbably lurch). Tornhill's main ideas are combining cyclomatic code complexity metric with repository history -calculated "code/knowledge ownership". Adding test coverage data, replicated production-system web traffic and their call graphs adds whole new dimensions to the data available from the repository.
About the author: I'm a(n almost-university-dropout) mathemathics major, software engineer. I've worked professionally with Python (and Django) since 2009, having also had the privilege to work only with DVCS. I've worked in different organizations ranging from freelancing and small companies to multinational corporations. I enjoy automation, debuggers and meta-programming. Most of my non-programming spare time goes into a cappella singing, improvisational theatre and finding ways to express my acrobatic tendencies.
What do you do when your python project has dependencies beyond Python? Nix is a "purely functional" package manager, which can also be used like "virtualenv", but for everything. I would cover single user installation of Nix package manager on Linux or Mac, defining Nix based development environments, generating Nix expressions for large Python projects using buildout, and finally, building minimal Docker images from SCRATCH by using those generated expressions.
About the author: I'm a system designer at University of Jyväskylä and core contributor for a Python based open source CMS called Plone. I have blogged about my topics at https://datakurre.pandala.org/


Sweetdrop
// personal file sharing
Gr33tings Lynx user! You can
browse files manually in text mode
.


Compliance Report
Compliance Report
S.1. There is a Site Development Plan, and program of implementation.
S.2. The Campus has accessible good roads and pathways.
S.3. The campus is in a well-planned, clean and properly landscaped environment.
S.4. There is a system to ensure that all of the following are provided:
S.4.1. traffic safety in and outside the campus;
S.4.2. waste management program;
S.4.3. proper utilization, repair and upkeep of school facilities and equipment; and
S.4.4. cleanliness and orderliness of the school campus.
S.5. An area for outdoor educational activities, e.g. social, physical, athletic, cultural, military training, etc. exists.
S.6. There is a campus security unit that ensures safety of the academic community.
I.1. The site infrastructure development plan is implemented and planned.
I.2. The site plan is strategically displayed inside the campus indicating the location of the different buildings, driveways, parking areas, etc.
I.3. The Infrastructure development plan is implemented in accordance with approved zoning ordinances.
I.4. Covered walks are provided to protect the academic community from inclement weather.
I.5. The institution implements a Waste Management Program.
I.6. The Maintenance Unit or its equivalent periodically inspects school facilities and equipment to ensure their proper utilization and upkeep.
O.1. The Campus environment is conducive to all educational activities.
O.2. The site can accomodate its present school population and future expansion.
O.3. The campus is safe and well-maintained.
O.4. The campus is well-planned, clean and properly landscaped.
S.1. The buildings meet all requirements of the Building Code. A Certificate of Occupancy for each building is conspicuously displayed.
S.2. The buildings are constructed according to their respective uses.
S.3. The buildings are well-planned and appropriately located to provide for future expansion.
S.4. Entry and exit points permit the use of the buildings for public and other functions with minimum interference to school activities.
S.5. Emergency exits are provided and properly marked.
S.6. The buildings are equipped with emergency/fire escapes which are readily accessible.
S.7.The corridors, doorways, and alleys are well-constructed for better mobility.
S.8. The buildings are well-ventilated are lighted.
S.9. The buildings have facilities for persons with disability (PWDs) as provided by law.
S.10. There is a central signal and fire alarm system.
S.11. There are readily accessible and functional fire extinguishers and other fire-fighting equipment.
S.12. . Bulletin boards, display boards, waste disposal containers and other amenities are strategically located inside the buildings.
S.13. There are faculty rooms and offices.
S.14. The buildings are insured.
I.1. The buildings are clean, well-maintained and free from vandalistic acts.
I.2. Toilets are clean and well-maintained.
I.3. Electrical lines are safely installed and periodically checked.
I.4. Water facilities are functional and well-distributed in all buildings.
I.5. There is a periodic potability testing of drinking water.
I.6. Floor plans indicating fire exits and location of fire-fighting equipment, stand pipes, and other water sources are conspicuously displayed in each building.
I.7. All school facilities are periodically subjected to pest control and inspection.
I.8. Smoking is strictly prohibited inside the campus.
I.9. Periodic drill on disaster and risk reduction (earthquake, flood, fire, etc.) is conducted.
O.1. The buildings and other facilities are safe, well maintained and functional.
S.1. Classroom size (1.5 sq.m. per student) meets standard specifications for instruction.
S.2. The classrooms are well-lighted, ventilated and acoustically conditioned.
S.3. The classrooms are adequate and are provided with enough chairs, furniture and equipment.
S.4. There are sufficient supplies (chalkboards/whiteboards, and instructional materials) in each classroom.
I.1. The classrooms are clearly marked and arranged relative to their functions.
I.2. The classrooms are well-maintained and free from interference.
I.3. Students cooperate in maintaining the cleanliness and orderliness of the classrooms.
O.1. Classrooms are adequate and conductive to learning.
S.1. The administrative offices are accessible to stakeholders.
S.2. All offices are accessible and conveniently located in accordance to their functions.
S.3. There are offices and workspaces for all officials, faculty and administrative staff.
S.4. Administration and faculty offices and staff rooms are clean, well-lighted and ventilated.
S.5. Function rooms and lounge are available and accessible.
S.6. Storerooms are strategically located.
S.7. There is internal and external communication system.
S.8. There are clean toilets for administrators, faculty, staff, and students.
I.1. All offices are furnished with the necessary equipment, furniture, supplies and materials.
I.2. All offices are well-maintained.
O.1. The offices and staff rooms are adequate and conductive to working environment.
S.1. Function rooms for holding meetings, conferences, convocations and similar activities are sufficient.
S.2. Facilities for athletics sports, cultural activities, military training, etc. are accessible.
S.3. The seating capacity conforms to standards.
S.4. There are adequate and well-marked entry and exit points.
S.5. There are storage facilities for athletic sports and other curricular training equipment.
I.1. Indoor facilities are constructed with:
I.1.1. appropriate flooring;
I.1.2. proper lighting and ventilation;
I.1.3. safety measures;
I.1.4. toilets;
I.1.5. functional drinking facilities; and
I.1.6. enough chairs.
I.2. The constructed outdoor facilities are:
I.2.1. free from hazards;
I.2.2. suitably surfaced floor;
I.2.3. appropriately laid out for a variety of activities;
I.2.4. properly maintained and secured; and
I.2.5. installed with drainage system.
I.3. Assembly, athletic sports and cultural facilities are sufficient and varied to meet the requirements of the institution.
I.4.Audio-visual room and facilities with appropriate equipment are utilized in support of the teaching-learning such as bot not limited to video/ overhead/ slide projector, sound system, LCD projectors and screens.
O.1. Indoor and outdoor facilities are well-equipped and properly maintained.
S.1. The Medical and Dental Clinic has basic facilities such as: reception area, records section, examination/treatment room and toilets.
S.2.The institution has functional medical and dental section/area.
S.3. Potable water is available and sufficient.
S.4. Medical and dental equipment are provided.
S.5. There are enough medical and dental supplies and materials.
S.6. Storage facilities (refrigerator, steel cabinets, etc.) are available.
S.7. Medical and dental supplies and materials are properly labeled.
S.8. The following basic medical equipment and medicines are all available:
S.8.1. emergency medicines;
S.8.2. ambobag;
S.8.3. oxygen tank;
S.8.4. intravenous fluid;
S.8.5. sphygmomanometer (at least 2 sets);
S.8.6. thermometer (at least 10 pcs);
S.8.7. diagnostic sets;
S.8.8. stethoscope (at least 2 units);
S.8.9. treatment cart; and
S.8.10. nebulizer.
S.9. The following basic dental equipment and apparatuses are available:
S.9.1. dental chair;
S.9.2. autoclave (sterilizer)
S.9.3. medical supplies;
S.9.4. filling instruments; and
S.9.5. basic instruments (forceps, mouth mirror, cotton fliers, explorer, etc).
S.10. The Medical/Dental Clinic has ample space, adequate lighting and ventilation.
I.1.The Medical and Dental Clinics are managed by qualified medical and dental offices.
I.2. Distinct rooms and storage areas are properly labeled.
I.3. Medical and dental services are regularly monitored and evaluated
O.1. The medical, dental clinic and services are functional.
S.1. The institution has a Student Center with supplies and materials.
S.2. Policies and guidance on the proper utilization of Student Center are in place.
S.3. The Student Center is well-lighted and ventilated.
S.4. A conference room is available for students use.
S.5. There are facilities and equipment for table games, music appreciation, and TV or video viewing.
S.6. Clean and sanitary toilets, for men separate from those of women are available.
S.7. Toilet fixtures for students with special needs and PWDs are provided.
S.8. There are offices for student leaders, the editorial staff of the student publication and the officers of other student organizations.
I.1. Student activities at the Student Center are regularly conducted and monitored
I.2. The Student Center is properly maintained.
O.1. The Student Center is fully equipped and functional
S.1. The canteen/cafeteria is well-lighted, ventilated, screened and provided with potable water supply.
S.2. There are enough;
S.2.1. cooking and preparatory equipment;
S.2.2. serving tools and utensils;
S.2.3. cleaning supplies and materials; and
S.2.4. dining tables and chairs.
S.3. Wash area and toilets are available.
I.1. The institution requires business and sanitary permits for the operation of the Food Center/Cafeteria/Canteen.
I.2. Food served is varied, nutritious, safe and sold at affordable price.
I.3. The Food Center/ Cafeteria/Canteen is well-managed by qualified and competent staff.
I.4. Cleanliness and orderliness are enforced.
I.5. The food services are prompt.
O.1. The Canteen/Cafeteria/Food Center is well-patronized.
O.2. The food services generate income for the institution.
S.1. The Accreditation Center (AC) is accessible and conveniently located.
S.2. The AC has the following equipment and fixtures:
S.2.1. working tables and chairs;
S.2.2. cabinets for display and filing
S.2.3. good ventilation and lighting;
S.2.4. computer unit;
S.2.5. toilets; and
S.2.6. lounge.
I.1. The Institution/College/Academic Unit maintains the AC with the required resources, furniture, and documents.
I.2. The AC is managed by a qualified and committed staff/faculty.
I.3. Required documents/information and exhibits are updated, systematically packaged and readily available.
O.1. The AC is well-equipped and managed.


- setPasswordEncryptor(PasswordEncryptor) - Method in class org.jasypt.acegisecurity.PasswordEncoder
-
Deprecated.
Sets a password encryptor to be used.
- setPasswordEncryptor(PasswordEncryptor) - Method in class org.jasypt.spring.security.PasswordEncoder
-
Deprecated.
Sets a password encryptor to be used.
- setPbeStringEncryptor(PBEStringEncryptor) - Method in class org.jasypt.acegisecurity.PBEPasswordEncoder
-
Deprecated.
Sets a string digester to be used.
- setPbeStringEncryptor(PBEStringEncryptor) - Method in class org.jasypt.spring.security.PBEPasswordEncoder
-
Deprecated.
Sets a string digester to be used.
- setStringDigester(StringDigester) - Method in class org.jasypt.acegisecurity.PasswordEncoder
-
Deprecated.
Sets a string digester to be used.
- setStringDigester(StringDigester) - Method in class org.jasypt.spring.security.PasswordEncoder
-
Deprecated.
Sets a string digester to be used.
- setTextEncryptor(TextEncryptor) - Method in class org.jasypt.acegisecurity.PBEPasswordEncoder
-
Deprecated.
Sets a text encryptor to be used.
- setTextEncryptor(TextEncryptor) - Method in class org.jasypt.spring.security.PBEPasswordEncoder
-
Deprecated.
Sets a text encryptor to be used.


bpf - perform a command on an extended BPF map or program
#include <linux/bpf.h>
int bpf(int cmd, union bpf_attr *attr, unsigned int size);
The bpf() system call performs a range of operations related to extended
Berkeley Packet Filters. Extended BPF (or eBPF) is similar to the original
("classic") BPF (cBPF) used to filter network packets. For both cBPF
and eBPF programs, the kernel statically analyzes the programs before loading
them, in order to ensure that they cannot harm the running system.
eBPF extends cBPF in multiple ways, including the ability to call
a fixed set of in-kernel helper functions (via the BPF_CALL opcode
extension provided by eBPF) and access shared data structures such as eBPF
maps.
eBPF maps are a generic data structure for storage of different data types. Data
types are generally treated as binary blobs, so a user just specifies the size
of the key and the size of the value at map-creation time. In other words, a
key/value for a given map can have an arbitrary structure.
A user process can create multiple maps (with key/value-pairs
being opaque bytes of data) and access them via file descriptors. Different
eBPF programs can access the same maps in parallel. It's up to the user
process and eBPF program to decide what they store inside maps.
There's one special map type, called a program array. This type of
map stores file descriptors referring to other eBPF programs. When a lookup
in the map is performed, the program flow is redirected in-place to the
beginning of another eBPF program and does not return back to the calling
program. The level of nesting has a fixed limit of 32, so that infinite
loops cannot be crafted. At run time, the program file descriptors stored in
the map can be modified, so program functionality can be altered based on
specific requirements. All programs referred to in a program-array map must
have been previously loaded into the kernel via bpf(). If a map
lookup fails, the current program continues its execution. See
BPF_MAP_TYPE_PROG_ARRAY below for further details.
Generally, eBPF programs are loaded by the user process and
automatically unloaded when the process exits. In some cases, for example,
tc-bpf(8), the program will continue to stay alive inside the kernel
even after the process that loaded the program exits. In that case, the tc
subsystem holds a reference to the eBPF program after the file descriptor
has been closed by the user-space program. Thus, whether a specific program
continues to live inside the kernel depends on how it is further attached to
a given kernel subsystem after it was loaded via bpf().
Each eBPF program is a set of instructions that is safe to run
until its completion. An in-kernel verifier statically determines that the
eBPF program terminates and is safe to execute. During verification, the
kernel increments reference counts for each of the maps that the eBPF
program uses, so that the attached maps can't be removed until the program
is unloaded.
eBPF programs can be attached to different events. These events
can be the arrival of network packets, tracing events, classification events
by network queueing disciplines (for eBPF programs attached to a
tc(8) classifier), and other types that may be added in the future. A
new event triggers execution of the eBPF program, which may store
information about the event in eBPF maps. Beyond storing data, eBPF programs
may call a fixed set of in-kernel helper functions.
The same eBPF program can be attached to multiple events and
different eBPF programs can access the same map:
tracing tracing tracing packet packet packet
event A event B event C on eth0 on eth1 on eth2
| | | | | ^
| | | | v |
--> tracing <-- tracing socket tc ingress tc egress
prog_1 prog_2 prog_3 classifier action
| | | | prog_4 prog_5
|--- -----| |------| map_3 | |
map_1 map_2 --| map_4 |--
The operation to be performed by the bpf() system call is determined by
the cmd argument. Each operation takes an accompanying argument,
provided via attr, which is a pointer to a union of type
bpf_attr (see below). The size argument is the size of the union
pointed to by attr.
The value provided in cmd is one of the following:
- BPF_MAP_CREATE
- Create a map and return a file descriptor that refers to the map. The
close-on-exec file descriptor flag (see fcntl(2)) is automatically
enabled for the new file descriptor.
- BPF_MAP_LOOKUP_ELEM
- Look up an element by key in a specified map and return its value.
- BPF_MAP_UPDATE_ELEM
- Create or update an element (key/value pair) in a specified map.
- BPF_MAP_DELETE_ELEM
- Look up and delete an element by key in a specified map.
- BPF_MAP_GET_NEXT_KEY
- Look up an element by key in a specified map and return the key of the
next element.
- BPF_PROG_LOAD
- Verify and load an eBPF program, returning a new file descriptor
associated with the program. The close-on-exec file descriptor flag (see
fcntl(2)) is automatically enabled for the new file
descriptor.
- The bpf_attr union consists of various anonymous structures that
are used by different bpf() commands:
union bpf_attr {
struct { /* Used by BPF_MAP_CREATE */
__u32 map_type;
__u32 key_size; /* size of key in bytes */
__u32 value_size; /* size of value in bytes */
__u32 max_entries; /* maximum number of entries
in a map */
};
struct { /* Used by BPF_MAP_*_ELEM and BPF_MAP_GET_NEXT_KEY
commands */
__u32 map_fd;
__aligned_u64 key;
union {
__aligned_u64 value;
__aligned_u64 next_key;
};
__u64 flags;
};
struct { /* Used by BPF_PROG_LOAD */
__u32 prog_type;
__u32 insn_cnt;
__aligned_u64 insns; /* 'const struct bpf_insn *' */
__aligned_u64 license; /* 'const char *' */
__u32 log_level; /* verbosity level of verifier */
__u32 log_size; /* size of user buffer */
__aligned_u64 log_buf; /* user supplied 'char *'
buffer */
__u32 kern_version;
/* checked when prog_type=kprobe
(since Linux 4.1) */
};
} __attribute__((aligned(8)));
Maps are a generic data structure for storage of different types of data. They
allow sharing of data between eBPF kernel programs, and also between kernel
and user-space applications.
Each map type has the following attributes:
- type
- maximum number of elements
- key size in bytes
- value size in bytes
The following wrapper functions demonstrate how various
bpf() commands can be used to access the maps. The functions use the
cmd argument to invoke different operations.
- BPF_MAP_CREATE
- The BPF_MAP_CREATE command creates a new map, returning a new file
descriptor that refers to the map.
-
int
bpf_create_map(enum bpf_map_type map_type,
unsigned int key_size,
unsigned int value_size,
unsigned int max_entries)
{
union bpf_attr attr = {
.map_type = map_type,
.key_size = key_size,
.value_size = value_size,
.max_entries = max_entries
};
return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
}
- The new map has the type specified by map_type, and attributes as
specified in key_size, value_size, and max_entries.
On success, this operation returns a file descriptor. On error, -1 is
returned and errno is set to EINVAL, EPERM, or
ENOMEM.
- The key_size and value_size attributes will be used by the
verifier during program loading to check that the program is calling
bpf_map_*_elem() helper functions with a correctly initialized
key and to check that the program doesn't access the map element
value beyond the specified value_size. For example, when a
map is created with a key_size of 8 and the eBPF program calls
-
bpf_map_lookup_elem(map_fd, fp - 4)
- the program will be rejected, since the in-kernel helper function
-
bpf_map_lookup_elem(map_fd, void *key)
- expects to read 8 bytes from the location pointed to by key, but
the fp - 4 (where fp is the top of the stack)
starting address will cause out-of-bounds stack access.
- Similarly, when a map is created with a value_size of 1 and the
eBPF program contains
-
value = bpf_map_lookup_elem(...);
*(u32 *) value = 1;
- the program will be rejected, since it accesses the value pointer
beyond the specified 1 byte value_size limit.
- Currently, the following values are supported for map_type:
-
enum bpf_map_type {
BPF_MAP_TYPE_UNSPEC, /* Reserve 0 as invalid map type */
BPF_MAP_TYPE_HASH,
BPF_MAP_TYPE_ARRAY,
BPF_MAP_TYPE_PROG_ARRAY,
BPF_MAP_TYPE_PERF_EVENT_ARRAY,
BPF_MAP_TYPE_PERCPU_HASH,
BPF_MAP_TYPE_PERCPU_ARRAY,
BPF_MAP_TYPE_STACK_TRACE,
BPF_MAP_TYPE_CGROUP_ARRAY,
BPF_MAP_TYPE_LRU_HASH,
BPF_MAP_TYPE_LRU_PERCPU_HASH,
BPF_MAP_TYPE_LPM_TRIE,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
BPF_MAP_TYPE_HASH_OF_MAPS,
BPF_MAP_TYPE_DEVMAP,
BPF_MAP_TYPE_SOCKMAP,
BPF_MAP_TYPE_CPUMAP,
};
- map_type selects one of the available map implementations in the
kernel. For all map types, eBPF programs access maps with the same
bpf_map_lookup_elem() and bpf_map_update_elem() helper
functions. Further details of the various map types are given below.
- BPF_MAP_LOOKUP_ELEM
- The BPF_MAP_LOOKUP_ELEM command looks up an element with a given
key in the map referred to by the file descriptor fd.
-
int
bpf_lookup_elem(int fd, const void *key, void *value)
{
union bpf_attr attr = {
.map_fd = fd,
.key = ptr_to_u64(key),
.value = ptr_to_u64(value),
};
return bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));
}
- If an element is found, the operation returns zero and stores the
element's value into value, which must point to a buffer of
value_size bytes.
- If no element is found, the operation returns -1 and sets errno to
ENOENT.
- BPF_MAP_UPDATE_ELEM
- The BPF_MAP_UPDATE_ELEM command creates or updates an element with
a given key/value in the map referred to by the file descriptor
fd.
-
int
bpf_update_elem(int fd, const void *key, const void *value,
uint64_t flags)
{
union bpf_attr attr = {
.map_fd = fd,
.key = ptr_to_u64(key),
.value = ptr_to_u64(value),
.flags = flags,
};
return bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
}
- The flags argument should be specified as one of the
following:
- BPF_ANY
- Create a new element or update an existing element.
- BPF_NOEXIST
- Create a new element only if it did not exist.
- BPF_EXIST
- Update an existing element.
- On success, the operation returns zero. On error, -1 is returned and
errno is set to EINVAL, EPERM, ENOMEM, or
E2BIG. E2BIG indicates that the number of elements in the
map reached the max_entries limit specified at map creation time.
EEXIST will be returned if flags specifies
BPF_NOEXIST and the element with key already exists in the
map. ENOENT will be returned if flags specifies
BPF_EXIST and the element with key doesn't exist in the
map.
- BPF_MAP_DELETE_ELEM
- The BPF_MAP_DELETE_ELEM command deletes the element whose key is
key from the map referred to by the file descriptor fd.
-
int
bpf_delete_elem(int fd, const void *key)
{
union bpf_attr attr = {
.map_fd = fd,
.key = ptr_to_u64(key),
};
return bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));
}
- On success, zero is returned. If the element is not found, -1 is returned
and errno is set to ENOENT.
- BPF_MAP_GET_NEXT_KEY
- The BPF_MAP_GET_NEXT_KEY command looks up an element by key
in the map referred to by the file descriptor fd and sets the
next_key pointer to the key of the next element.
-
int
bpf_get_next_key(int fd, const void *key, void *next_key)
{
union bpf_attr attr = {
.map_fd = fd,
.key = ptr_to_u64(key),
.next_key = ptr_to_u64(next_key),
};
return bpf(BPF_MAP_GET_NEXT_KEY, &attr, sizeof(attr));
}
- If key is found, the operation returns zero and sets the
next_key pointer to the key of the next element. If key is
not found, the operation returns zero and sets the next_key pointer
to the key of the first element. If key is the last element, -1 is
returned and errno is set to ENOENT. Other possible
errno values are ENOMEM, EFAULT, EPERM, and
EINVAL. This method can be used to iterate over all elements in the
map.
- close(map_fd)
- Delete the map referred to by the file descriptor map_fd. When the
user-space program that created a map exits, all maps will be deleted
automatically (but see NOTES).
The following map types are supported:
- BPF_MAP_TYPE_HASH
- Hash-table maps have the following characteristics:
- Maps are created and destroyed by user-space programs. Both user-space and
eBPF programs can perform lookup, update, and delete operations.
- The kernel takes care of allocating and freeing key/value pairs.
- The map_update_elem() helper will fail to insert new element when
the max_entries limit is reached. (This ensures that eBPF programs
cannot exhaust memory.)
- map_update_elem() replaces existing elements atomically.
- Hash-table maps are optimized for speed of lookup.
- BPF_MAP_TYPE_ARRAY
- Array maps have the following characteristics:
- Optimized for fastest possible lookup. In the future the verifier/JIT
compiler may recognize lookup() operations that employ a constant key and
optimize it into constant pointer. It is possible to optimize a
non-constant key into direct pointer arithmetic as well, since pointers
and value_size are constant for the life of the eBPF program. In
other words, array_map_lookup_elem() may be 'inlined' by the
verifier/JIT compiler while preserving concurrent access to this map from
user space.
- All array elements pre-allocated and zero initialized at init time
- The key is an array index, and must be exactly four bytes.
- map_delete_elem() fails with the error EINVAL, since
elements cannot be deleted.
- map_update_elem() replaces elements in a nonatomic fashion;
for atomic updates, a hash-table map should be used instead. There is
however one special case that can also be used with arrays: the atomic
built-in __sync_fetch_and_add() can be used on 32 and 64 bit atomic
counters. For example, it can be applied on the whole value itself if it
represents a single counter, or in case of a structure containing multiple
counters, it could be used on individual counters. This is quite often
useful for aggregation and accounting of events.
- Among the uses for array maps are the following:
- As "global" eBPF variables: an array of 1 element whose key is
(index) 0 and where the value is a collection of 'global' variables which
eBPF programs can use to keep state between events.
- Aggregation of tracing events into a fixed set of buckets.
- Accounting of networking events, for example, number of packets and packet
sizes.
- BPF_MAP_TYPE_PROG_ARRAY (since Linux 4.2)
- A program array map is a special kind of array map whose map values
contain only file descriptors referring to other eBPF programs. Thus, both
the key_size and value_size must be exactly four bytes. This
map is used in conjunction with the bpf_tail_call() helper.
- This means that an eBPF program with a program array map attached to it
can call from kernel side into
-
void bpf_tail_call(void *context, void *prog_map,
unsigned int index);
- and therefore replace its own program flow with the one from the program
at the given program array slot, if present. This can be regarded as kind
of a jump table to a different eBPF program. The invoked program will then
reuse the same stack. When a jump into the new program has been performed,
it won't return to the old program anymore.
- If no eBPF program is found at the given index of the program array
(because the map slot doesn't contain a valid program file descriptor, the
specified lookup index/key is out of bounds, or the limit of 32 nested
calls has been exceed), execution continues with the current eBPF program.
This can be used as a fall-through for default cases.
- A program array map is useful, for example, in tracing or networking, to
handle individual system calls or protocols in their own subprograms and
use their identifiers as an individual map index. This approach may result
in performance benefits, and also makes it possible to overcome the
maximum instruction limit of a single eBPF program. In dynamic
environments, a user-space daemon might atomically replace individual
subprograms at run-time with newer versions to alter overall program
behavior, for instance, if global policies change.
The BPF_PROG_LOAD command is used to load an eBPF program into the
kernel. The return value for this command is a new file descriptor associated
with this eBPF program.
char bpf_log_buf[LOG_BUF_SIZE];
int
bpf_prog_load(enum bpf_prog_type type,
const struct bpf_insn *insns, int insn_cnt,
const char *license)
{
union bpf_attr attr = {
.prog_type = type,
.insns = ptr_to_u64(insns),
.insn_cnt = insn_cnt,
.license = ptr_to_u64(license),
.log_buf = ptr_to_u64(bpf_log_buf),
.log_size = LOG_BUF_SIZE,
.log_level = 1,
};
return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
}
prog_type is one of the available program types:
-
enum bpf_prog_type {
BPF_PROG_TYPE_UNSPEC, /* Reserve 0 as invalid
program type */
BPF_PROG_TYPE_SOCKET_FILTER,
BPF_PROG_TYPE_KPROBE,
BPF_PROG_TYPE_SCHED_CLS,
BPF_PROG_TYPE_SCHED_ACT,
};
For further details of eBPF program types, see below.
The remaining fields of bpf_attr are set as follows:
- insns is an array of struct bpf_insn instructions.
- insn_cnt is the number of instructions in the program referred to
by insns.
- license is a license string, which must be GPL compatible to call
helper functions marked gpl_only. (The licensing rules are the same
as for kernel modules, so that also dual licenses, such as "Dual
BSD/GPL", may be used.)
- log_buf is a pointer to a caller-allocated buffer in which the
in-kernel verifier can store the verification log. This log is a
multi-line string that can be checked by the program author in order to
understand how the verifier came to the conclusion that the eBPF program
is unsafe. The format of the output can change at any time as the verifier
evolves.
- log_size size of the buffer pointed to by log_buf. If the
size of the buffer is not large enough to store all verifier messages, -1
is returned and errno is set to ENOSPC.
- log_level verbosity level of the verifier. A value of zero means
that the verifier will not provide a log; in this case, log_buf
must be a NULL pointer, and log_size must be zero.
Applying close(2) to the file descriptor returned by
BPF_PROG_LOAD will unload the eBPF program (but see NOTES).
Maps are accessible from eBPF programs and are used to exchange
data between eBPF programs and between eBPF programs and user-space
programs. For example, eBPF programs can process various events (like
kprobe, packets) and store their data into a map, and user-space programs
can then fetch data from the map. Conversely, user-space programs can use a
map as a configuration mechanism, populating the map with values checked by
the eBPF program, which then modifies its behavior on the fly according to
those values.
The eBPF program type (prog_type) determines the subset of kernel helper
functions that the program may call. The program type also determines the
program input (context)—the format of struct bpf_context (which
is the data blob passed into the eBPF program as the first argument).
For example, a tracing program does not have the exact same subset
of helper functions as a socket filter program (though they may have some
helpers in common). Similarly, the input (context) for a tracing program is
a set of register values, while for a socket filter it is a network
packet.
The set of functions available to eBPF programs of a given type
may increase in the future.
The following program types are supported:
- BPF_PROG_TYPE_SOCKET_FILTER (since Linux 3.19)
- Currently, the set of functions for BPF_PROG_TYPE_SOCKET_FILTER
is:
-
bpf_map_lookup_elem(map_fd, void *key)
/* look up key in a map_fd */
bpf_map_update_elem(map_fd, void *key, void *value)
/* update key/value */
bpf_map_delete_elem(map_fd, void *key)
/* delete key in a map_fd */
- The bpf_context argument is a pointer to a struct
__sk_buff.
- BPF_PROG_TYPE_KPROBE (since Linux 4.1)
- [To be documented]
- BPF_PROG_TYPE_SCHED_CLS (since Linux 4.1)
- [To be documented]
- BPF_PROG_TYPE_SCHED_ACT (since Linux 4.1)
- [To be documented]
Once a program is loaded, it can be attached to an event. Various kernel
subsystems have different ways to do so.
Since Linux 3.19, the following call will attach the program
prog_fd to the socket sockfd, which was created by an earlier
call to socket(2):
setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_BPF,
&prog_fd, sizeof(prog_fd));
Since Linux 4.1, the following call may be used to attach the eBPF
program referred to by the file descriptor prog_fd to a perf event
file descriptor, event_fd, that was created by a previous call to
perf_event_open(2):
ioctl(event_fd, PERF_EVENT_IOC_SET_BPF, prog_fd);
/* bpf+sockets example:
* 1. create array map of 256 elements
* 2. load program that counts number of packets received
* r0 = skb->data[ETH_HLEN + offsetof(struct iphdr, protocol)]
* map[r0]++
* 3. attach prog_fd to raw socket via setsockopt()
* 4. print number of received TCP/UDP packets every second
*/
int
main(int argc, char **argv)
{
int sock, map_fd, prog_fd, key;
long long value = 0, tcp_cnt, udp_cnt;
map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key),
sizeof(value), 256);
if (map_fd < 0) {
printf("failed to create map '%s'\n", strerror(errno));
/* likely not run as root */
return 1;
}
struct bpf_insn prog[] = {
BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), /* r6 = r1 */
BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol)),
/* r0 = ip->proto */
BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4),
/* *(u32 *)(fp - 4) = r0 */
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* r2 = fp */
BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = r2 - 4 */
BPF_LD_MAP_FD(BPF_REG_1, map_fd), /* r1 = map_fd */
BPF_CALL_FUNC(BPF_FUNC_map_lookup_elem),
/* r0 = map_lookup(r1, r2) */
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
/* if (r0 == 0) goto pc+2 */
BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */
BPF_XADD(BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0),
/* lock *(u64 *) r0 += r1 */
BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */
BPF_EXIT_INSN(), /* return r0 */
};
prog_fd = bpf_prog_load(BPF_PROG_TYPE_SOCKET_FILTER, prog,
sizeof(prog) / sizeof(prog[0]), "GPL");
sock = open_raw_sock("lo");
assert(setsockopt(sock, SOL_SOCKET, SO_ATTACH_BPF, &prog_fd,
sizeof(prog_fd)) == 0);
for (;;) {
key = IPPROTO_TCP;
assert(bpf_lookup_elem(map_fd, &key, &tcp_cnt) == 0);
key = IPPROTO_UDP;
assert(bpf_lookup_elem(map_fd, &key, &udp_cnt) == 0);
printf("TCP %lld UDP %lld packets\n", tcp_cnt, udp_cnt);
sleep(1);
}
return 0;
}
Some complete working code can be found in the samples/bpf
directory in the kernel source tree.
For a successful call, the return value depends on the operation:
- BPF_MAP_CREATE
- The new file descriptor associated with the eBPF map.
- BPF_PROG_LOAD
- The new file descriptor associated with the eBPF program.
- All other commands
- Zero.
On error, -1 is returned, and errno is set
appropriately.
- E2BIG
- The eBPF program is too large or a map reached the max_entries
limit (maximum number of elements).
- EACCES
- For BPF_PROG_LOAD, even though all program instructions are valid,
the program has been rejected because it was deemed unsafe. This may be
because it may have accessed a disallowed memory region or an
uninitialized stack/register or because the function constraints don't
match the actual types or because there was a misaligned memory access. In
this case, it is recommended to call bpf() again with log_level
= 1 and examine log_buf for the specific reason provided by the
verifier.
- EBADF
- fd is not an open file descriptor.
- EFAULT
- One of the pointers (key or value or log_buf or
insns) is outside the accessible address space.
- EINVAL
- The value specified in cmd is not recognized by this kernel.
- EINVAL
- For BPF_MAP_CREATE, either map_type or attributes are
invalid.
- EINVAL
- For BPF_MAP_*_ELEM commands, some of the fields of union
bpf_attr that are not used by this command are not set to zero.
- EINVAL
- For BPF_PROG_LOAD, indicates an attempt to load an invalid program.
eBPF programs can be deemed invalid due to unrecognized instructions, the
use of reserved fields, jumps out of range, infinite loops or calls of
unknown functions.
- ENOENT
- For BPF_MAP_LOOKUP_ELEM or BPF_MAP_DELETE_ELEM, indicates
that the element with the given key was not found.
- ENOMEM
- Cannot allocate sufficient memory.
- EPERM
- The call was made without sufficient privilege (without the
CAP_SYS_ADMIN capability).
The bpf() system call first appeared in Linux 3.18.
The bpf() system call is Linux-specific.
In the current implementation, all bpf() commands require the caller to
have the CAP_SYS_ADMIN capability.
eBPF objects (maps and programs) can be shared between processes.
For example, after fork(2), the child inherits file descriptors
referring to the same eBPF objects. In addition, file descriptors referring
to eBPF objects can be transferred over UNIX domain sockets. File
descriptors referring to eBPF objects can be duplicated in the usual way,
using dup(2) and similar calls. An eBPF object is deallocated only
after all file descriptors referring to the object have been closed.
eBPF programs can be written in a restricted C that is compiled
(using the clang compiler) into eBPF bytecode. Various features are
omitted from this restricted C, such as loops, global variables, variadic
functions, floating-point numbers, and passing structures as function
arguments. Some examples can be found in the samples/bpf/*_kern.c
files in the kernel source tree.
The kernel contains a just-in-time (JIT) compiler that translates
eBPF bytecode into native machine code for better performance. In kernels
before Linux 4.15, the JIT compiler is disabled by default, but its
operation can be controlled by writing one of the following integer strings
to the file /proc/sys/net/core/bpf_jit_enable:
- 0
- Disable JIT compilation (default).
- 1
- Normal compilation.
- 2
- Debugging mode. The generated opcodes are dumped in hexadecimal into the
kernel log. These opcodes can then be disassembled using the program
tools/net/bpf_jit_disasm.c provided in the kernel source tree.
Since Linux 4.15, the kernel may configured with the
CONFIG_BPF_JIT_ALWAYS_ON option. In this case, the JIT compiler is
always enabled, and the bpf_jit_enable is initialized to 1 and is
immutable. (This kernel configuration option was provided as a mitigation
for one of the Spectre attacks against the BPF interpreter.)
The JIT compiler for eBPF is currently available for the following
architectures:
- x86-64 (since Linux 3.18; cBPF since Linux 3.0);
- ARM32 (since Linux 3.18; cBPF since Linux 3.4);
- SPARC 32 (since Linux 3.18; cBPF since Linux 3.5);
- ARM-64 (since Linux 3.18);
- s390 (since Linux 4.1; cBPF since Linux 3.7);
- PowerPC 64 (since Linux 4.8; cBPF since Linux 3.1);
- SPARC 64 (since Linux 4.12);
- x86-32 (since Linux 4.18);
- MIPS 64 (since Linux 4.18; cBPF since Linux 3.16);
- riscv (since Linux 5.1).
seccomp(2), bpf-helpers(7), socket(7), tc(8),
tc-bpf(8)
Both classic and extended BPF are explained in the kernel source
file Documentation/networking/filter.txt.
This page is part of release 5.05 of the Linux man-pages project. A
description of the project, information about reporting bugs, and the latest
version of this page, can be found at https://www.kernel.org/doc/man-pages/.


Making the web a prettier place one template at a time! We make beautiful, quality, responsive Drupal & web templates!
Stay up to date with our latest news and product releases by signing up to our newsletter.
Site template by AppStrap | Copyright 2019 © AppStrap


- Evidence of the A/B test performed is shown (i.e. screenshots of Google Analytics).
- Statistical analysis is included, showing all mathematical work involved (think of it as showing your work on a math problem).
- Statistical analysis is correctly calculated, with the appropriate variable type used for the statistical test conducted.
- Conclusion is written and is based off the results of the statistical analysis.
- List of revisions is mostly based off the A/B test. Other revisions from other feedback or suggested by team members are also included.
- Functionality of prototype is complete. No more bugs.
- Prototype is ready to be presented and doesn’t need any more details or polishing.
- Accomplishing a goal in the app does not require unnecessary steps or processes.
- Prototype follows an aesthetic design that is consistent across pages.
- Prototype has a clean look; words/buttons are not cluttered and information is not presented in such large chunks that they can be overwhelming to a user.
- Prototype is easy to read (i.e. no white text on light background or vice versa) on all pages.
- Submitted a final name for the app.
- Development plan is updated, showing progress and additional tasks in the new version compared to the previous week.


You may have heard the term, "self-deprecating humor," or humor that minimizes the speaker's importance. A deprecated class or method is like that. It is no longer important. It is so unimportant, in fact, that you should no longer use it, since it has been superseded and may cease to exist in the future.
Java provides a way to express deprecation because, as a class evolves, its API (application programming interface) inevitably changes: methods are renamed for consistency, new and better methods are added, and fields change. But such changes introduce a problem. You need to keep the old API around until developers make the transition to the new one, but you don't want them to continue programming to the old API.
The ability to deprecate a class, method, or member field solves the problem. Java supports two mechanisms for deprecation: and an annotation, (supported starting with J2SE 5.0) and a Javadoc tag (supported since 1.1). Existing calls to the old API continue to work, but the annotation causes the compiler to issue a warning when it finds references to deprecated program elements. The Javadoc tag and associated comments warn users against using the deprecated item and tell them what to use instead.
When you design an API, carefully consider whether it supersedes an old API. If it does, and you wish to encourage developers (users of the API) to migrate to the new API, then deprecate the old API. Valid reasons to deprecate an API include:
Deprecation is a reasonable choice in all these cases because it preserves "backward compatibility" while encouraging developers to change to the new API. Also, the deprecation comments help developers decide when to move to the new API, and so should briefly mention the technical reasons for deprecation.
It is not necessary to deprecate individual member fields (properties) of a deprecated class, unless of course you want to explain a specific point about a property.
Starting with J2SE 5.0, you deprecate a class, method, or field
by using the @Deprecated
annotation. Additionally, you
can use the @deprecated
Javadoc tag tell developers
what to use instead.
Using the annotation causes the Java compiler to generate warnings when the deprecated class, method, or field is used. The compiler suppresses deprecation warnings if a deprecated item is used within an entity which itself is deprecated or is used within the same outermost class or is used in an entity that is annotated to suppress the warning.
You are strongly recommended to use the Javadoc
@deprecated
tag with appropriate comments explaining
how to use the new API. This ensures developers will have a
workable migration path from the old API to the new API. For more
information, see Using the
@deprecated
Javadoc Tag.
NOTE: The Java Language Specification requires compilers
to issue warnings when classes, methods, or fields marked with the
@Deprecated
annotation are used. Compilers are not
required by the Java Language Specification to issue warnings when
classes, methods, or fields marked with the
@deprecated
Javadoc tag are accessed, although the Sun
compilers currently do so. However, there is no guarantee that the
Sun compiler will always issue such warnings.
J2SE 5.0 introduces a new language feature called annotations (also called
metadata). One of the Java language's built-in annotations is the
@Deprecated
annotation. To use it, you simply precede
the class, method, or member declaration with<EMAIL_ADDRESS>Using the @Deprecated
annotation to deprecate a
class, method, or field ensures that all compilers will issue
warnings when code uses that program element. In contrast, there is
no guarantee that all compilers will always issue warnings based on
the @deprecated
Javadoc tag, though the Sun compilers
currently do so. Other compilers may not issue such warnings. Thus,
using the @Deprecated
annotation to generate warnings
is more portable that relying on the @deprecated
Javadoc tag.
In addition, the @Deprecated annotation causes the javadoc-generated documentation to be marked "Deprecated" wherever that program element appears.
NOTE: Deprecation applies to classes and to individual methods or properties, not to their names. It is possible for a single method to have deprecated and non-deprecated overloadings. It is possible for a non-deprecated property to hide or override a deprecated one, which removes deprecation. As developer of an API, it is your responsibility to deprecate overrides of a deprecated method, if in fact they should be deprecated.
The following is a simple example of using the @Deprecated
annotation from java.lang.Thread
:
public class Thread implements Runnable { ... @Deprecated public final void stop() { synchronized (this) { ...
You can use the @deprecated
tag to make Javadoc
show a program element as deprecated. The @deprecated
tag must be followed by a space or newline. In the paragraph
following the @deprecated
tag, explain why the item
has been deprecated and suggest what to use instead.
Javadoc generates special HTML based on @deprecated
tags: it moves the paragraph following the @deprecated
tag to the front of the description, placing it in italics and
preceding it with a warning, "Note: foo is deprecated", in bold. It
also adds "Deprecated" in bold to any index entries mentioning the
deprecated entity.
The tagged paragraph can be empty, but empty deprecation
paragraphs are bad form, because they do not help the user fix the
warnings that arise from the deprecation. Include paragraphs marked
with @link
or @see
tags that refer to the
new versions of the same functionality. It is usually not a good
idea to mention a timetable for phase-out of the deprecated API;
this is a business decision that is best communicated other
ways.
For more information on using the @deprecated
Javadoc tag, see Javadoc - The
Java API Documentation Generator.
The following examples show how to use the
@deprecated
Javadoc tag. They also illustrate the
@Deprecated
annotation, to emphasize that the two
should be used together.
Here is an example of the most common form of a deprecated method (for Javadoc 1.2 and later):
/** * @deprecated As of release 1.3, replaced by {@link #getPreferredSize()} */ @Deprecated public Dimension preferredSize() { return getPreferredSize(); }
If the API reorganization was more than renaming, the deprecation may be more complex. Here is an example of a method that is being retracted:
/** * Delete multiple items from the list. * * @deprecated Not for public use. * This method is expected to be retained only as a package * private method. Replaced by * {@link #remove(int)} and {@link #removeAll()} */ @Deprecated public synchronized void delItems(int start, int end) { ... }


When selecting which localized file to open, which elements to render and which dictionary phrase or variable value to substitute, Sage goes through locale fallback process from high to low priority until a match is found.
This approach allows creating configurations that have any number of base locales for fall back to and if desired, to have one locale that is the base locale for all others.
The fallback paths are defined in project configuration
for each locale separately through attributes dictionaryNames
and resourceNames
.
Configuration
- name
-
Each locale must use the required attribute
name
, and while this name can be set as required, it's value must be unique. - dictionaryNames
-
The attribute
dictionaryNames
specifies the names (comma-separated) of dictionary files that can be used with that locale, where the names should be ordered by priority, from most to least specific. - resourceNames
-
The attribute
resourceNames
specifies the names (comma-separated) of locale suffixes that can be used with that locale, where the names should be ordered by priority, from most to least specific.
Dictionary names
When Sage substitutes phrases during the localization step, it replaces the phrase reference nodes with the actual values of referenced phrases. The phrases are defined in language dictionaries, and dictionaries can be combined to facilitate reuse.
Sage will construct a dynamic dictionary for each locale, which is a combination of dictionaries as specified with
the locale's associated dictionaryNames
attribute.
The value of dictionaryNames
attribute specifies the dictionaries that can be used for that locale,
ordered from most to least specific dictionary.
Sage will start by creating a base dictionary by copying all phrases from the least specific dictionary. It will then proceed and open each of the more specific dictionaries and copy all phrases into the base dictionary, either appending them (those phrases that do not exist in the base) or replacing the phrases from the base dictionary with phrases from more specific dictionary (for those phrases that exist in both).
And finally, with this complete version of the dictionary the resource is translated into the corresponding locale.
Resource names
Attribute resourceNames
is semantically similar to dictionaryNames
in that it specifies
a comma-separated list of locales, ordered from most to least specific, that can be used with this locale. One
additional thing to note about this attribute is the use of the locale 'default', which always needs to be the
last locale in this list. This name stands for no suffix, the version without a specific locale.
When opening files
When opening XML resources during the localization step, Sage
will attempt to add each of locale names specified with the resourceNames
attribute as a suffix of
the base name, and if it finds a file with that suffix it will be used instead of the requested base name.
For instance, if the configuration example above, locale ar specifies resourceNames ar, la, es, default.
This means that if we request a file ~/assets/views/home/index.html
in locale ar, the system
will check for presence of each of these suffixes, and return the first version that exists:
- ~/assets/views/home/index-ar.html (Argentina)
- ~/assets/views/home/index-la.html (Latin America)
- ~/assets/views/home/index-es.html (Spain)
- ~/assets/views/home/index.html (Generic)
The same selection mechanism can be used on all resources in the project by configuring the project to use the LocalizePathRewriter.
When localizing documents
When Sage is resolving variable values during the
localization step, it
will attempt to resolve the value by going through the same list of locale names specified with the
resourceNames
attribute, and return the value of the first matching locale.
When Sage is resolving which elements to render during the
localization step, it goes through the list of locales specified
by the conditional block, and if any one of the locales if found in the list of specified with the resourceNames
attribute for the current locale, the block will be rendered.


Home
News
Gallery
About
Contact
First Name:
Last Name:
Email:
Phone:
I would like more information about:
Prodjects
Photo Prices
Updates
Questions?
toxicbonfire@gmail.com


We want to save lives and preserve the environment while helping your organization successfully achieve its goals.
Build Your Business
We are searching for outgoing, self-motivated people with an entrepreneurial mindset for an opportunity to build your own business or expand an existing one.
Zero investment with unlimited income potential
Work from anywhere in the world
Work full or part-time. Be your own boss!
For more information about becoming an affiliate or grant writer, visit the Careers page or apply now.
Become a hanging wind turbine installation expert
Expand or start your business as a certified REVOLT Hanging Wind Turbine installer.


Unlimited Games. Should Red double? If doubled, should White take?
pips Red=136 White=123
(CorrectAnswer= 0/0, ErrorScore= 0)
The volatility makes this a very clear double and Red will also win a good percentage of gammons (23%).
However, it is also a very easy take. White has very good counter-priming possibilities when Red misses. White also has blitzing potential and finally, if hit he can anchor in Red’s home board and win from there.
Dropping this double would be worse than a double blunder.
However, it is also a very easy take. White has very good counter-priming possibilities when Red misses. White also has blitzing potential and finally, if hit he can anchor in Red’s home board and win from there.
Dropping this double would be worse than a double blunder.
Cube analysis 2-ply cubeless equity +0.489 0.670 0.242 0.011 - 0.330 0.099 0.004 Cubeful equities: 1. Double, take +0.753 2. Double, pass +1.000 (+0.247) 3. No double +0.676 (-0.076) Proper cube action: Double, take


| 009:122 Khan | : |
And it is not (proper) for the believers to go out to fight (Jihad) all together. Of every troop of them, a party only should go forth, that they (who are left behind) may get instructions in (Islamic) religion, and that they may warn their people when they return to them, so that they may beware (of evil). |
| 009:122 Maulana | : |
And the believers should not go forth all together. Why, then, does not a company from every party from among them go forth that they may apply themselves to obtain understanding in religion, and that they may warn their people, when they come back to them, that they may be cautious? |
| 009:122 Pickthal | : |
And the believers should not all go out to fight. Of every troop of them, a party only should go forth, that they (who are left behind) may gain sound knowledge in religion, and that they may warn their folk when they return to them, so that they may beware. |
| 009:122 Rashad | : |
When the believers mobilize, not all of them shall do so. A few from each group shall mobilize by devoting their time to studying the religion. Thus, they can pass the knowledge on to their people when they return, that they may remain religiously informed. |
| 009:122 Sarwar | : |
Not all believers have to become specialists in religious learning. Why do not some people from each group of believers seek to become specialists in religious learning and, after completing their studies, guide their group so that they will have fear of God. |
| 009:122 Shakir | : |
And it does not beseem the believers that they should go forth all together; why should not then a company from every party from among them go forth that they may apply themselves to obtain understanding in religion, and that they may warn their people when they come back to them that they may be cautious? |
| 009:122 Sherali | : |
It is not possible for the believers to go forth all together. Why, then, does not a party from every section of them go forth that they may become well-versed in religion, and that they may warn their people when they return to them, so that they may guard against evil. |
| 009:122 Yusufali | : |
Nor should the Believers all go forth together: if a contingent from every expedition remained behind, they could devote themselves to studies in religion, and admonish the people when they return to them,- that thus they (may learn) to guard themselves (against evil). |
Concepts/Themes Covered: الجهاد > الجهاد في سبيل الإسلام > تفضيل المجاهدين Jihad> The Call to Jihad>Preferring the Strugglers الجهاد > الجهاد في سبيل الإسلام > الدعوة إلى الجهاد Jihad> The Call to Jihad>The Call for the Holy War الجهاد > الجهاد في سبيل الإسلام > مدح الجهاد Jihad> The Call to Jihad>Praising the Holy War العلوم والفنون > الحث على التفقه في الدين Science and Art>Urging to Study the Religion
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


{{boilerplate}}
Technologies and services used: this browser, jQuery, the Spectrum Colorpicker, and Firebase.
Development stage: early
Contact<EMAIL_ADDRESS>For bugs and questions, please use the GitHub issues page for ProtoChart.
Designed and coded by Chris Goad.


Encapsulates a list of server objects, both dynamic (Net::SSH::Multi::DynamicServer) and static (Net::SSH::Multi::Server). It attempts to make it transparent whether a dynamic server set has been evaluated or not. Note that a ServerList is NOT an Array, though it is Enumerable.
Create a new ServerList that wraps the given server list. Duplicate entries will be discarded.
# File lib/net/ssh/multi/server_list.rb, line 15 def initialize(list=[]) @list = list.uniq end
Adds the given server to the list, and returns the argument. If an identical server definition already exists in the collection, the argument is not added, and the existing server record is returned instead.
# File lib/net/ssh/multi/server_list.rb, line 23 def add(server) index = @list.index(server) if index server = @list[index] else @list.push(server) end server end
Adds an array (or otherwise Enumerable list) of servers to this list, by calling add for each argument. Returns self.
# File lib/net/ssh/multi/server_list.rb, line 35 def concat(servers) servers.each { |server| add(server) } self end
Iterates over each distinct server record in the collection. This will correctly iterate over server records instantiated by a DynamicServer as well, but only if the dynamic server has been “evaluated” (see Net::SSH::Multi::DynamicServer#evaluate!).
# File lib/net/ssh/multi/server_list.rb, line 44 def each @list.each do |server| case server when Server then yield server when DynamicServer then server.each { |item| yield item } else raise ArgumentError, "server list contains non-server: #{server.class}" end end self end
Returns an array of all servers in the list, with dynamic server records expanded. The result is an array of distinct server records (duplicates are removed from the result).
# File lib/net/ssh/multi/server_list.rb, line 65 def flatten result = @list.inject([]) do |aggregator, server| case server when Server then aggregator.push(server) when DynamicServer then aggregator.concat(server) else raise ArgumentError, "server list contains non-server: #{server.class}" end end result.uniq end
Works exactly as Enumerable#select, but returns the result as a new ServerList instance.
# File lib/net/ssh/multi/server_list.rb, line 57 def select subset = @list.select { |i| yield i } ServerList.new(subset) end
Generated with the Darkfish Rdoc Generator 2.


§806-33 Surplusage. Any unnecessary allegation contained in an indictment may be rejected as surplusage. [L 1915, c 215, pt of §2; RL 1925, §4046; RL 1935, §5505; RL 1945, §10807; RL 1955, §258-17; HRS §711-33; ren L 1972, c 9, pt of §1]
Rules of Court
Surplusage, see HRPP rule 7(e).
Case Notes
Giving a wrong name to the offense charged does not vitiate the charge, it being regarded as surplusage. 11 H. 143 (1897).
Cited: 36 H. 550, 552 (1943), aff'd 150 F.2d 545 (1945).
See 33 H. 686 (1936).