This is just a very generalized overview to give some idea of what each class is all about. More details, such as what stats to prioritize or what exact abilities everyone gets, will be covered in later sections on actual character builds. I'm generally assuming that the reader already knows the basic mechanics of the game, such as what each stat does, what the difference between defense and armour is, what fatigue is, etc. If you don't, then you may want to read up on that first.
Warriors are largely what you'd expect from an RPG - they are the most versatile weaponry specialists of any base class,
able to learn all three melee styles (sword and shield, dual wielding, and two-handed weapons) as well as archery.
Their class-specific talent tree allows them to make better use of heavier armour than anyone else, improves their
performance when they're engaging large numbers of enemies, and gives them some control over the degree to which
enemies will prioritize them as a target, which is particularly important for warriors filling the tank role. However,
you shouldn't go into the warrior class expecting them to be the easiest class to play, as they tend to be in many
other RPGs. Like rogues and mages, warriors require strategy to use well and can't simply go charging head-on into
any battle they encounter, as tempting as that might be. In general, warriors will be at the forefront, but recklessness
and/or lack of preparation can rapidly result in defeat and death.
Pros:
+ High HP
+ Best heavy armour users
+ Large weapon selection
+ Work relatively well on AI 'auto-pilot'
+ Can achieve very high damage output across a wide variety
of battlefield conditions
Cons:
- Smaller bag of tricks than the other classes
- Greater need to manage stamina due
to fatigue
- Not as sturdy as warriors in a lot of RPGs; caution and tactics still required to survive
- More one-dimensional than the other classes
Rogues provide a broad blend of damage, crowd control, support, and general utility. While not as sturdy or well suited to
heavy armour as the warrior, rogues have a nice bag of tricks that gives them as much (or even more) survivability
as their meaty frontline friends. Rogues probably require the most positional tactics of any class type, scouting
ahead to clear out hazards or assassinate particularly dangerous targets before the rest of the group charges in,
staying on the move and making use of battlefield positioning to maximize their impact. Rogues are more limited in
their selection of fighting styles than warriors, typically using either dual wielding, archery, or some combination
of the two. However, because of their class mechanics, rogues are generally regarded as being better than warriors
at both of these styles of combat. There's almost never a time when you won't want at least one rogue in your group,
if only to clear out traps and pick locks.
Pros:
+ A lot of versatility in roles and combat style + Tons of utility
+ Great survivability if built correctly
+ Best skill users of any class
Cons:
- Generally relegated to using light
armour
- Less margin of error than warriors due to lower hp and less armour
- Require somewhat more micromanagement
than warriors to be effective
- Limited weapon selection
- Tend to be defensively weak and vulnerable in the early
game
If you 've played BioWare RPGs before, you're probably expecting the mage to be a complete and utter powerhouse. If so, you
guessed correctly. Mages have the most raw power of any class, in addition to having an enormous bag of tricks for
keeping themselves alive against the odds and horribly incapacitating and mangling even the strongest enemies. Many
of their spells are extremely potent on their own, but the spell combo mechanic can ramp up the destruction to even
greater levels. For sheer battlefield control and dominance, nothing exceeds the potential of a mage. They also make
excellent group support characters, and can even be melee tanks if you pick the Arcane Warrior specialization (more
on that later).
Pros:
+ Far and away the highest damage output of any class
+ The only class that can heal
+ Enormously potent spell combinations
+ Surprisingly high survivability and crowd control with the right spells
+ Can become the heaviest armour tanks in the game with the Arcane Warrior specialization
Cons:
- Require the most micromanagement of any class to be effective, unless you just use them as a healbot
- Low hit point pool and poor armour, so positioning and defensive spells are necessary for survival
- Very little equipment variety
- Actually kind of too strong; have a lot of overpowered abilities and tricks that can trivialize encounters that would otherwise be very challenging.


First, they beat Australia. Now, Canada is in the Davis Cup final
by ReutersDenis Shapovalov was in disbelief while captain Frank Dancevic admitted he almost blacked out as Canada advanced to the Davis Cup final for the first time.
The 20-year-old Shapovalov teamed up with Vasek Pospisil to win the deciding doubles rubber against Russia’s Andrey Rublev and Karen Khachanov and seal a 2-1 victory for Canada.
They will play hosts Spain.
Stream live coverage of the Davis Cup Finals with beIN SPORTS on KAYO. Get your 14-day free trial and start streaming instantly >
For Shapovalov it was an especially sweet moment as the Davis Cup has not always been kind to him.
In 2017, in his second tie, he was defaulted from a World Group tie against Britain after accidentally striking the umpire with a ball.
That was all forgotten though as he and Pospisil, ranked 150th after missing six months this year because of back surgery, held their nerve after the tie boiled down to a third-set tiebreak.
After winning 6-3 3-6 7-6 (7-5) the two danced for joy as several hundred Canadian fans roared their approval.
“I don’t think any of us expected that we could get this far,” Shapovalov said.

“I’m super-stoked to be in the final. It’s one of my dreams, you know, to play in the Davis Cup final.”
With Milos Raonic injured and another of Canada’s young guns, world No.21 Felix Auger-Aliassime, unable to play a match so far this week, Dancevic has had to rely on a two-man team.
Pospisil lost 6-4 6-4 to Rublev on Saturday but left-hander Shapovalov, whose parents are Russian, stepped up to level the tie, showing great tenacity to beat Khachanov 6-4 4-6 6-4.
After the latest thrilling tie at the revamped Davis Cup, Dancevic said it had been hard to sit on the chair and watch.
“When I was sitting there on match point, my heart was beating so fast, I was actually starting to black out,” he said.
“I was trying to control my breathing and just telling myself to breath slowly, stay calm... at the day it’s an amazing feeling having your guys perform like this and put 110 per cent on the court.”


Welcome to Routine in AngularJS
Creating Smart Routing Systems.
In order to be able to use routing appropriately, you will need to be very conversant with your coding arena.
The following tools will come in handy if you are to work as a developer.
An excellent no nonsense grasp of;
Other coding expertise;
- jQuery
- AngularJS
- SASS
- Twitter Bootstrap
- PHP
Database Management Systems
- SQL
- MongoDB (NoSQL for Big-Data)
- PostgreSql
- SQLite (Alternative of SQL)
This info was supplied by Joseph on this 29th day of October 2016


Please refer to TEP 108 for more information about this component and its
intended use.
This component provides the Resource, ArbiterInfo, and Resource
Controller interfaces and uses the ResourceConfigure interface as
described in TEP 108. It provides arbitration to a shared resource in
an FCFS fashion. An array is used to keep track of which users have put
in requests for the resource. Upon the release of the resource by one
of these users, the array is checked and the next user (in FCFS order)
that has a pending request will ge granted control of the resource. If
there are no pending requests, then the resource becomes idle and any
user can put in a request and immediately receive access to the
Resource.


{% extends "base.html" %} {% load media %} {% block title %}About N-PACT.{% endblock %} {%block content %}
Stand-alone versions of N-PACT will be available soon. Please check this page again in the next few days.


--- layout: 2016_default permalink: /404.html ---
The page that you are looking for is still under construction or not available at the momment.
Thank you for your patience! You will be redirected to home page in a few seconds.


Sales
Shops
Location:
Seattle
address
Tokyo
address
Dubai
address
Paris
address
Lima
address
Hours open:
6:00am
7:00am
8:00am
9:00am
10:00am
11:00am
12:00pm
1:00pm
2:00pm
3:00pm
4:00pm
5:00pm
6:00pm
7:00pm


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import uk.gov.hmrc.eeittadminfrontend.deployment.DeploymentRecord @import uk.gov.hmrc.eeittadminfrontend.utils.DateUtils @(maybeDeploymentRecord: Option[DeploymentRecord])
No Deployment information available
} @deploymenInfo(deploymentRecord: DeploymentRecord) = {Last deployed by @{deploymentRecord.username.value} on @{DateUtils.formatInstant(deploymentRecord.createdAt)} } @maybeDeploymentRecord.fold(noInfo)(deploymenInfo)


Disposal of Lafarge is value accretive; Upgrading to a BUY
by CSL StockbrokersLafarge recently published its inaugural report following sale of Lafarge South Africa Holdings (LSAH) in Q3. Comparing the margins of the 9M 2019 (Lafarge Nigeria) and that of 9M 2018 (the previously combined entity), we observed a remarkable improvement in Gross and Operating Margins, suggesting that the sale of LSAH will be value accretive to shareholders.
Lafarge Nigeria Gross Margin of 46.2% in 9M 2019 was far ahead of 31.3% in 9M 2018 for the combined entity. Similarly, Lafarge Nigeria EBITDA margin of 36.6% was above 15.5% for the combined entity.
The sale of LSAH also supported the marked reduction in Finance Cost (down 53% y/y to N16.6 billion in 9M 2019 vs N34.9 billion for the combined entity in 9M 2018), reflective of the decline in gross debt (down 75% YTD to N65.3 billion) following the settlement of Inter-Company loan owed to Caricement BV (Purchaser of LSAH).
Consequently, the leverage position of the firm improved (Debt/equity ratio moderated to 0.19x in 9M 2019 compared to 1.0x in H1 2019 and 1.98x in FY 2018). We believe the improved leverage position of the firm and stronger margins bodes well for future earnings growth.
We have updated our model, in line with the latest results. The overall impact is an upward review in our price target to N24.4/s from N16.0/s previously. We upgrade the stock from Hold to Buy, considering the steep decline in stock price (down c.70% over the last two years) and the 74% upside potential implied by our target price from the latest closing price of N14.0/s.
[READ MORE: Banking: Evolving trends in the bankers’ market]
Although Lafarge Nigeria Revenue of N163.1 billion is significantly below that of the combined entity (N234.3 billion), we note that the Gross Profit of Lafarge Nigeria (N75.4bn) was ahead of that of the combined entity (N73.4 billion), suggesting better cost efficiencies in the Nigerian business.
_____________________________________________________________________
CSL STOCKBROKERS LIMITED CSL Stockbrokers,
Member of the Nigerian Stock Exchange,
First City Plaza, 44 Marina,
PO Box 9117,
Lagos State,
NIGERIA.


Controllers¶
Being a MVC framework, Go-Web encourages the use of controllers, i.e. containers of the business logic of the application. For instance, the controller named “SampleController” can be created by running command:
alfred -mC sample_controller
Go-Web will create the the .go file containing controller named “SampleController” in folder:
<go-web>/app/http/controller
The content of the newly created file will be:
package controller
import "github.com/RobyFerro/go-web-framework"
type SampleController struct{
gwf.BaseController
}
// Main controller method
func (c *SampleController) Main(){
// Insert your custom logic
}
When creating a controller, Go-Web will add to it the function Main, which could be expanded with some logic, as shown in listing 4; controllers can be extended by adding new public functions.
package controller
import (
"github.com/RobyFerro/go-web-framework"
"github.com/RobyFerro/go-web/exception"
)
type SampleController struct{
gwf.BaseController
}
// Main controller method
func (c *SampleController) Main() {
_, err := c.Response.Write([]byte("Hello world")) if err != nil {
exception.ProcessError(err)
}
}
To gain access to everything underlying a Go-Web controller, including HTTP request and response, a controller needs to extend gwf.BaseController. Because the service container is used to “resolve” all controllers in Go-Web, developers can type- hint any of their dependency because they will be injected into the controller instance, as represented by the following code:
package controller
import (
"github.com/RobyFerro/go-web-framework" "github.com/RobyFerro/go-web/database/model" "github.com/jinzhu/gorm"
)
type SampleController struct{
gwf.BaseController
}
// Main controller method
func (c *SampleController) Main(db *gorm.DB) {
var user model.User
if err := db.Find(&user).Error;err != nil {
gwf.ProcessError(err)
}
}
Note: both listings 4 and 5 includes a call to gwf.ProcessError(err); this is how Go-Web can handle errors, but developers may adopt another approach.
Warning
After manually creating a controller, developers may need to manually register it: to do so, the controller needs to be added to Controllers list defined in <go-web>/register.go


LuaDeskSpot is an example application that contains several modules that call services in the Lua SPOT. One of the module is the script installation module that will call installation service in the Lua SPOT. You can use this installation module to install new Lua scripts to the Lua SPOT.
You will need the Sun SPOT SDK and Java 5 in order to run this application.
To compile LuaDeskSpot, go to the project directory and run ant host-compile.:
$ cd src/LuaDeskSpot
$ ant host-compile
One of the way for using base station is by setting the base station to run in shared mode. Edit the .sunspot.properties under your home directory and insert two line like the following.:
basestation.shared=true
multi.process.basestation.sharing=true
After that, you can start using the host application by running it.:
$ cd src/LuaDeskSpot
$ ant host-run
This module is used to send raw message to the Lua SPOT. The the message in the Message text box, specify the address in the Address text box, and click the Send or Direct Send button.
The Send button is used to send the message by calling the routing function in the Lua SPOTs. If you want to send a raw message without using the routing function, click the Direct Send button instead.
This module is used to call ping function of demo application that is pre-installed on the Lua SPOT. Any node that receive this message will send a response pong to the sender node. You can see the nodes that respond to the ping message using this module.
This module is used to install new script to the Lua SPOTs.
First, select your compiled script file by typing the path or clicking the ... button. Click the Load button after that to load the file into memory. You can also see the size and number of fragments that need to be sent.
After specifiying the destination address and the application name, you can start sending the install message (including the fragmented application binary) by clicking the Send Next Fragment button (or the direct send one). Do this multiple times until all fragments are sent.
The receiving Lua SPOT should turn on a LED when it receives and sucessfully installed the fragmented application. All LEDs will be turned on with blue color if the last segment is received.
This module can be used to get the network topology. It also call the demo application and tell the nodes to exchange messages so all nodes will know their neighbors. This neighbor information is sent back to the host so the host can know the overall topology. The topology graph will be drawn in the application.
This module shows debug messages that are sent by the Lua SPOT.
This module will show all messages that are received by the application.


ready_for_review
by None at 2022-03-21 16:24:59.review_requested
by None at 2022-03-21 16:25:18.Import to Alma fails when large scopecontent notes are included in the import. ASpace exports both abstract and scopecontent to 520; discarding the second 520 will keep the much shorter abstract only.
assigned
by None at 2022-03-20 23:07:29.labeled
by None at 2022-03-21 00:11:44.closed
by None at 2022-03-21 17:06:52.referenced
by Jane Sandberg at 2022-03-21 18:49:55.merged
by Jane Sandberg at 2022-03-21 18:49:55.closed
by Jane Sandberg at 2022-03-21 18:49:55.head_ref_deleted
by Jane Sandberg at 2022-03-21 18:49:56.closed
by Christina Chortaria at 2022-03-21 13:54:10.@carolyncole I approved the PR but there is a rubocop lint error.
mentioned
by None at 2022-03-21 13:29:12.subscribed
by None at 2022-03-21 13:29:12.review_dismissed
by None at 2022-03-21 13:36:33.head_ref_force_pushed
by None at 2022-03-21 13:36:33.referenced
by Christina Chortaria at 2022-03-21 13:54:10.merged
by Christina Chortaria at 2022-03-21 13:54:10.closed
by Christina Chortaria at 2022-03-21 13:54:11.head_ref_deleted
by Christina Chortaria at 2022-03-21 13:54:12.referenced
by Jane Sandberg at 2022-03-21 15:30:32.merged
by Jane Sandberg at 2022-03-21 15:30:32.closed
by Jane Sandberg at 2022-03-21 15:30:32.head_ref_deleted
by Jane Sandberg at 2022-03-21 15:30:32.head_ref_force_pushed
by Christina Chortaria at 2022-03-21 18:25:34.v1.0.4 is now tagged and deployed to both staging and production.
assigned
by Bess Sadler at 2022-03-21 14:17:13.closed
by Bess Sadler at 2022-03-21 16:29:22.assigned
by Thanya Begum at 2022-03-21 15:50:56.assigned
by Eliot Jordan at 2022-03-21 22:33:30.unassigned
by Eliot Jordan at 2022-03-21 22:33:37.review_dismissed
by Xander Gardner at 2022-03-21 13:23:30.head_ref_force_pushed
by Xander Gardner at 2022-03-21 13:23:30.labeled
by Jon Stroop at 2022-03-21 13:46:01.We're going to talk about this during this maintenance week and decide on a path forward.
labeled
by Trey Pendragon at 2022-03-21 19:17:38.labeled
by Trey Pendragon at 2022-03-21 19:36:26.unlabeled
by Trey Pendragon at 2022-03-21 19:37:59.unlabeled
by Trey Pendragon at 2022-03-21 19:47:57.Maps stakeholders will ingest one.
closed
by Trey Pendragon at 2022-03-21 19:53:15.renamed
by Trey Pendragon at 2022-03-21 19:55:28.labeled
by Trey Pendragon at 2022-03-21 20:15:31.labeled
by Eliot Jordan at 2022-03-21 20:16:58.@escowles Presumably if these items are eligible for download we don't need to provide cover pages for these PDFs?
labeled
by None at 2022-03-21 14:22:06.mentioned
by Esmé Cowles at 2022-03-21 18:11:46.subscribed
by Esmé Cowles at 2022-03-21 18:11:46.mentioned
by None at 2022-03-21 20:41:37.subscribed
by None at 2022-03-21 20:41:37.Stats from dry run:
Number of files: 5,093,622 (reg: 4,715,761, dir: 377,860, link: 1) Number of created files: 531 (reg: 497, dir: 34) Number of deleted files: 0 Number of regular files transferred: 510 Total file size: 21,989,040,215,183 bytes Total transferred file size: 4,835,786,511 bytes Literal data: 0 bytes Matched data: 0 bytes File list size: 2,752,422 File list generation time: 0.002 seconds File list transfer time: 0.000 seconds Total bytes sent: 92,455,783 Total bytes received: 405,495
sent 92,455,783 bytes received 405,495 bytes 184,431.54 bytes/sec total size is 21,989,040,215,183 speedup is 236,794.50 (DRY RUN)
This is about 5 GB of files. I'm just gonna run that.
Rsync is done.
https://github.com/pulibrary/princeton_ansible/pull/2867 gets us most of the way there. The njhistoric maps static page uses JSON-P, but a quick look makes it look like I can stop it from doing that.
Perusing the access logs for loris on libimages
that's the only thing using JSON-P.
https://github.com/pulibrary/njmaps_exhibit_archive/pull/7 will take care of it.
labeled
by Trey Pendragon at 2022-03-21 17:30:00.referenced
by Trey Pendragon at 2022-03-21 18:07:38.assigned
by Trey Pendragon at 2022-03-21 18:08:06.referenced
by Trey Pendragon at 2022-03-21 21:25:17.assigned
by Eliot Jordan at 2022-03-21 18:07:21.head_ref_restored
by Eliot Jordan at 2022-03-21 18:11:55.referenced
by Kevin Reiss at 2022-03-21 12:39:05.merged
by Kevin Reiss at 2022-03-21 12:39:05.closed
by Kevin Reiss at 2022-03-21 12:39:05.head_ref_deleted
by Kevin Reiss at 2022-03-21 12:39:05.Companion config issue: https://github.com/PrincetonUniversityLibrary/alma-config/issues/187
referenced
by Eliot Jordan at 2022-03-21 21:57:31.merged
by Eliot Jordan at 2022-03-21 21:57:32.closed
by Eliot Jordan at 2022-03-21 21:57:32.head_ref_deleted
by Eliot Jordan at 2022-03-21 21:57:35.referenced
by Christina Chortaria at 2022-03-21 13:51:16.merged
by Christina Chortaria at 2022-03-21 13:51:17.closed
by Christina Chortaria at 2022-03-21 13:51:17.head_ref_deleted
by Christina Chortaria at 2022-03-21 13:51:18.You might take a look at https://github.com/pulibrary/rails-template
labeled
by Bess Sadler at 2022-03-21 20:42:53.labeled
by Bess Sadler at 2022-03-21 20:53:13.assigned
by Bess Sadler at 2022-03-21 14:05:46.closed
by Francis Kayiwa at 2022-03-21 17:42:42.referenced
by Francis Kayiwa at 2022-03-21 17:42:41.merged
by Francis Kayiwa at 2022-03-21 17:42:41.closed
by Francis Kayiwa at 2022-03-21 17:42:42.head_ref_deleted
by Francis Kayiwa at 2022-03-21 17:42:42.mentioned
by Francis Kayiwa at 2022-03-21 18:13:17.subscribed
by Francis Kayiwa at 2022-03-21 18:13:17.referenced
by Francis Kayiwa at 2022-03-21 19:06:40.merged
by Francis Kayiwa at 2022-03-21 19:06:40.closed
by Francis Kayiwa at 2022-03-21 19:06:40.head_ref_deleted
by Francis Kayiwa at 2022-03-21 19:06:41.review_requested
by Francis Kayiwa at 2022-03-21 17:14:35.head_ref_force_pushed
by Francis Kayiwa at 2022-03-21 17:48:20.referenced
by Francis Kayiwa at 2022-03-21 20:35:13.merged
by Francis Kayiwa at 2022-03-21 20:35:13.closed
by Francis Kayiwa at 2022-03-21 20:35:13.head_ref_deleted
by Francis Kayiwa at 2022-03-21 20:35:14.ready_for_review
by Thanya Begum at 2022-03-21 17:47:14.referenced
by None at 2022-03-21 20:42:14.merged
by None at 2022-03-21 20:42:14.closed
by None at 2022-03-21 20:42:14.head_ref_deleted
by None at 2022-03-21 20:42:14.convert_to_draft
by Trey Pendragon at 2022-03-21 21:00:44.head_ref_force_pushed
by Trey Pendragon at 2022-03-21 21:06:17.ready_for_review
by Trey Pendragon at 2022-03-21 21:06:21.assigned
by Eliot Jordan at 2022-03-21 22:30:35.If we instead put the panopto link as a DAO, it'll look like this: https://princeton.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=18d84eb8-cd46-45c6-9922-ae5400e2fdfb
renamed
by Trey Pendragon at 2022-03-21 18:22:44.assigned
by Trey Pendragon at 2022-03-21 18:23:26.labeled
by Trey Pendragon at 2022-03-21 19:43:30.unlabeled
by Trey Pendragon at 2022-03-21 19:43:38.The update has been deployed to production!
closed
by Xander Gardner at 2022-03-21 15:51:25.unassigned
by Shaun Ellis at 2022-03-21 19:08:51.unassigned
by Eliot Jordan at 2022-03-21 19:15:32.We're going to take a quick look. If it looks like it's going to be a lot of work to fix we'll deprioritize.
unassigned
by Zaynab Masood at 2022-03-21 19:09:14.We're going to draft some text, give it to Kim to approve (in a PR), and then merge it.
unlabeled
by Trey Pendragon at 2022-03-21 19:27:29.We should re-test the usefulness of the exports after upgrading Geoblacklight, which changes this pane.
unlabeled
by Trey Pendragon at 2022-03-21 19:34:38.We'll close this by upgrading Geoblacklight in the future.
closed
by Trey Pendragon at 2022-03-21 19:36:02.We're not sure users will understand the long coordinate facets - revisit after closing #1035
closed
by Trey Pendragon at 2022-03-21 19:43:07.We need to look into the source data and we should hold off until we implement Geoblacklight's Aardvark schema.
unlabeled
by Trey Pendragon at 2022-03-21 20:12:30.closed
by Eliot Jordan at 2022-03-21 20:47:39.deployed
by None at 2022-03-21 20:41:31.referenced
by Eliot Jordan at 2022-03-21 20:47:39.merged
by Eliot Jordan at 2022-03-21 20:47:39.closed
by Eliot Jordan at 2022-03-21 20:47:39.head_ref_deleted
by Eliot Jordan at 2022-03-21 20:47:40.head_ref_force_pushed
by Thanya Begum at 2022-03-21 16:48:50.head_ref_force_pushed
by Thanya Begum at 2022-03-21 17:02:34.head_ref_force_pushed
by Thanya Begum at 2022-03-21 17:12:55.head_ref_force_pushed
by Thanya Begum at 2022-03-21 17:15:55.head_ref_force_pushed
by Thanya Begum at 2022-03-21 17:37:24.head_ref_force_pushed
by Thanya Begum at 2022-03-21 17:57:04.head_ref_force_pushed
by Thanya Begum at 2022-03-21 17:58:00.ready_for_review
by Thanya Begum at 2022-03-21 18:01:07.referenced
by None at 2022-03-21 20:40:36.merged
by None at 2022-03-21 20:40:36.closed
by None at 2022-03-21 20:40:36.assigned
by Thanya Begum at 2022-03-21 15:32:14.closed
by None at 2022-03-21 20:40:36.RESSHARE$INRS_REQ is handled in bibdata https://github.com/pulibrary/bibdata/pull/1826 lewis$resterm is handled in the location configuration on the Alma side
closed
by Christina Chortaria at 2022-03-21 13:46:46.closed
by Trey Pendragon at 2022-03-21 18:53:11.


Site Template Functions
Template Functions
In addition to supporting all of the Stock Template Functions there are several additional template functions that you
can use on the Site Templates. Those are documented below.
{banner}
sort - The sorting method to use when selecting which banner to display. Any of the following can be used:
times_displayed
The number of times the banner has been selected for display
RAND()
Random
sponsor - Limit the banners which can be selected for display to those of a specific sponsor. The sponsor can be specified in one of three ways:
Template variable
A template variable that contains the sponsor ID number
Sponsor ID
The ID number assigned to the sponsor
Sponsor Name
The name of the sponsor, exactly as it appears in the control panel interface
tags - Limit the banners which can be selected for display to those that match the boolean mode search supplied for this attribute. Examples:
tags="image"
Banners that have image in their tags
tags="image flash"
Banners that have either image or flash in their tags
tags="+image +flash"
Banners that have both image and flash in their tags
tags="image -flash"
Banners that have image but not flash in their tags
zone - Limit the banners which can be selected for display to those that match the zone value supplied for this attribute.
{categories}
amount - A numerical value specifying the number of categories to load into the template variable. Do not include this attribute if you would like all of your categories to be loaded.
startswith - Specify a single character which will limit the categories that are loaded to those that start with the character you specify.
alphabetize - true or false. If set to true, the categories will be alphabetized, overriding the sort option. If set to false or not included, the categories will be sorted by the sort value.
sort - The sorting method to use when pulling the categories from the database. Any of the following can be used:
name
The category's name
url_name
The category's URL name
num_videos
The number of videos in the category
RAND()
Random
var - Specify the template variable into which the categories will be loaded
{category}
id - The ID number of the category to load (cannot be used in combination with the url attribute)
url - The URL name of the category to load (cannot be used in combination with the id attribute)
var - The template variable in which the category information will be stored
{clips}
sort - The sorting method to use when pulling the clips from the database. Any of the following can be used:
clip_id
The ID number assigned to the clip.
RAND()
Random
var - The template variable into which the clips will be loaded
videoid - The ID number of the video who's clips will be loaded. This can either be provided as an actual numerical value or as a template variable that contains the video ID.
{comments}
amount - A numeric value specifying the number of comments to load. If using pagination, this will specify the number to display per page.
paginate - true or false. true to paginate the comments, false otherwise
page - The page number that the user is viewing (most often set to $g_page_number)
sort - The sorting method to use when pulling the comments from the database. Any of the following can be used:
comment_id
The ID number assigned to the comment.
date_commented
The date and time the comment was submitted
RAND()
Random
var - The template variable into which the comments will be loaded
videoid - The ID number of the video who's comments will be loaded. This can either be provided as an actual numerical value or as a template variable that contains the video ID.
{options}
{player}
clips - This must be set to a template variable that was previously used as the var attribute of a {clips} template function
qt - The filename of the template to use for videos played with the Quicktime player
wmv - The filename of the template to use for videos played with the Silverlight player
flv - The filename of the template to use for videos played with the Flash player
other - The filename of the template to use for videos played with the Windows Media player
{ratings}
amount - A numeric value specifying the number of ratings to load.
sort - The sorting method to use when pulling the comments from the database. Any of the following can be used:
rating
The rating that was given to the video
date_rated
The date and time the rating was submitted
RAND()
Random
var - The template variable into which the ratings will be loaded
videoid - The ID number of the video who's ratings will be loaded. This can either be provided as an actual numerical value or as a template variable that contains the video ID.
{reasons}
var - The template variable into which the reasons will be loaded
type - The type of reasons to load. Can be one of the following:
Flag
Reasons for flagging a video
Feature
Reasons for featuring a video
{searchterms}
minscore - The minimum score that can be assigned to a search term. Scores are based on frequency, and are useful for generating different font sizes for tag clouds. 100 is recommended for this value.
maxscore - The maximum score that can be assigned to a search term. Scores are based on frequency, and are useful for generating different font sizes for tag clouds. 200 is recommended for this value.
alphabetize - true or false. If set to true, the search terms will be alphabetized, overriding the sort option. If set to false or not included, the search terms will be sorted by the sort value.
sort - The sorting method to use when pulling the search terms from the database. Any of the following can be used:
term
The search term itself
frequency
The number of times this search term has been used
RAND()
Random
amount - The number of search terms to load
var - The template variable into which the search terms will be loaded
{sponsor}
sponsorid - The ID number of the sponsor. This can either be provided as an actual numerical value or as a template variable that contains the sponsor ID.
{sponsors}
amount - A numerical value specifying the number of sponsors to load into the template variable. Do not include this attribute if you would like all of your sponsors to be loaded.
startswith - Specify a single character which will limit the sponsors that are loaded to those that start with the character you specify.
alphabetize - true or false. If set to true, the sponsors will be alphabetized, overriding the sort option. If set to false or not included, the sponsors will be sorted by the sort value.
sort - The sorting method to use when pulling the categories from the database. Any of the following can be used:
name
The sponsor's name
url
The sponsor's URL
num_videos
The number of videos assigned to the sponsor
RAND()
Random
var - Specify the template variable into which the sponsors will be loaded
{stats}
var - The template variable into which the stats will be loaded
The template variable will have the following values:
$stats.users - The total number of active users
$stats.videos - The total number of active videos
$stats.categories - The total number of categories
$stats.comments - The total number of comments
{tags}
minscore - The minimum score that can be assigned to a search term. Scores are based on frequency, and are useful for generating different font sizes for tag clouds. 100 is recommended for this value.
maxscore - The maximum score that can be assigned to a search term. Scores are based on frequency, and are useful for generating different font sizes for tag clouds. 200 is recommended for this value.
alphabetize - true or false. If set to true, the tags will be alphabetized, overriding the sort option. If set to false or not included, the tags will be sorted by the sort value.
sort - The sorting method to use when pulling the tags from the database. Any of the following can be used:
tag
The tag itself
frequency
The number of times this search term has been used
RAND()
Random
amount - The number of tags to load
var - The template variable into which the tags will be loaded
{user}
var - The template variable into which the user data will be loaded
username - The username of the account. This can either be provided as an actual string value or as a template variable that contains the username.
{video}
var - The template variable into which the video data will be loaded
username - The ID number of the video. This can either be provided as an actual numeric value or as a template variable that contains the video ID.
{videos}
amount - A numeric value specifying the number of comments to load. If using pagination, this will specify the number to display per page.
featured - true or false. true to only select featured videos, false to only select non-featured videos.
category - Limit the videos which can be selected to those of a specific category. The category can be specified in one of three ways:
Template variable
A template variable that contains the category ID number
Category ID
The ID number assigned to the category
Category Name
The name of the category, exactly as it appears in the control panel interface.
sponsor -
Limit the videos which can be selected to those of a specific sponsor. The sponsor can be specified in
one of three ways:
Template variable
A template variable that contains the sponsor ID number
Sponsor ID
The ID number assigned to the sponsor
Sponsor Name
The name of the sponsor, exactly as it appears in the control panel interface.
tags -
Limit the videos which can be selected to those that match the boolean mode search supplied for this attribute. Examples:
tags="funny"
Videos that have funny in their tags
tags="funny cartoon"
Videos that have either funny or cartoon in their tags
tags="+funny +cartoon"
Videos that have both funny and cartoon in their tags
tags="funny -cartoon"
Videos that have funny but not cartoon in their tags
username - Limit the videos which can be selected to those of a specific user. The user can be specified in one of two ways:
Template variable
A template variable that contains the account username
Username
The account username, exactly as it appears in the control panel interface
related - If provided, this must be a template variable that contains a videofavorites - true or false. true to select only videos that are favorites for a specific user, false otherwise. Only meaningful on the user-favorites.tpl template.
not - If provided, this must be a video ID number which cannot be included in the videos that are selected. The video ID can be specified in one of two ways:
Template variable
A template variable that contains the video ID number
Video ID
The ID number assigned to the videoprivate - true or false. true to select private videos, false to select non-private videos
paginate - true or false. true to paginate the videos, false otherwise
page - The page number that the user is viewing (most often set to $g_page_number)
searchterm - Limit the videos selected based on a search term
emptysearch - true or false. true to allow empty search terms, false otherwise. Only meaningful on the user-my-videos.tpl template.
sort - The sorting method to use when pulling the videos from the database. Any of the following can be used:
video_id
The ID number assigned to the video.
date_added
The date and time the video was submitted
duration
The length of the video in seconds
RAND()
Random
var - The template variable into which the videos will be loaded


Class MatchTreeNode
- java.lang.Object
-
- implementation.algorithms.matchTree.MatchTreeNode
-
- Direct Known Subclasses:
MatchTreeRoot
public class MatchTreeNode extends java.lang.Object
See the article for the exact mathematical definitions of the attributes and behavior of the algorithm https://hal.archives-ouvertes.fr/hal-01945454/document Ch.6- Author:
- nk-fouque
-
-
Constructor Summary
Constructors Constructor Description MatchTreeNode()
Initialize everything to null (Needed byMatchTreeRoot(MatchTreeNode)
)} as super() constructor)MatchTreeNode(MatchTreeNode other)
Constructor by copyMatchTreeNode(org.apache.jena.sparql.syntax.Element element, CollectionsModel colmd, java.util.Set<org.apache.jena.sparql.core.Var> varPprime)
Base Constructor
-
Method Summary
Modifier and Type Method Description java.lang.String
elementString()
Same asElement.toString()
except for the top element, expressed as T(X)java.util.Set<MatchTreeNode>
getChildren()
The nodes under this nodejava.util.Set<org.apache.jena.sparql.core.Var>
getD()
D : the set of variable introduced by ejava.util.Set<org.apache.jena.sparql.core.Var>
getDelta()
Δ : the sub-domain of variables useful to this node's parentorg.apache.jena.sparql.syntax.Element
getElement()
e : the Element defined by this nodeorg.apache.jena.sparql.algebra.Table
getMatchSet()
M : the match-setjava.util.Set<org.apache.jena.sparql.core.Var>
getVarE()
var(e) : the variables mentioned by evoid
insert()
Indicates that the node has been inserted somewhere in the treeboolean
isInserted()
Whether the node has been inserted somewhere in the treevoid
replace(MatchTreeNode child, MatchTreeNode other)
Replaces one child node by a new node in this node's childrenjava.lang.String
toString()
java.lang.String
toString(int tab)
Visualization of the tree using indentation Still has a few issues
-
-
-
Constructor Detail
-
MatchTreeNode
public MatchTreeNode()
Initialize everything to null (Needed byMatchTreeRoot(MatchTreeNode)
)} as super() constructor)
-
MatchTreeNode
public MatchTreeNode(org.apache.jena.sparql.syntax.Element element, CollectionsModel colmd, java.util.Set<org.apache.jena.sparql.core.Var> varPprime)
Base Constructor- Parameters:
element
- The element defined by this nodecolmd
- The graph to work invarPprime
- The variables already defined in the cluster
-
MatchTreeNode
public MatchTreeNode(MatchTreeNode other)
Constructor by copy
-
-
Method Detail
-
getElement
public org.apache.jena.sparql.syntax.Element getElement()
e : the Element defined by this node
-
getVarE
public java.util.Set<org.apache.jena.sparql.core.Var> getVarE()
var(e) : the variables mentioned by e
-
getD
public java.util.Set<org.apache.jena.sparql.core.Var> getD()
D : the set of variable introduced by e
-
getMatchSet
public org.apache.jena.sparql.algebra.Table getMatchSet()
M : the match-set
-
getDelta
public java.util.Set<org.apache.jena.sparql.core.Var> getDelta()
Δ : the sub-domain of variables useful to this node's parent
-
getChildren
public java.util.Set<MatchTreeNode> getChildren()
The nodes under this node
-
elementString
public java.lang.String elementString()
Same asElement.toString()
except for the top element, expressed as T(X)
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
toString
public java.lang.String toString(int tab)
Visualization of the tree using indentation Still has a few issues
-
insert
public void insert()
Indicates that the node has been inserted somewhere in the tree
-
isInserted
public boolean isInserted()
Whether the node has been inserted somewhere in the tree
-
replace
public void replace(MatchTreeNode child, MatchTreeNode other)
Replaces one child node by a new node in this node's children- Parameters:
child
- The child to removeother
- Usually a slightly modified copy of child
-
-


Introduction
Welcome to the Document mananagment System API (DocSys)! You can use our API to manage documents, The API provides login and signup route, autenticated routes for create, updating and searching documents, users and roles.
Each user has a record contaning email, password and roleID. A user record is created when the user signs up. Each Document also have a record containing Document title, content, access type which can either be 'public', 'private' or 'role', this determines who can view the document. A new user is assigned a role of 'regular', The Admin can change a user's role at anytime and he can also update the role records in the database except the 'Admin' record.
All APIs in DocSys are RESTful, you can be assure of consistent response for all request made.
Authentication
All routes are protected and needs a valid token except the login and signup routes. To get a token, the user signs up or logs in(If the user has signed up previously). A token is included in the response from the signup/login route, this token expires after 12hours. With a valid token a user can create/update/delete or search for documents, the request must contain the valid token on the header of the request in the following format.
Authorization: token
Request
POST /users/
body = {
email<EMAIL_ADDRESS>password: 'password'
}
Response.
{
"message": "New user created successfully",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InJvbGVJZCI6MiwiaWQiOjMyLCJ1c2VybmFtZSI6InRydW50IiwiZW1haWwiOiIxYWphcHNAeWFob28uY29tIiwicGFzc3dvcmQiOiIkMmEkMTAkS3FpbzVUdWxpZXFLUU5vY0xEaUdZT08wTmJ4ME9yQXBOc3RwSFRMcjNBZUttc2o5ODFMU0MiLCJ1cGRhdGVkQXQiOiIyMDE3LTA4LTE2IiwiY3JlYXRlZEF0IjoiMjAxNy0wOC0xNiJ9LCJpYXQiOjE1MDI5MjU2ODAsImV4cCI6MTUwMjk2ODg4MH0.te0d7UcG3O21BWkVY8AHYnUKUD8yTBq1bUn8U5W7hX8"
}
Roles
Find matching instances of Role
Request
GET /roles/
The above command returns JSON structured like this:
{
"message": "roles retrieved successfully",
"roles": [
{
"id": 1,
"roleName": "admin",
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
},
{
"id": 2,
"roleName": "regular",
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
},
{
"id": 4,
"roleName": "fellow",
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
},
{
"id": 3,
"roleName": "facilitator",
"createdAt": "2017-08-13",
"updatedAt": "2017-08-14"
},
],
"pagination": {
"page": 1,
"pageCount": 1,
"pageSize": 10,
"totalCount": 6
}
}
This endpoint retrieves all available roles.
HTTP Request
GET /api/v1/roles
Status: 200: Ok - retrieved successfully
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
Query Parameters
| Parameter | Default | Description |
|---|---|---|
| none | null | requires no parameter - gets all available roles in the database |
Create new role
POST /roles/
body = {
"roleName": "student"
}
The above command returns JSON structured like this:
{
"message": "new role created successfully",
"role": {
"id": 6,
"roleName": "student",
"updatedAt": "2017-08-02",
"createdAt": "2017-08-02"
}
}
This endpoint creates a new role, if the role doesnt already exist.
HTTP Request
POST /api/v1/roles
Body (application/json)
Requires: Admin Authorization
HTTP response
Status: 201: created
Status: 409: conflict - roleName already exist
Status: 406: Not acceptable - roleName must be a string
URL Parameters
| Parameter | Description |
|---|---|
| roleName | The name of the role to create |
Update role
Request
PUT /roles/
{
"roleName": "student",
}
The above command returns JSON structured like this:
{
"message": "updated successfully"
}
This endpoint updates a specific role.
HTTP Request
PUT /api/v1/roles/<ID>
Body (application/json)
HTTP response
Status: 200: Ok - updated successfully
Status: 403: Forbidden - cannot update Admin role
Status: 412: pre condition failed - The role ID must be a number
Status: 409: Conflict - An unexpected error occured, updating the role may cause conflict or the server took too long to respond to your request
URL Parameters
| Parameter | Description |
|---|---|
| ID | The ID of the role to update |
Users
Find matching instances of user
Request
GET /users/
The above command returns JSON structured like this:
{
"message": "users retrieved successfully",
"users": [
{
"id": 1,
"username": "framky",
"roleId": 1
},
{
"id": 2,
"username": "framky007",
"roleId": 2
},
{
"id": 30,
"username": "Ajaps Franklin",
"roleId": 2
},
{
"id": 32,
"username": "trunt",
"roleId": 2
},
{
"id": 6,
"username": "framky234",
"roleId": 2
},
{
"id": 22,
"username": "Ajaps Franklin",
"roleId": 2
}
],
"pagination": {
"page": 1,
"pageCount": 1,
"pageSize": 10,
"totalCount": 6
}
}
This endpoint retrieves all available users.
HTTP Request
GET /api/v1/users
HTTP response
Status: 200: ok
Status: 500: Bad request - An unexpected error occured
Creates new user
POST /api/v1/users
body = {
"email": "johndoe@email",
"password": "password"
}
The above command returns JSON structured like this:
{
"message": "New user created successfully",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InJvbGVJZCI6MiwiaWQiOjUsImVtYWlsIjoiam9obmRvZUBlbWFpbC5jb20iLCJwYXNzd29yZCI6IiQyYSQxMCRtUXBCWHYxbDRkVHJqamFQMmVFUVd1ZEx2NGJOZ2NBZHZYdGIuMXI1WHpJb2RGcmRYU25DNiIsInVwZGF0ZWRBdCI6IjIwMTctMDgtMDJUMTY6MjM6NDMuMzY2WiIsImNyZWF0ZWRBdCI6IjIwMTctMDgtMDJUMTY6MjM6NDMuMzY2WiJ9LCJpYXQiOjE1MDE2OTEwMjMsImV4cCI6MTUwMTczNDIyM30.jJ8UJkgp5T-xcqgDQ5zRL9FuIdmScFjmAunUh7SYxzs"
}
This endpoint creates new users.
HTTP Request
POST /api/v1/users
HTTP response
Status: 201: created
Status: 409: conflict - Email already exists
Status: 412: pre-condition failed - email and/or password did not meet minimum requirements
URL Parameters
| Parameter | Description |
|---|---|
| The email address of the user | |
| password | The password of the user |
| username | The Username |
Login user
POST /api/v1/users
body = {
"email": "johndoe@email",
"password": "password"
}
The above command returns JSON structured like this:
{
"message": "Logged in successfully",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InJvbGVJZCI6MiwiaWQiOjUsImVtYWlsIjoiam9obmRvZUBlbWFpbC5jb20iLCJwYXNzd29yZCI6IiQyYSQxMCRtUXBCWHYxbDRkVHJqamFQMmVFUVd1ZEx2NGJOZ2NBZHZYdGIuMXI1WHpJb2RGcmRYU25DNiIsInVwZGF0ZWRBdCI6IjIwMTctMDgtMDJUMTY6MjM6NDMuMzY2WiIsImNyZWF0ZWRBdCI6IjIwMTctMDgtMDJUMTY6MjM6NDMuMzY2WiJ9LCJpYXQiOjE1MDE2OTEwMjMsImV4cCI6MTUwMTczNDIyM30.jJ8UJkgp5T-xcqgDQ5zRL9FuIdmScFjmAunUh7SYxzs"
}
This endpoint logs in user into the application.
HTTP Request
POST /api/v1/users
HTTP response
Status: 202: Accpeted - Email and password matches, logged in successfully
Status: 401: Unauthorized - wrong email or password
Status: 412: Pre-condition failed - email and/or password did not meet minimum requirements
Status: 404: Not Found - email and/or password not found
URL Parameters
| Parameter | Description |
|---|---|
| The email address of the user | |
| password | The password of the user |
Find user
Response:
{
"user": [
{
"id": 2,
"email"<EMAIL_ADDRESS>"roleId": 2
}
]
}
This endpoint finds user that matches the ID.
HTTP Request
GET /api/v1/users/<id>
HTTP response
Status: 200: ok
Status: 404: not found - the ID does not match any in the database
Status: 412: pre-condition failed - ID must be a number
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| id | The ID of the user |
Update user
PUT /api/v1/users/<id>
{
"email": "johndoe@email",
"password": "password"
"roleId": "4",
}
The above command returns JSON structured like this:
{
"message": "User updated successfully",
}
This endpoint logs in user into the application.
HTTP Request
PUT /api/v1/users/<id>
HTTP response
Status: 200: ok
Status: 401: unauthorized - The specified userId does not belong to you
Status: 409: conflict - could not find the specified (role/user) ID in the database
URL Parameters
| Parameter | Description |
|---|---|
| The email address of the user | |
| password | The password of the user |
| roleId | The new roleId of the user |
Delete user
DELETE /users/
The above command returns JSON structured like this:
{
"message": "User deleted successfully"
}
This endpoint deletes secified user.
HTTP Request
DELETE /api/v1/users/<id>
HTTP response
Status: 200: Ok - Deleted
Status: 401: Unauthorized - The specified userId does not belong to you
Status: 404: Bad request - The UserId does not exist
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| ID | The ID of the user to delete |
Search for users
Response:
{
"message": "users retrieved successfully",
"users": [
{
"id": 1,
"username": "framky",
"roleId": 1
},
{
"id": 2,
"username": "framky007",
"roleId": 2
},
{
"id": 6,
"username": "framky234",
"roleId": 2
},
{
"id": 8,
"username": "framky234",
"roleId": 2
}
],
"pagination": {
"page": 1,
"pageCount": 1,
"pageSize": 10,
"totalCount": 4
}
}
This endpoint searches for users email that matches the query.
HTTP Request
GET /api/v1/search/users/?q={userEmail}
HTTP response
Status: 200: Ok - The query matches user(s) in the database
Status: 404: Not found - the query did not match any user in the database
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| q | The query(search) string |
Documents
Find matching instances of document
Request
GET /documents/
The above command returns JSON structured like this:
{
"message": "documents retrieved successfully",
"documents": [
{
"id": 1,
"title": "Introduction to 101",
"content": "The definition of computer is",
"access": "public",
"userId": 1,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
},
{
"id": 5,
"title": "Introduction to 105",
"content": "Did i do that? did i really do that?",
"access": "role",
"userId": 2,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
},
{
"id": 7,
"title": "The Tortoise, Lion and Lizard 101",
"content": "Once upon a time...... tiime time",
"access": "role",
"userId": 8,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
}
],
"pagination": {
"page": 1,
"pageCount": 1,
"pageSize": 10,
"totalCount": 3
}
}
This endpoint retrieves all available documents.
HTTP Request
GET /api/v1/documents
HTTP response
Status: 200: ok
Status: 404: not found - The user does not have required access right to view available documents
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
Creates new documents
POST /api/v1/documents
body = {
"title": "The Tortoise stroy",
"content": "Once upon a time, in the land of animals...",
"access": "private"
}
The above command returns JSON structured like this:
{
"message": "Document created",
"Document": {
"title": "Calculus202",
"access": "public",
"ownerId": 32,
"create_date": "2017-08-16"
}
}
This endpoint creates new document.
HTTP Request
POST /api/v1/documents
HTTP response
Status: 201: created
Status: 409: conflict - Document title already exists
Status: 409: conflict - Access must be public, private or role. Default:public
Status: 412: precondition failed - Title must be between 10 - 150 characters and Doc-Content cannot be empty
URL Parameters
| Parameter | Description |
|---|---|
| title | The title of the document |
| content | The content of the document |
| access | The access type of the document |
Update document
{
"title": "The Tortoise stroy",
"content": "Once upon a time, in the land of animals...",
"access": "private"
}
The above command returns JSON structured like this:
{
"message": "updated successfully"
}
This endpoint updates document the database.
HTTP Request
PUT /api/v1/documents/<id>
HTTP response
Status: 200: ok - Updated
Status: 400: Bad request - An error was encoutered while updating document, ensure Access is one of public, private or role. Default:public
Status: 401: Unauthorized - You do not have access to view available documents or there is no Document with the specified ID in the database
Status: 412: precondition failed - id must be a number
URL Parameters
| Parameter | Description |
|---|---|
| title | The title of the document |
| content | The content of the document |
| access | The access type of the document |
Get Documents by ID
Response:
{ "message": "retrieved successfully",
"document": [
{
"id": 1,
"title": "Introduction to 101",
"content": "The definition of computer is",
"access": "public",
"userId": 1,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
}
]
}
This endpoint retrieves documents by Id.
HTTP Request
GET /api/v1/documents/<id>
HTTP response
Status: 200: Ok - successfully retrieves document
Status: 401: Not Found - Could not find any document with the specified ID, or you do not have permission to view the document(Private Doc or Document not on same role as user)
Status: 412: pre-condition failed - ID must be a number
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| id | The ID of the Document |
Get Documents by UserId
Response:
{
"message": "retrieved successfully",
"documents": [
{
"id": 1,
"title": "Introduction to 101",
"content": "The definition of computer is",
"access": "public",
"userId": 1,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
}
]
} ]
}
This endpoint finds documents that matches the userID.
HTTP Request
GET /api/v1/users/<id>/documents
HTTP response
Status: 200: Ok - retrieves all documents by UserId
Status: 404: Not Found - Could not find any document with the specified userId, The userId does not exist or you do not have permission to view the document
Status: 412: pre-condition failed - ID must be a number
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| id | The ID of the user |
Get Documents by roleId
Response:
{
"message": "documents retrieved successfully",
"documents": [
{
"id": 5,
"title": "Introduction to 105",
"content": "Did i do that? did i really do that?",
"access": "role",
"userId": 2,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
},
{
"id": 7,
"title": "The Tortoise, Lion and Lizard 101",
"content": "Once upon a time...... tiime time",
"access": "role",
"userId": 8,
"createdAt": "2017-08-13",
"updatedAt": "2017-08-13"
}
],
"pagination": {
"page": 1,
"pageCount": 1,
"pageSize": 10,
"totalCount": 2
}
}
This endpoint finds documents that matches the userID.
HTTP Request
GET /api/v1/roles/<id>/documents
HTTP response
Status: 200: ok - retrieves all documents by roleId
Status: 404: Not Found - Could not find any document with the specified roleId
Status: 401: Unauthorized - You need access rights to view documents in this role
Status: 412: pre-condition failed - ID must be a number
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| id | The role ID |
Delete documents
DELETE /documents
The above command returns JSON structured like this:
{
"message": "deleted successfully",
}
This endpoint deletes secified document.
HTTP Request
DELETE /api/v1/documents/<id>
HTTP response
Status: 200: ok - Deleted
Status: 401: unauthorized - The specified document does not belong to you
Status: 412: pre condition failed - The document ID must be a number
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| ID | The ID of the document to delete |
Search for documents based on title
Response:
{
"message": "successful",
"page": 0,
"pageCount": 1,
"pageSize": 10,
"totalCount": 2,
"document": [
{
"id": 1,
"title": "Introduction to 101",
"content": "Who b this goat?",
"access": "public",
"userId": 1,
"createdAt": "2017-08-01",
"updatedAt": "2017-08-01"
},
{
"id": 4,
"title": "Introduction to 104",
"content": "Who b this tortoise?",
"access": "role",
"userId": 4,
"createdAt": "2017-08-01",
"updatedAt": "2017-08-01"
}
],
"pagination": {
"page": 1,
"pageCount": 1,
"pageSize": 10,
"totalCount": 2
}
}
This endpoint searches for documents title that matches the query.
HTTP Request
GET /api/v1/search/documents/?q={doctitle}
HTTP response
Status: 200: Ok - Documents retrieved successfully
Status: 404: not found - the query did not match any document in the database
Status: 500: Internal Server Error - The request could not be processed at the moment, try again later
URL Parameters
| Parameter | Description |
|---|---|
| q | The query(search) string |
Errors
The DocSys API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 | Bad Request -- Your request sucks. |
| 401 | Unauthorized -- You need Admin priviledges to access this route. |
| 403 | Forbidden -- You cannot update Admin role. |
| 404 | Not Found -- The specified record cannot be found in the database. |
| 406 | Not Acceptable -- You made a request with wrong param(s). |
| 409 | Conflict - The record already exists in the database |
| 412 | Pre condition failed - You failed to provide some precondition before accessing this route |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |


ABOUT George builds Lego 乔治建造乐高 Choose a build Dumper Truck Let's build a dumper truck! 1 Pickup Truck Let's build a pickup truck! 1 Green Tree Let's build a green tree! 1 Red Robot Let's build a red robot! 1 For George Made with ... ... ..... ..... .......... ........ ...... .... .. In Beijing, 2020


Both are used to store and collect data. Arrays are like lists: a collection of data in some order. To access the values in an array, you use something called an index number, which starts at 0:
So if you called fruits[0], you would get strawberry, and so forth.
A hash, on the other hand, is a collection of key-value pairs:
The key red corresponds to the value of strawberry. In other words, if you called fruits[red], you would get strawberry.
A hash is useful if you need to map one value to another, and you can even use arrays for key/value pairs.


THE BLUE KITE A film review by James Berardinelli Copyright 1994 James Berardinelli
Rating (0 to 10): 7.8
Date Released: varies Running Length: 2:18 Rated: No MPAA Rating (Violence)
Starring: Chen Xiaoman, Zhang Wenyao, Yi Tian, Lu Liping, Pu Quanxin, Li Xeujian, Guo Baochang Director: Tian Zhuangzhuang Producers: Fortissimo Film Sales, Longwick Film Production, and Beijing Film Studio Screenplay: Xiao Mao Cinematography: Hou Yong Music: Yoshihide Otomo Released by Kino International In Chinese with subtitles
"I finished shooting THE BLUE KITE in 1992. But while I was involved in post-production, several official organizations involved with China's film industry screened the film. They decided that it had a problem concerning its political 'leanings,' and prevented its completion. The fact that it can appear today seems like a miracle... The stories in the film are real, and they are related with total sincerity. What worries me is that it is precisely a fear of reality and sincerity that has led to the ban on such stories being told." - Tian Zhuangzhuang, director of THE BLUE KITE
THE BLUE KITE recounts how a child and his mother survive through the turbulence of China during the 1950s and 60s, when political beliefs that were proper one year might be deemed counterrevolutionary the next. It is a troubling climate, where nothing is certain, and the greatest difficulty of growing up lies in determining what is proper behavior and what is likely to get you taken away for "reform."
The narrator of THE BLUE KITE is Tietou (played by Yi Tian as an infant, Zhang Wenyao as a young boy, and Chen Xiaoman as an adolescent), whose birth in 1953 occurs early in the film. His parents, librarian Shalong (Pu Quanxin) and teacher Shujuan (Lu Liping) are supporters of the Maoist revolution, but that doesn't stop Shalong from being accused of counterrevolutionary activities and sent off a labor camp, where a tree falls on him and kills him. It is Shujuan and Tietou's struggles through this and subsequent trials that form the background of Tian Zhuangzhuang's motion picture.
Tian's criticism of the Chinese revolution is effective because of its subtlety. As was true in Chen Kaige's FAREWELL MY CONCUBINE, the characters' stories are used to present the injustices of the system. If anything, the methods employed in this film are less direct than those in CONCUBINE, but no less disturbing.
Tietou's courage, Shujuan's spirit, and the love between mother and child are the immutable elements of THE BLUE KITE. No matter what year it is or how dire the circumstances faced by the characters (and, at several points, circumstances become dire indeed), these three things are constant.
The acting by the principles, especially that of Chen Xiaoman and Lu Liping, is superb. Lu's unaffected presentation of the spectrum of human emotions creates a very real Shujuan.
Tian's method of storytelling, while reasonably straightforward, will be unfamiliar to many American movie-goers. Careful attention to the story is demanded, especially for those unfamiliar with the background. Because numerous scenes end abruptly and are often followed by sudden time changes, it's easy to lose track of what's going on in THE BLUE KITE.
Many of the movies coming from so-called "Fifth Generation" Chinese filmmakers (such as Chen Kaige and Zhang Yimou) are either banned in their native country, or heavily censored. The government has shown an unwillingness to allow any criticism of their policies, either past or present. However, one proverbial "silver lining" in this cloud of controversy has been the greater worldwide recognition and distribution of productions such as THE BLUE KITE. We in the West should feel fortunate to be exposed to such well-crafted, provocative motion pictures.
- James Berardinelli<EMAIL_ADDRESS>.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Fostering Systems Research with Managed Runtimes
Nicolas Geoffray
Abstract:
Many systems research projects now target managed runtime environments (MRE)
because they provide better productivity and safety compared to native
environments. Still, developing and optimizing an MRE is a tedious
task that requires many years of development. Although MREs share some common
functionalities, such as a Just In Time Compiler or a Garbage Collector, this
opportunity for sharing has not been yet exploited in implementing MREs.
This thesis describes and evaluates VMKit, a first attempt to build a common
substrate that eases the development and experimentation of high-level MREs and
systems mechanisms. VMKit has been successfully used to build two MREs,
a Java Virtual Machine and a Common Language Runtime, as well as a a new system
mechanism that provides better security in the context of service-oriented
architectures.
We describe the lessons learnt in implementing such a common
infrastructure from a performance and an ease of development standpoint.
The performance of VMKit are reasonable compared to industrial MREs, and
the high-level MREs are only 20,000 lines of code. Our new system
mechanism only requires the addition of 600 lines of code in VMKit, and
is a significant step towards better dependable systems.
Bibtex:
@PhdThesis{geoffray:phd,
author = {N. Geoffray},
title = { Fostering Systems Research with Managed Runtimes },
schoold = {Universit\'e Pierre et Marie Curie},
year = {2009},
address = {Paris, France},
month = {September},
}
Download:


{% extends "layout.html" %} {% block page_title %} GOV.UK prototyping kit {% endblock %} {% block content %} ALPHA This is a new service – your feedback will help us to improve it. Inorganic chemical processing Select a sub-chapter 06 01 - Manufacture - formulation - supply and use of acids 06 02 - Manufacture - formulation - supply and use of bases 06 03 - Manufacture - formulation - supply and use of salts and their solutions and metallic oxides 06 04 - metal-containing wastes other than those mentioned in 06 03 06 05 - sludges from on-site effluent treatments 06 06 - Manufacture - formulation - supply and use of sulphur chemicals - sulphur chemical processes and desulphurisation processes 06 07 - Manufacture - formulation - supply and use of halogens and halogen chemical processes 06 08 - Manufacture - formulation - supply and use of silicon and silicon derivatives 06 09 - Manufacture - formulation - supply and use of phosphorous chemicals and phosphorous chemical processes 06 10 - Manufacture - formulation - supply and use of nitrogen chemicals - nitrogen chemical processes and fertiliser manufacture 06 11 - Manufacture of inorganic pigments and opacificiers 06 13 - Inorganic chemical processes not otherwise specified {% endblock %}
ALPHA This is a new service – your feedback will help us to improve it.


TABLE OF CONTENTS
A. GS1 Related B. GS2 Related POLITY 1. Now, SC Collegium to make judges’ appointments transparent 2. ‘Why can’t hanging be stopped?’" INTERNATIONAL AFFAIRS/BILATERAL RELATIONS 1. Trump set to decertify Iran nuclear agreement C. GS3 Related ECONOMICS 1. Noose tightens around 5,800 shell firms 2. GST relief for small firms, rates cut for many groups 3. The need for doing digital ENVIRONMENT AND ECOLOGY 1. India’s greenhouse gas emissions up by 4.7% in 2016 2. Toxic sulphur dioxide norms: 90% coal power plants not compliant SCIENCE AND TECHNOLOGY 1. ‘Hypertension high in Kerala, low in Bihar’ 2. Many Indians skip nutritious food D. GS4 Related E. Prelims Fact F. UPSC Prelims Practice Questions G. UPSC Mains Practice Questions
Nothing here for Today!!!
1. Now, SC Collegium to make judges’ appointments transparent
Context:
In news:
- SC’s move to ensure transparency
- According to the SC’s decisions, recommendations on judicial appointments, elevations and transfers will be posted on the court website
- As a start, the Supreme Court has posted online detailed reasons for its October 3, 2017 recommendations for judicial appointments to the Madras HC and the Kerala HC
- Details are now available online under the tag “Collegium Resolutions”
- Transparency:
- The information posted online will “indicate” reasons for the recommendation or rejection of a name for judicial appointment, transfer and elevation to HCs and the SC
Background
- Collegium system was being critcised for its opaque mode of functioning while recommending judicial appointments
- Recently, a controversy came after the public uproar over the resignation of Karnataka HC judge shortly after his transfer to the Allahabad HC
- The mode of functioning of the Collegium had seen criticism, for the first time, from within the Collegium itself in the form of Justice Chelameswar
Judges opinion:
- Proposal to upload the Collegium recommendations indicating reasons had to face strong objections from within the judicial community itself
- One of the objections include that posting such information online would cause judicial candidates acute embarrassment and loss of face in case of rejection of their names by the Collegium
2. ‘Why can’t hanging be stopped?’
Context:
- Supreme Court questions the government: Why can’t hanging as a means of causing death to condemned prisoners stop?
In news:
Supreme Court’s observation:
- The condemned should die in peace and not in pain.
- A human being is entitled to dignity even in death.
- The government should look to the “dynamic progress” made in modern science to adopt painless methods of causing death.
Category: INTERNATIONAL AFFAIRS/BILATERAL RELATIONS
1. Trump set to decertify Iran nuclear agreement
Context:
- The Iran nuclear deal between Tehran and six world powers reached in 2015 appears to be in jeopardy as President Donald Trump is unlikely to issue a certification mandated by a U.S law for the country’s continuing participation in the agreement.
In news:
- The President of U.S. is expected to give a speech explaining his position and a new, tougher policy towards Iran next week.
- The President’s view that Iran is not in compliance with the deal, also called the the Joint Comprehensive Plan of Action (JCPOA), is at odds with International Atomic Energy Agency (IAEA) and the other five signatories to the deal — Russia, China, France, Germany and U.K.
- The IAEA and these five countries maintain that Iran is in full compliance.
- Trump appears to be going by the advice of a segment of the Republican Party and two key American allies in region, Israel and Saudi Arabia, both bitter opponents of the deal negotiated by the Barack Obama administration.
- The deal has provisions to deal with an Iranian breach, but does not foresee an American non-compliance.
Four points:
- Under the Iran Nuclear Agreement Review Act of 2015, the President is required to issue a certification to Congress every 90 days that makes a determination on four points — that
- Iran is fully implementing the JCPOA
- Iran has not committed a material breach
- Iran has not taken any action that could significantly advance a nuclear weapons programme, and
- Suspension of sanctions is appropriate and proportionate to the measures taken by Iran and vital to U.S. national security interests.
What next if the President denies the certification?
- When the President refuses to certify, the onus is on the U.S Congress to decide the course of action.
- The Congress will get 60 days to decide whether or not to reimpose the sanctions on Iran, lifted as part of the nuclear deal.
- For now, supporters of decertification argue that this move could open the path for a stronger deal that could be negotiated.
1. Noose tightens around 5,800 shell firms
Context:
- Shell companies and the menace of black money generation
In news:
- The government has collected startling data on multiple accounts of 5,800 shell companies
- These 5,800 companies are from those 200,000 companies which were struck off by the registrar of companies (RoC)
- The government had asked for data from banks about over 200,000 companies whose accounts were frozen
- The data from 13 banks reveals that 5,800 companies have more than 12,000 accounts
- The companies deposited and withdrew huge amounts from banks post-demonetisation, while they had meagre deposits before November 8, 2016
- According to an official statement these companies, deposited more than Rs 4,570 crore in their accounts and withdrew Rs 4,552 crore, post-demonetisation
- Before demonetisation, these companies had a balance of Rs 22.05 crore, in banks
Steps taken by government:
- The investigative agencies have been asked(by the government) to complete necessary investigation in a time-bound manner
- The government also disqualified a number of directors associated with these companies. There are around 100,000 directors
2. GST relief for small firms, rates cut for many groups
Context:
In news:
Key Decisions:
- The Goods and Services Tax Council allowed small companies to file quarterly returns instead of monthly submissions.
- Council also expanded the scope of the Composition Scheme for paying GST and making it easier for exporters to claim tax refund.
- The government also allowed small service providers to operate across multiple states without registering with the GST Network.
- To ease transportation problems of small unregistered businesses, the Council exempted Goods Transport Agencies from paying GST on services provided to an unregistered person.
Possible impact:
- The decisions announced will ease compliance burden on nearly 90 percent of the tax assesses.
Composition Scheme
- The Composition Scheme has been made available to taxpayers having annual aggregate turnover of up to Rs 1 crore (previously 75 lakhs)
- This scheme is currently available to traders, manufacturers, and restaurants
- Traders have to pay tax at the rate of 1 percent of the turnover, manufacturers at the rate of 2 percent and restaurants at the rate of 5 percent
- Under the scheme, the assesses are not allowed to avail input tax credit
Context:
- How digital leadership and digital transformation can be beneficial for companies and also in other fields like agriculture.
Digital Technologies and its importance for India:
- Digital Technology has the potential to add economic value of $550 billion to $1 trillion per year by 2025, and create millions of well-paying, productive jobs
- Digital leadership is effective for companies only when it creates value—for their customers, partners and employees
Issues:
- The business process improvement strategy was often overlooked as the technology teams typically jumped into operations deploying a set of digital tools
- This mindset is precisely what led to failed implementation and reduced business value in the past
- What is going wrong in solving this issue: Organisations, in their attempt to solve their problems, have rushed to adopt various isolated technology components before defining the problem they were trying to solve
Present Scenario:
- Today, the entire thought process has been changed
- Addressing design is now the first port of call in the new-age digital businesses that intelligently connect people, things and business, to create a good experience for their customers
- The result is simultaneous growth in revenue and reduction in costs
- Retail chains are experiencing the impact when they turned its online sales platform into a unique mobile experience
- And moved its infrastructure to the cloud, leveraging a digital platform that combined several digital tools, including the Internet of Things (IoT), machine learning, blockchain and big data analytics to create a better experience for its users
Digital technologies and other areas:
- Production at an agriculture farm can be monitored digitally, thereby allowing informed, intelligent decisions that can prevent crop spoilage, increase efficiency with sustainability
- For large manufacturing companies, digital technology can empower the workforce to fix critical problems in real time
Key Fact:
- By using IoT, machine learning, artificial intelligence (AI), block chain and big data analytics
- All these technologies provide tremendous value
The way forward:
- Technology is core to digital transformation
- Digital leaders realise that digital transformation needs to be viewed in a holistic manner
- In a manner that impacts end-to-end business processes, creating delight at every user interface, and delivering real business value
Category: ENVIRONMENT AND ECOLOGY
1. India’s greenhouse gas emissions up by 4.7% in 2016
Context:
- Report by PBL Netherlands Environmental Assessment Agency
- The report’s data is based on the Emission Database for Global Atmospheric Research (EDGAR) produced by the European Union
In news:
- Highlights of the report:
- Trends in global CO2 and total greenhouse gas (GHG) emissions show that India’s emissions have gone up by 4.7% in 2016
- For most major GHG emitters in the world, the emission figures have gone down, barring India and Indonesia
Other GHG emitters:
- The report shows that emissions in the U.S. saw a fall of 2%, the Russian Federation 2.1%, Brazil 6.1%, China 0.3%, and, the United Kingdom 6.4%
Non-CO2 emissions
- In 2016, the five largest emitting countries and the European Union accounted for 68% of total global CO2 emissions and about 63% of total global GHG emissions
- Most of the emissions consist of CO2, about 72%
- But methane , nitrous oxide and fluorinated gases also make up substantial shares of 19%, 6% and 3%, respectively
- The combined share of non-CO2 greenhouse gas emissions is about 28% in total GHG emissions, but it varies for the largest countries:
- 11% for Japan
- 31% for India
- 20% for China
- 23% for the US
- 25% for Russia
Basic Information:
Greenhouse gas
- A greenhouse gas is a gas in an atmosphere that absorbs and emits radiation within the thermal infrared range. This process is the fundamental cause of the greenhouse effect.
- The primary greenhouse gases in Earth’s atmosphere are water vapor, carbon dioxide, methane, nitrous oxide, and ozone.
- Without greenhouse gases, the average temperature of Earth’s surface would be about −18 °C (0 °F), rather than the present average of 15 °C (59 °F).
- In the Solar System, the atmospheres of Venus, Mars and Titan also contain gases that cause a greenhouse effect.
2. Toxic sulphur dioxide norms: 90% coal power plants not compliant
In news:
- Nearly 90 percent of the country’s coal-fired power generation capacity is in violation of Sulphur Dioxide (SO2) emission limits notified two years ago.
Power ministry directive:
- Power Ministry has asked the Environment Ministry to defer implementing the NOX emission limits by three years (for coal-based units installed before December 2003).
- For units installed after December 2003, it has requested that it be allowed to operate them at higher NOX emission limit of 600 mg/Nm3 (milligrams per cubic metre) for three years.
- This is because the state-run NTPC Ltd is currently conducting a “pilot study” to test if “NOX control technology” will work for “Indian coal” that has “high ash content”.
- The Power Ministry stated that it will take seven years to “retro-fit” Flue Gas Desulphurisation (FGD) systems — which remove SO2 from exhaust flue gases — in the existing capacity.
Effect of SO2 and NOX emissions
- Short-term exposures to SO2 can harm the human respiratory system and make breathing difficult.
- Children, the elderly, and those who suffer from asthma are particularly sensitive to effects of SO2.
- NOX, too, can trigger “serious respiratory problems”.
- Both SO2 and NOX can be easily oxidised within airborne water droplets to form acid precipitation or ‘acid rain’.
Category: SCIENCE AND TECHNOLOGY
1. ‘Hypertension high in Kerala, low in Bihar’
Context:
- Non-communicable diseases (NCDs) have become a growing threat to global health.
- A recent study done to assess the diet and nutritional status of urban population has pointed out that the increase in incidence of NCDs can be attributed to change in food habits, sedentary behaviour and unhealthy lifestyles, among other risk factors.
- The survey was carried out by National Nutrition Monitoring Bureau during 2015-16 by researchers from the National Institute of Nutrition.
In news:
- Study: ‘Diet and Nutritional Status of Urban Population in India and Prevalence of Obesity, Hypertension, Diabetes and Hyperlipidaemia in Urban Men and Women’,
- Highlights:
- The prevalence rates for non-communicable diseases as well as stunting, under-nutrition and obesity in children under 5 years in the 16 States surveyed are as below:
- Hypertension:
- Kerala has the highest prevalence of hypertension (31.4% women and 38.6% men) as well as high cholesterol in urban men and women.
- Lowest level of hypertension in Bihar (22.2% men and 15.7% women).
- Diabetic:
- Puducherry tops the list of States with the highest prevalence of diabetic men and women (42%), followed by Delhi (36%), Karnataka and Kerala (33% each). Diabetics were the highest in the age group of 60-70 and lowest in the age group of 18-30.
- Obesity:
- The Southern States were among the 10 with the highest prevalence of obesity among urban adults. Puducherry topped with almost 60% women and 42% men being overweight.
- Tamil Nadu was close behind with 54% men and 38% women recorded as obese. Kerala, Karnataka and Andhra Pradesh recorded high levels of obesity among its urban men and women.
- Lifestyle practices:
- Tamil Nadu, Karnataka, Andhra Pradesh and Kerala were among the top six States which had the most tobacco smokers among urban men.
- Underweight Children:
- While U.P. had the highest (43.6%) proportion of underweight children followed by Madhya Pradesh (32.3%), Puducherry had the lowest (14.2%).
2. Many Indians skip nutritious food
Context:
- A nation-wide study carried out by the National Nutrition Monitoring Bureau (NNMB) to assess urban nutrition.
In news:
Highlights:
- A great diversity in food consumption in 16 States in the country
- Indians consume far less than the recommended quantum of several micro-nutrients and vital vitamins.
- Andaman and Nicobar Islands reported the highest intake of flesh foods, including meat and fish, Odisha has the highest consumption of green leafy vegetables (GLV). On an average, while the recommended dietary intake of GLV is 40g/CU/day, the consumption in the country is 24g/CU/day
- Madhya Pradesh has the lowest intake of flesh foods and Kerala consumes the least green leafy vegetables.
- If Madhya Pradesh has a sweet tooth with the highest intake of sugar and jaggery, Odisha and Assam have the highest intake of salt. Rajasthan is high on the intake of fats and oils as well and milk and milk products.
- Disturbing trends: While the average intake of cereals and millets was found to be 320g/CU/day, which is lower than the recommended dietary intake (RDI), the intake of pulses and legumes were about 42g/CU/day. This is on par with the suggested level of the Indian Council of Medical Research (ICMR)
Nothing here for Today!!!
F. Practice Questions for UPSC Prelims Exam
Question 1. With reference to the State Legislative Council in India, which among the
following statements is / are correct?
- The Legislative Council is a continuing House & two-third of the members retire in two years.
- Members of local bodies elect one-third of the total number of members of the legislative council
- If a state legislative council is to be created or abolished , a resolution to that effect is to be first passed by the State legislature by a two-third majority
Choose the correct option from the codes given below:
- Only 1 & 2
- Only 2 & 3
- Only 1 & 3
- 1, 2 & 3
See
Question 2. SHAKTI’, a scheme recently approved by the Union Cabinet, is
- A rural women-empowerment initiative by inculcating in them a habit of savings and proper utilisation of financial resources
- A special loan scheme aimed at supporting entrepreneurship among urban women by providing certain concessions
- A campaign to convince state governments to devolve ‘ownership’ of planning and development functions in panchayat samitis and gram panchayats
- A new coal allocation policy for the power sector
See
Question 3. Consider the following statements:
- Hodaigiri is the harvest dance associated with Reang tribes.
- Jhum cultivation is one of the primary occupations of Reang tribes.
- Majority of Reang population are literates.
Choose the correct statements.
- 1 and 3
- 1 and 2
- 2 and 3
- All are correct
Question 4. The 2017 bilateral maritime exercise “SIMBEX-17” has started between India
and which country?
- Sri Lanka
- South Africa
- South Korea
- Singapore
Question 5. Mixed Cropping is the practice of
- Growing two or more crops simultaneously on the same piece of land.
- Growing crops and rearing livestock simultaneously
- Growing different crops on a piece of land in a pre-planned succession
- Growing fodder crops along with livestock
G. UPSC Mains Practice Questions
GS Paper II
- Has the formation of linguistic states strengthened the cause of Indian unity?
GS Paper III
- What is water-use efficiency? Describe the role of micro-irrigation in increasing the water-use efficiency.
Also, check previous Daily News Analysis
“Proper Current Affairs preparation is the key to success in the UPSC- Civil Services Examination. We have now launched a comprehensive ‘Current Affairs Webinar’. Limited seats available. Click here to Know More.”
Enroll for India’s Largest All-India Test Series


Things I've learned
Internet Basics
HTTP Requests
IP Address
Servers
HTML
stands for
Hyper Text Markup Language
Lots of tags
Boilerplate
Doctype
HTML
Head
Title
Body
Headings
paragraph
em
strong


Fish and Lizard Tanks
Fish Tank
Lizard Tank
White Led
LED outputs
Red Led
???
???
Green Led
Blue Led
???
???


> goes to set up a new publication on Medium
> costs 75 dollars to add your own domain
Guess not then.


Source code for mandelbrot.mandelbrot_alg
"""
This file contains several functions that check whether a value :math:`c` is
part of the Mandelbrot set. The following functions are implemented:
- M: non optimised version
- M_jit: numba-optimised version using the @jit decorator
- M_save_z: numba-optimised version using the @jit decorator that also
returns the last value of :math:`z` before the iteration returns.
The functions are called from the functions in optimisation_methods.py.
The @profile decorator has been added to the non-optimised version of the
Mandelbrot calculation to see what lines of code are heaviest. It turns out
that (on my machine) the if statement requires the most computation, around
38.5% of the total and the calculation of :math:`z` takes aaround 33.2% of the
processing power. From what I see, there is not much we can do to optimise the
code itself further.
For some reason the multiprocessing_mandelbrot.py file does not run when the
profiling functionality is enabled. This is why it is commented out. For
profiling the code, uncomment this section.
"""
from numba import jit, njit, prange
# Took the following from Thomas' example to avoid errors when trying to run
# files
# Can't run multiprocessing_mandelbrot.py if uncommented
# UNCOMMENT THE FOLLOWING FOR PROFILING #### -> <- ####
####
# No-op for use with profiling and test
# try:
# @profile
# def f(x): return x
# except:
# def profile(func):
# def inner(*args, **kwargs):
# return func(*args, **kwargs)
# return inner
# @profile
####
[docs]def M(c, I = 100, T = 2):
"""
Function :math:`\\mathcal{M}(c)` implementing the iterative algorithm to
determine whether a complex number :math:`c` is part of the Mandelbrot
set. The iterative algorithm is:
:math:`z_{i+1} = z_i^2 + c`
with complex number :math:`z` and iteration number :math:`i`.
If, after :math:`I` iterations :math:`|z|` has not crossed threshold
:math:`T`, :math:`c` is part of the Mandelbrot set and the function
returns
:math:`\\mathcal{M}(c) = 1`.
If instead, :math:`|z|` has crossed the threshold, the function returns
:math:`\\mathcal{M}(c) = \\frac{i+1}{I}`.
The lower this number is, the earlier :math:`|z|` has exceeded the
threshold and the more unstable :math:`c` is to the iterative algorithm.
INPUT::
c : complex float
Starting point of iterative algorithm.
I : number of iterations
Number of iterations.
T : float
Threshold value.
OUTPUT::
A floating point value between 0 and 1. The closer to 0 the return
value is, the earlier |z| has crossed threshold T and thus the more
unstable c is to the iterative algorithm
"""
# initialise z
z = 0
# main loop
for i in range(I):
z = z*z + c
# If the magintude exceeds the threshold return the ratio of the
# current iteration and the total.
if abs(z) > T:
return(i+1) / I
# if |z| has not exceeded threshold T, return I / I = 1
return 1
[docs]@jit
def M_jit(c, I = 100, T = 2):
"""
Identical function to M(c, I, T) (function above) but with the jit decorator
"""
# initialise z
z = 0
# main loop
for i in range(I):
z = z*z + c
# If the magintude exceeds the threshold return the ratio of the
# current iteration and the total.
if abs(z) > T:
return(i+1) / I
# if |z| has not exceeded threshold T, return I / I = 1
return 1
[docs]@jit
def M_save_z(c, I = 100, T = 2):
"""
Identical function to M_jit(c, I, T), but also returns the current value
for :math:`z`. Used by plot_z_values.py.
"""
# initialise z
z = 0
# main loop
for i in range(I):
z = z*z + c
# If the magintude exceeds the threshold return the ratio of the
# current iteration and the total.
if abs(z) > T:
return z, (i+1) / I
# if |z| has not exceeded threshold T, return I / I = 1
return z, 1


Loading
Well Done
You Finished In :
00:00
Try Again?
- Turn over any two cards
- If the two cards match, keep going
- If they don't match, they will turn back over
- Remember what was on each card and where it was
- The game is over when all the cards have been matched


City Blocks
This notebook shows how we can properly build city blocks for urban areas. City blocks are the areas surrounded by streets. We use the OpenStreetMap to get the road network of an area.
To run this notebook, in addition to tesspy
, you need contextily
for basemap visualization. This package is only used to enhance visualization and has no effect on tessellation.
Area
We use the city of Liverpool in the United Kingdom as a case study.
[1]:
from tesspy import Tessellation
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 100
plt.rcParams['figure.figsize'] = (8,8)
import contextily as ctx
from time import sleep
[2]:
# Create a tessellation object
liverpool=Tessellation('Liverpool, United Kingdom')
# get polygon of the investigated area
liverpool_polygon = liverpool.get_polygon()
[14]:
# visualization of area
ax= liverpool_polygon.to_crs('EPSG:3857').plot(facecolor='none', edgecolor='tab:red',lw=3)
ctx.add_basemap(ax=ax, source=ctx.providers.CartoDB.Voyager)
ax.set_axis_off()
ax.set_title('Liverpool, United Kingdom', fontsize=15)
plt.show()
Street types
There are different types of streets defined by the OSM. We have listed this from top-level to low-level. This list can be seen by using the statis method .osm_highway_types()
. By using the keyword detail_deg
, we can specify how detailed we want to get road network data from the OSM starting from the top category of the list. detail_deg
can be between 1 and 19.
[12]:
liverpool.osm_highway_types()
[12]:
['motorway',
'trunk',
'primary',
'secondary',
'tertiary',
'residential',
'unclassified',
'motorway_link',
'trunk_link',
'primary_link',
'secondary_link',
'living_street',
'pedestrian',
'track',
'bus_guideway',
'footway',
'path',
'service',
'cycleway']
For example, for a rough tessellation we can use only the top 5 road (highway) types which are: motorway
, trunk
, primary
, secondary
, and tertiary
.
[20]:
liverpool_cb_deg5 = liverpool.city_blocks(n_polygons=None, detail_deg=5)
[21]:
ax= liverpool_cb_deg5.to_crs('EPSG:3857').plot(facecolor='none', edgecolor='k', lw=0.5)
liverpool_polygon.to_crs('EPSG:3857').plot(ax=ax, facecolor='none', edgecolor='tab:red',lw=2)
ctx.add_basemap(ax=ax, source=ctx.providers.CartoDB.Voyager)
ax.set_axis_off()
ax.set_title('Liverpool, United Kingdom\n City Blocks: Top 5 Highway Types', fontsize=15)
plt.show()
Creating city blocks
If we use most of the road network data, we end up with many small polygons. Some of which are not even much meaningful, e.g., traffic islands. Therefore, we cluster the small polygons (using hierarchical clustering) and merge them into larger polygons. This way, we can generate more realistic city blocks. In addition, we can generate an arbitrary number of city blocks by tuning the number of clusters by n_polygons
.
If we only use the top-level road types, we may not need to cluster the polygons. In this case, as seen above, we can pass None
to n_polygons
.
In the first example, we can use all the road data to generate city blocks without clustering or merging them. First, let’s see how many polygons it creates and what it looks like:
[22]:
liverpool_cb_all = liverpool.city_blocks()
[25]:
ax= liverpool_cb_all.to_crs('EPSG:3857').plot(facecolor='none', edgecolor='k', lw=0.1)
liverpool_polygon.to_crs('EPSG:3857').plot(ax=ax, facecolor='none', edgecolor='tab:red',lw=2)
ctx.add_basemap(ax=ax, source=ctx.providers.CartoDB.Voyager)
ax.set_axis_off()
ax.set_title('Liverpool, United Kingdom\n City Blocks: Entire Road Network\nAll Polygons', fontsize=15)
plt.show()
[27]:
print('Number of polygons: ' ,len(liverpool_cb_all))
Number of polygons: 11868
This resulted in more than 10,000 polygons. So it makes sense to cluster and merge these polygons. With repeat the same process. This time we set n_polygons
to be 500:
[29]:
liverpool_cb_all_500 = liverpool.city_blocks(n_polygons=500)
[35]:
ax= liverpool_cb_all_500.to_crs('EPSG:3857').plot(facecolor='none', edgecolor='k', lw=0.2)
liverpool_polygon.to_crs('EPSG:3857').plot(ax=ax, facecolor='none', edgecolor='tab:red',lw=2)
ctx.add_basemap(ax=ax, source=ctx.providers.CartoDB.Voyager)
ax.set_axis_off()
ax.set_title(f'Liverpool, United Kingdom'
'City Blocks: Entire Road Network'
f'nClustered: {len(liverpool_cb_all_500)} Polygons', fontsize=15)
plt.show()
These polygons look much better. We can use these in further spatial analyses.
To see the difference more clearly, we investigate a small cross-section of Liverpool:
[54]:
# Create a tessellation object
ev=Tessellation('Everton, Liverpool, UK')
# get polygon of the investigated area
ev_polygon = ev.get_polygon()
[62]:
# visualization of area
ax= ev_polygon.to_crs('EPSG:3857').plot(facecolor='none', edgecolor='tab:red',lw=3)
ctx.add_basemap(ax=ax, source=ctx.providers.CartoDB.Positron)
ax.set_axis_off()
ax.set_title('Everton, Liverpool, United Kingdom', fontsize=15)
plt.show()
[60]:
ev_cb_all = ev.city_blocks()
ev_cb_all_100 = ev.city_blocks(n_polygons=100)
[61]:
fig, axs= plt.subplots(1,2 , figsize=(10,6))
ev_cb_all.to_crs('EPSG:3857').plot(ax=axs[0], facecolor='none', edgecolor='k', lw=0.5)
ev_cb_all_100.to_crs('EPSG:3857').plot(ax=axs[1], facecolor='none', edgecolor='k', lw=0.5)
axs[0].set_title(f'All Polygons')
axs[1].set_title(f'Clustered: {len(ev_cb_all_100)} Polygons')
for ax in axs.flatten():
ax.set_axis_off()
ctx.add_basemap(ax=ax, source=ctx.providers.CartoDB.Positron)
ev_polygon.to_crs('EPSG:3857').plot(ax=ax, facecolor='none', edgecolor='tab:red',lw=2)
plt.tight_layout()


Barrett 2013
Rodriguez 2014
Taunton 2014
Zhao 2017
Zhang 2018
Overall (l—squared = 0.0%, p = 0.670)
P=0.709
NOTE: Weights are from random effects;


Release (releaseid)
ocid (ocid-1) MOOOO
Planning
Rational: the big plan
Awards
(Award award-1)
Amount gbp 1000
(Award award-2)
Amount gbp 2000