--- layout: archive title: Zulip Chat Archive permalink: /stream/144837-PR-reviews/topic/.2385.20monotonicity.html ---
@Mario Carneiro @Johannes Hölzl: what is missing on this PR?
Is it correct that there is some overlap with linarith
in use cases? (I'm just trying to get a feel for what this is doing.)
In the cases where no arithmetic or little arithmetic is involved, yes, that's true. It also works with any relation you want
The overlap is just enough that if you have a long chain of monotonicity, you don't have to drop mono
in the middle to use linarith
what I like is that it works with different relations. But I think we want a more general rewrite. Where congruence rules are added in a database for arbitrary relations. And then I just say grw [r1, r2, r3]
. maybe even trying to match modulo AC?
I like the idea but I'm hesitant. One benefit of calling mono
directly is that, unlike with rewrite, with orderings, only one direction works.
yes, the relation may not be symmetric, or reflexive or even transitive. And with symmetry for rewrite its only a special case for <- r
. For rewriting its more important that the relation is reflexive, and for simp
that it is transitive.
In terms of usability I think it goes further. If you have h : x ≤ y
and you want to rewrite a ≤ b - x
, only rw <- h
is available.
This works with generalized rewriting. The congruence rules would be:
((≥) ⇒ (≤) ⇒ (→)) (≤) (≤) i.e. a' ≥ a → b' ≤ b → (a' ≤ b' → a ≤ b) ((≤) ⇒ (≥) ⇒ (≤)) (-) (-) i.e. a' ≤ a → b' ≥ b → (a' - b' ≤ a - b)
So the <- h
translates to a flip of the actual relation.
This is by the way how transfer
works, just that it doesn't apply a rewrite step, but tries to build up the relation proof exhaustively (hoping that it has rules for all constants and variables)
I like the idea. It is quite a bit different from what I implemented and I would rather do it as a separate project
Survery: do you (the reviewers) prefer for the attribute to be named monotonic
or mono
?
monotonic
(on the unpopular principle that abbreviations are always a bad idea)
The tactic's name is mono
though so do you think it's also a bad idea?
if possible the tactic and attribute should have the same name. I prefer mono
over monotonicity
due to its length, and for me mono
is clearly monotonicity
monotone, monomorphism, monoid, monomial, monopole
I vote mono
. The shorter the name of a tactic is, the more awesome it sounds
... but I have never understood the desire to abbreviate (or rather, I think I understand the stated desire, to require fewer keystrokes and to fit more content per pixel, but don't think it's a valuable outcome)
I'd prefer things to be clear, rather than just clear from context.
tactics with short and cryptic names like omega
and auto
seem to be quite popular
it makes them more "name-like" rather than "decription-like"
but that is because they are useful!
as in "use the mono tactic" rather than "use the tactic that does monotonicity reasoning"
/- the result now follows -/ by monotonicity
But again, I understand that no one is interested at this point in writing literate proofs.
But again, I understand that no one is interested at this point in writing literate proofs.
Why do you believe that?
No, I mean literally name like, as in Joe or Sue
I think it makes the language more colourful
because I don't think you should take too seriously the "description-like" aspect of a tactic name anyway
for a given tactic you will usually want to know exactly what it does and the description itself always falls short
I do appreciate this point.
if it's just a name, then you just get used to the foibles of that tactic
But again, I understand that no one is interested at this point in writing literate proofs.
Why do you believe that?
Because I've never seen anyone try to write one? I considered trying to make the proof of the infinitude of primes in mathlib 'literate', but went on to other things.
looks like Neil beat you to it
Oh, I didn't see.
http://neil-strickland.staff.shef.ac.uk/dagstuhl/Systems/Lean_mathlib/Tasks/primes/
I would like to see what you would add or change, you've done a few presentations with this proof now
Well, I think it's important to have everything in a single text file, even if there are tools to extract "human" and "cryptic Lean" available.
it looks like neil invented his own version of coqdoc, with popout text
I would hope that from same text file that we produce the olean
file, we can also extract the following text:
We take p to be the smallest prime factor of N!+1.
First, we need to show that p is prime; this is immediate from the definition of the smallest prime factor, as long as we know that N!+1 is greater than one. (This follows since N! is at least one, so N!+1 is greater than one.)
Next we show that p > N. We prove this by contradiction, so we assume p <= N. We observe that p | N! + 1, and p | N!. The first follows since p was chosen as a prime factor of N!+1. The second follows as 1 <= p <= N, and any such number divides N!. Combining these two facts, we have that p | 1. (This is just the fact that if n | a and n | a+b, then n | b.) We showed earlier that a prime cannot divide one, giving the desired contradiction.
I think this text very faithfully follows the proof given in mathlib.
Now, it is unclear to me whether that text should appear in the lean
file.
But if it doesn't, that's only because we'd have written some tool that could _generate_ that text from the Lean source.
Generating an approximation of that text is not at all crazy, I think.
that text is in the lean file
Even better would be that that text is what appears in the Lean file, and the "lean source" is extracted from it ...
What do you mean?
click on the show raw text button
Okay, yes, I understand. It's great that Neil has written a prototype tool for leandoc
. Now we need to think about what lean sources should look like with leandoc
available.
Obviously they should not have html in the comments, but markdown.
But maybe what Neil has written is an excellent start.
On the subject of mono
, do we agree that if the tactic is called mono
, mono
is also a good name for the attribute?
Last updated: Apr 24 2020 at 19:02 UTC


VIEWS 221 Marko Djurdjevic Berlin, Germany artstation.com/sixmorevodka Medium Digital & Traditional Illustration
VIEWS 29 Wesley Burt California, USA artstation.com/wesleyburt Medium Digital & Traditional Illustration
VIEWS 132 Yernat Mukhanzharova Pavlodar, Kazakhstan artstation.com/emilyena Medium Digital Illustration


--- layout: post title: "My Week in Review" date: 2019-05-05 14:49:00 +0000 image: https://s3.amazonaws.com/audreywatters/2019-05-05-seattle.jpg imagecredits: https://www.flickr.com/photos/ian-arlett/30123960255 ---
This week didn’t feel as amazing as last week, although I am still hammering out a complete chapter every 4 days. Part of my current frustration involves turning a section that doesn’t have a strong narrative into one.
I had a conversation early in the week with Ben Riley to help him do a little “debate prep” for an upcoming venture capital conference.
Icon credits: The Noun Project


GRIMO
Home
Services
Works
GRIMO
Sermons
Events
Contact
Text page
Use this subpage for text, about us page, and more.
Bug Details
Fill Out The Bug Details Below
Bug Title
Start Date
Due Date
Bug Description
Priority
High
Medium
Low
Bug Status
In Progress
Pending
QA Assigned
UAT Release
Add Developer
Leonard Adleman
Bill Atkinson
Richard Brodie
Shubham Vyas
You accept our terms and conditions.
Submit


- CSS Basic
- CSS Introduction
- CSS Syntax
- CSS How To
- CSS Background
- CSS Text
- CSS Font
- CSS Border
- CSS Outline
- CSS Margin
- CSS Padding
- CSS List
- CSS Table
Save a lot of work with CSS!
In our CSS tutorial you will learn how to use CSS to control the style and layout of multiple Web pages all at once.
Start learning CSS!Learn by 70 examples! With our editor, you can edit CSS, and click on a test button to view the results.
Try-it-yourself!At W3School you will find a complete CSS2 reference, listing properties, units of measurements, colors and more.
CSS2 ReferenceTest your skills at W3Schools
Start CSS2 Quiz!


--- layout: default title: Lily-Thérèse Walla - Contact ---
If you have a diverse team with strong mentorship that could use a full-stack human, then we should talk.
Please contact me for your next project.


--- layout: post status: publish published: true title: WBC/Spring Training Notes author: display_name: Andy login: Andy email<EMAIL_ADDRESS>url: '' author_login: Andy author_email<EMAIL_ADDRESS>wordpress_id: 348 wordpress_url: http://ivyenvy.com/?p=348 date: '2009-03-08 17:42:25 +0000' date_gmt: '2009-03-08 17:42:25 +0000' categories: - General Baseball - Offense - Relief Pitching - Starting Pitching - Former Cubs tags: - Alfonso Soriano - Brewers - Carlos Marmol - Carlos Zambrano - Kosuke Fukudome - Mark Derosa - Reed Johnson - Ted Lilly - Jake Peavy - World Baseball Classic - David Patton comments: - id: 145 author: Kurt author_email<EMAIL_ADDRESS>author_url: http:// date: '2009-03-09 08:14:46 +0000' date_gmt: '2009-03-09 14:14:46 +0000' content: "I know Reed's chin music is getting pretty robust, but Chad Gaudin is giving him a run for his money. Those things growing on their faces remind of that little weight watchers hunger monster. Watch the commercial again and imagine it's Cubbie facial hair that's jumped off a face and is trying to feed you junk food.\r\n\r\nhttp://www.youtube.com/watch?v=K1ytP9oazCo" - id: 148 author: Ted Lilly Fan Club author_email<EMAIL_ADDRESS>author_url: http://tedlillyfanclub.blogspot.com date: '2009-03-16 08:46:53 +0000' date_gmt: '2009-03-16 14:46:53 +0000' content: "Couldn't agree more...It's redemption time tomorrow night for TL and Team Democracy. \r\n\r\nFire it up? Absolutely. \r\n\r\nYours in TMFL." ---
Yesterday I settled in for nice long day of baseball. The World Baseball Classic was on, and the Cubs-Brewers matchup was actually being televised as well. It was going to be a good day, and not surprisingly, the WBC games ended up being the most exciting part of the day.
Cubs-related moments--
-Marmol pitched pretty well. He showed a little bit of wildness in his one-inning outing, but he settled in nicely, striking out three straight after hitting the first batter he faced. He looked like he had a very live arm; his fastball had good velocity and he had some good movement on his breaking pitches. He still has to have the closer spot locked down over Goggles McFirstnames.
-I saw a couple shots of DeRosa and Lilly hanging out in the dugout and got a little sentimental. Peavy struggled a little in his start, and I found myself wishing that TMFL would've started instead.
-Soto played pretty well in PR's first game. Though he did strand some runners, he also drove in a run and drew a walk. It was strange to see him as DH and not behind the plate calling the game.
-Fukudome has walked four times in two games, and that's about all I have to report on him. I wish that guy would start hitting.
The good parts of the Cubs-Brewers game:
-It was a chance to see many of the Cubs young pitchers, and they looked pretty good overall; they didn't give up any runs after Zambrano left the game, and David Patton pitched especially well.
-That's about it.
The bad parts of the Cubs-Brewers game:
-The Cubs have now dropped 7 out of their last 8 spring training games after their strong start.
-Reed Johnson's facial hair is more robust than ever. It is a slight improvement over the way-too-manicured chin strip (emphasis on "slight").
-Soriano can still be pretty annoying to watch. He can also be pretty exciting to watch, but that side of him didn't show up too much yesterday.
-The lack of offense.
And I'm spent.


Like SpaceX and Platzi? look launches info, for Platzinautas like you!
Interested in see video, date and other info? see More details


Patrick Connolly
02.15.17
After 13 years as Ohio University’s 20th president, I now understand something that few others do — no one individual embodies the office of a university president. Sure, one person is the face and the name behind the title; but the actions that the president takes and the decisions which he or she makes are the product of a more collective effort. The needs and the desires of every student enrolled or person employed at Ohio University as well as the needs and desires of former and future Bobcats are weighed and discussed. Balancing all those needs has always been a real labor of love.
I will forever be grateful to those tireless faculty and staff whose passion for higher education rivaled my own and who spent countless hours chartering the future course of Ohio University alongside me. I will forever remember the laughs with students and the tears shed as they walked across the stage at commencement.
“The circumstances will change as our world continues to evolve, but for 213 years, our academic mission for excellence has never faltered.” President Roderick McDavis
As I prepare to leave my office in Cutler Hall, I look around at the boxes, now-empty shelves and the bare walls. The Office of the President is prepared for a new person to take on the title, but I know that those influences that drive the next president’s decisions still remain. The circumstances will change as our world continues to evolve, but for 213 years, our academic mission for excellence has never faltered. We will always remain true to our values. I am excited for the future that lies ahead for this fantastic University.
Thank you for allowing me to serve as your 20th president. It has been the greatest honor of my life. Continue to reach for your highest star!
Roderick McDavis is the president of Ohio University. His last day is Feb. 17.
Landing Page
OU President Roderick McDavis is leaving February 17. The Post looks back at his time as Ohio's president. Click this box to read the rest of the stories from this issue.


'Decision to make' - What Philip Cocu, Wayne Rooney and Mel Morris have said ahead of England legend's arrival
Wayne Rooney latest | What have Philip Cocu, Wayne Rooney, Mel Morris and others have said ahead of the England legend's arrival at Pride Park
by Tom LeachThe wait for Wayne Rooney's arrival at Derby County is almost at an end.
England's all-time leading goalscorer can pull on a Rams jersey from the January 2 meeting with Barnsley - and he has already trained with the first team at Moor Farm.
His long-awaited Championship spell will see him compete in England's second tier for the first time -but what have he, his peers and the key Derby figures said about Rooney's imminent arrival?
Wayne Rooney
"The opportunity to come back here and play and take the next transition in my career was one factor," said Rooney, who has signed an 18-month deal.
"I will keep playing until my body says I can't any more. I feel good.
"We've got four young boys and certainly for my oldest it is a crucial time in his schooling," he added. "[But] it wasn't just about coming home.
"I had a decision to make and the decision to come and play here in England and develop as a coach with [Derby manager] Phillip Cocu was too good to turn down.
"Firstly, I'm a player and feel I have a lot of quality to bring to the squad. But, secondly, I want to learn from Phillip and his staff to gain experience for when I take the next step."
Philip Cocu
"If you look at our team, I think what we need is this type of a character and player who is involved in how we think as coaches and as a manager, how we want to play and how to keep the team together in certain periods of the game.
"For example, at Hull (where Derby lost 2-0), the last part of the game when we conceded, I think we can avoid it when we have somebody who has a lot of experience.
"He (Rooney) can reach other players during the game, and that is one of the most difficult things in football.
"I think it will be very helpful in many ways - for the team, for the young players, for us as coaches and manager - to have a player who can be the link between the players and the way we like to work and play.
"His influence during the games can be a very important part as well as his quality as a football player."
Stephen Warnock - ex-Rams defender
“I don’t think he’ll struggle at all. You only have to look at DC United. When he went in there they were struggling, they hadn’t won a game in a long time. He went in, set the standards in and around the training ground," he told talkSPORT.
“There was a story very early on, on his first or second day, he told people to do their work better, standards needed to be higher.
"So, I think that’s what you get from players who’ve played at a world class level and played at the level he’s played at, they’re infectious in what they do in setting high standards and they expect others to be the same as well.
"So, I don’t think that’ll be an issue for him.
“I think he’s gone over to America and proven that he’s still very fit and still very hungry," said the former Liverpool, Aston Villa and England full-back.
“He’s at a stage in his career where he knows he can play in a deeper lying role. But he’s even shown out in America that he can still play up top and still score and assist plenty of goals too.
“So, from Derby’s point of view to have him there on the pitch is a massive asset in the second half of the season.
“You’ve got to embrace him coming in and you’ve got to want to give him the ball. You’ve got to want to learn off him in training, watch what he does in training.
"Listen to him because he’ll know things that other players won’t know, especially the younger lads, so he’ll have a voice for them. You’ve got to listen to people like Wayne.”
Mel Morris - Derby County owner
"It is a fantastic opportunity for the club. I think also for Wayne too.
"He is keen to finish his playing career at some points and to transition into management so it is an opportunity for us to get a world class player in to help on the grass but also to help with a coach.
"He will join on an 18-month contract with the option for the club to extend for a further year.
"His coaching will continue. Wayne is very keen to accelerate the rest of his coaching badges and I think a big part of this was the attraction to work along side Philip Cocu."
He continued: "I think the time that Frank (Lampard) had here has been extremely valuable to us. We loved the season with Frank and we would have loved to have had another one.
"We handled the situation of his move to Chelsea by wishing him the best, which was very heartfelt, and I think that show the world how we are very people centric and that has had a big impact on Wayne.
"Before Frank maybe this wouldn't have happened and I think getting Philip Cocu on board was vital.
"If you want to be a coach then you want to work with someone with a brilliant track record."
Derby County latest
This is your round up of all things Derby; the one-stop shop that will keep you updated on the latest goings on at Pride Park and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Rams throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- January targets - this is where Derby County boss Phillip Cocu is likely to strengthen
- 'Ambition' - That Feyenoord link, Phillip Cocu and his plans for Derby County
- Euro kings hammered, Goddard and Saunders shine, and it's all smiles for Derby in Italy
- 'We have been looking' - latest on new investment plans for Derby County
- 'Wanted list' - Steve Nicholson's take on Derby County's link to Luciano Acosta
- Scottish duo set to battle for transfer of former Derby County defender - reports
For all your latest Rams news, opinion, analysis and transfer gossip, click here
You can follow our Rams reporter Steve Nicholson on Twitter, and his email address is Stephen.Nicholson@reachplc.com


Meet Joe Black (Reviewed on Nov. 27/98)
Starring Brad Pitt, Anthony Hopkins, Claire Forlani
In "Meet Joe Black", Brad Pitt plays Death.
That's all that really needs to be said, but nevertheless, I will provide the three of you that have seemingly been living in a cave with a plot description. Death decides to take a holiday, what with all the rigors of soul-collecting and all, and forces Anthony Hopkins into showing him what it's like to be human. Death assumes the body of Brad Pitt, and from there, much trouble ensues.
For one thing, Death-as-Pitt falls in love with Hopkins daughter, played by Claire Forlani. Obviously this enrages Hopkins, because really, what can Death offer? Besides eternal damnation, of course. There is also a sub-plot about Forlani's ex-boyfriend (she dumps him for Pitt) trying to take over Hopkins company.
"Meet Joe Black" runs just under three hours. I've always thought that such obscene running times should be limited to historical epics. "Meet Joe Black" is neither historical nor is it an epic, though I get the feeling Martin Brest (the director) desperately wants it to be. Every single scene in the movie goes on about 3-4 minutes too long.  A severe editing job could have made this movie excellent, instead of just good, which is what it is.
Pitt, an actor I normally loathe, is actually quite engaging as Death. I believed his performance, and I could see why Forlani's character would fall in love with him. I have to agree with Roger Ebert, though, who found it hard to believe that an entity that's been around for all time wouldn't know what peanut butter was. That has nothing to do with Pitt's performance, of course, but it is a little distracting.
Hopkins gives his usual excellent performance. He's able to portray the angst of a man who knows he has very little time left, without making him an obnoxious whiner. And in her first major studio role, Claire Forlani is surprisingly good. She has a sweet tenderness that allows the audience to instantly root for her.
So, "Meet Joe Black" is a good movie hampered by it's ridiculous running time. Had the film been cut by an hour or so, I have no doubt that I would be calling it one of the best movies of the year in this review.
*** out of ****
-- David Nusair<EMAIL_ADDRESS>Come visit my "Reel Film Reviews" site! "http://chat.carleton.ca/~dnusair"
"The most annoying questions are the hypothetical, like, `what would have happened if you had quit after Siamese Dream?' Well, what would have happened? Probably, we all would have been playing samba somewhere." -Billy Corgan
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


Blender Market's biggest sale of the year! [$]
pavla writes:
25% OFF 900+ addons, assets & training
Blender Market's biggest sale of the year is live! This Black Friday through Cyber Monday, shop the biggest selection of Blender goodies 25% OFF.
What not to miss: the sale includes some of Blender Market's absolute bestsellers like Blender Guru's Grass and Rock Essentials and his Pro-Lighting series (up to $49 off).
The Market's staples like Retopoflow, HardOps/Boxcutter or the liquid simulator FLIP Fluids are also on sale.
Browse the bestsellers here.


{% extends "layout.html" %} {% block page_title %} Example - Passing data {% endblock %} {% block content %} {% include "includes/breadcrumb_examples.html" %} Which of these applies to your vehicle? (Select all that apply) Which of these applies to your vehicle? (Select all that apply) Heated seats Radio Suspension {% endblock %}
Which of these applies to your vehicle? (Select all that apply)


{% include header.html %} <<<<<<< HEAD ======= >>>>>>> dac0e336d9d08366f2cdc75498a66fcb0eedf0fb {% include navbar.html %}


Trump Administration Approves Sale of $1 Billion Worth of Naval Guns to India
India will use the enhanced capability as a deterrent to regional threats and to strengthen its homeland defence, it said.
Washington: The Trump Administration has notified to the US Congress its determination to sell $1 billion worth of naval guns to India for use against warships, anti-aircraft and shore bombardment, in a move that would enhance the lethal capabilities of the Indian Navy.
The proposed foreign military sale of up to 13 MK-45 5inch/62 caliber (MOD 4) naval guns and related equipment is at an estimated cost of $1.02 billion, Defense Security Cooperation Agency said in its notification to the Congress on Tuesday.
To be manufactured by the BAE Systems Land and Armaments, the proposed sale will improve India’s capability to meet current and future threats from enemy weapon systems, the notification said.
“The MK-45 Gun System will provide the capability to conduct anti-surface warfare and anti-air defence missions while enhancing interoperability with US and other allied forces,” the notification said.
India will use the enhanced capability as a deterrent to regional threats and to strengthen its homeland defence, it said.
The proposed sale of this equipment and support will not alter the basic military balance in the region, it said.
According to the notification, this notice of a potential sale is required by law and does not mean the sale has been concluded.
With this, India has become one of the few countries that the US decided to sell its latest version (Mod 4) of its naval guns.
The other countries to have been sold with MOD 4 naval guns so far are Australia, Japan and South Korea. The one given to Thailand is an upgraded MOD 4 version. The US has also determined to sell these to a few other allies and friends including Britain and Canada.
For breaking news and live news updates, like us on Facebook or follow us on Twitter and Instagram. Read more on India Latest News on India.com.
Story Timeline
- 02 Nov 2019 Public Hearings in Impeachment Enquiry Against Donald Trump Expected This Month, Says Nancy Pelosi
- 01 Nov 2019 'ISIS Has a New Leader...': Donald Trump Says US Knows it All
- 01 Nov 2019 Brexit: US President Donald Trump Criticises UK PM Boris Johnson Over EU Divorce Deal
Comments - Join the Discussion


--- title: Shekhar Prasad Rajak layout: default ---
Welcome to my blog. This is for sharing my personal thinking, beautiful experiences and memories.
Resume: Download | Twitter | | Github | Facebook | LinkedIn | Instagram
I have contributed to multiple Open Source Projects which is written in Python, Ruby, Angular, Go & Swift. In Corporate career most of the projects used Java, Python, designing distributed system and managing large set of data using data science tools. Other than that I've good experience in Cloud native technologies & migrating application into cloud using Docker, Kubernetes and SRE tools like: Ansible, Splunk, Grafana.
This is related to my Open Source Contribution in SymPy organization before and after the GSoC 2016.


Scientific References:
-
GROISMAN, P.Y., et al. 2004. Trends in Intense Precipitation in the Climate Record.
JOURNAL OF CLIMATE Volume 18, 1326-1350.
-
Karl, T.R. and R.W. Knight. 1998. Secular Trends of Precipitation Amount, Frequency, and Intensity in the United States.
Bulletin of the American Meteorological Society 79, 231–241.
-
Nearing, M.A., et al. 2005. Modeling response of soil erosion and runoff to changes in precipitation and cover.
Catena 61, 131-154.
-
Nearing, M.A., F.F. Pruski and M.R. O'Neal. 2004. Expected climate change impacts on soil erosion rates: A review.
Journal of Soil and Water Conservation Volume 59, Number 1, 43-50.
-
Pruski, F.F. and M.A. Nearing. 2002. Climate-induced changes in erosion during the 21st century for eight U.S. locations.
Water Resources Research Volume 38, Number 12, 34/1-34/11.
-
Pruski, F.F. and M.A. Nearing. 2002. Runoff and Soil-Loss Responses to Changes in Precipitation: A Computer Simulation Study.
Journal of Soil and Water Conservation Volume 57, Number 1, 7-16.


StaticWebsite
Home
About
About Page
This is the about.cshtml
Employees
Alfred (Manager)
Sarah (Accountant)


Home
News
Heat Map
Learn More
Events
Input Data
Login
Article title
Article Preview
Article title
Article Preiew
Article title
Article Preview.


Choose an interstitial
SSL
example.com
SSL (google.com)
example.com (Overridable)
Clock is ahead
Clock is behind
SafeBrowsing
Malware
Phishing
Client Side Malware
Client Side Phishing
Captive Portal
google.com (Captive Portal, Non-Wifi)
google.com (Captive Portal, on some Wifi)
google.com (CaptivePortal, on wifi "CoffeeShopWifi")


Libraries extend the functionality of the Google Maps APIs by adding new features, implementing common design patterns, or making some tasks a little easier. The libraries listed on this page are all open source, and have been written by the Google Developer community. If you've worked on a library for the Maps API, we invite you to add your project to the list.
Google Maps JavaScript API
| Library |
Summary |
| canvaslayer |
A library for adding a <canvas> layer to a Google Maps JavaScript API v3 map, and a small API for efficiently visualizing data using the 2d canvas API or WebGL. Please note, this project is not maintained by Google. |
| geolocationmarker |
A library for adding a marker which tracks a user's location with an accuracy circle. Please note, this project is not maintained by Google. |
| googleearth |
A library integrating the Google Earth API with the Google Maps JavaScript API v3, rendering most map overlays appropriately in the 3D plugin. |
| infobubble |
A InfoBubble is a customizable CSS info window. |
| maplabel |
A library that adds well-styled, customizable text to a particular location in a Google Maps JavaScript API v3 map. |
| markerclusterer |
A Google Maps JavaScript API v3 library to create and manage per-zoom-level clusters for large numbers of markers. |
| richmarker |
A library for using arbitrary DOM elements as map markers in the Google Maps JavaScript API v3. |
| storelocator |
This library enables developers to easily build store locator-type applications using the Google Maps JavaScript API v3. |
Google Maps Android API
| Library |
Summary |
| android-maps-utils |
A multipurpose library that adds support for marker clustering, heat maps, custom marker text, polyline encoding/decoding and spherical geometry. |
Google Maps SDK for iOS
| Library |
Summary |
| The Google Maps SDK for iOS |
A multipurpose library that allows you to embed Google Maps, Street View, Indoor Maps, and much more inside your native iOS application. |
| OpenInGoogleMaps-iOS |
A helper class that makes it easy for an iOS app to open a map, Street View location, or set of directions in Google Maps, or in another app if the user does not have Google Maps installed. Does not require the Google Maps SDK. |
| google-maps-ios-utils |
A multipurpose set of utilities to support applications using the Google Maps SDK for iOS. |
Client libraries for Google Maps Services
Client libraries for enabling access to the following Web Services API endpoints:
- Directions API
- Distance Matrix API
- Elevation API
- Geocoding API
- Places API
- Roads API
- Time Zone API


--- layout: newsstory title: DISAPPOINTING match: Yeltz 1 Mangotsfield 1 ---
We've got used to winning in the league recently - especially at home - so it's a bit disappointing only to draw 1-1 against Mangotsfield. We took the lead in the second half through a Michael Crawford goal, but couldn't hold on to the lead. We've slipped to 4th in the table , but still can go top if we win our games in hand.
Tuesday brings old rivals Hednesford to The Grove in the B'ham Senior Cup, but don't forget the meeting about the proposed supporters' fund on Monday (19th) in the clubhouse at 8pm.
Nice to see Canvey beating Wigan in the FA Cup, and also Barrow drawing at Oldham. Puts our performances in some sort of perspective, but it still would have been nice to win today :-)
Halesowen Town: Clarke; Colwell, Crawford, N. Smith, Burnham, Skidmore, Hall, Jones, Giddings (G. Smith 81), Taylor, Hines. Subs: Gray, R.Collins
Mangotsfield Utd: Dyson; Pendry, Hallett, Barlass, Russell, Loydon, Sims, Summers, Claridge (Allen 81), Edwards, Winter (Nicholls 81). Sub: Penny
Referee: M. Lever (Leicester) Attendance: 506 Booked: None
Halesowen had to wait until the 75th minute to break down plucky Mangotsfield, but then threw away their narrow lead just four minutes later.
Tim Clarke saved an 8th minute flick from Robert Claridge before Halesowen came strongly into the game. In the 9th minute Matty Hall made a tremendours run against the defence and put Andy Jones clear, but his effort rattled off the crossbar. A minute later Lee Barlass headed a cross by Les Hines over his own bar. From the resulting corner a cross from Hines drifted right across the goalmouth without gaining a final touch.
However, Mangotsfield were more than a match for Halesowen and had some good chances of their own. Clarke was fortunate when he was able to recover after Adam Sims had rounded him but then stumbled in the 18th minute. Kerry Giddings had a rasping shot saved by visiting goalkeeper Dave Dyson in the 23rd minute and Michael Crawford saw a free header easily cleared off the line five minutes later. Giddings then hit a 30th minute volley which was blocked by a packed Mangotsfield defence.
Halesowen had another let off in the 33rd minute when Clarke came out of his area and his clearance ricocheted off a forward into the path of Darren Edwards, but he volleyed wide of an empty net from the edge of the area.
Early in the second half a shot from Sims fell kindly to Lee Barlass but he hit high from 8 yards out. Halesowen made little impression at this stage although Dyson cleaned up when Giddings latched onto a poor defensive clearance in the 56th minute.
Michael Crawford finally broke the deadlock and seemed to have handed Halesowen three points in the 75th minute when he powerfully headed a freekick from Les Hines beyond Dyson. However, Mangotsfield claimed a deserved equaliser in the 79th minute with Andy Summers playing a neat one-two before driving past Clarke from 8 yards out.


The CSS toolkit and guidelines that power argon.simplexmobility.com.
Available for use under the MIT license and built with open source projects like SCSS, Jekyll, Grunt, and more.
Includes a small Gruntfile for compiling our SCSS, Autoprefixer for vendor prefixes, and Parker for CSS stats.


Audio Amplifier based on LM1875
I am not (yet) a big fan of Hi-Fi audio. However, driven by some interests and some willingness to explore new things, I decided to build my own in-house audio amplifier, using the famous LM1875 audio power amplifier IC. LM1875 is a (supposedly) easy-to-use audio amplifier IC, with numerous reference designs available from the internet. For a first-time try-out, using this IC should guarantee reasonable sound quality without too much debugging efforts. Staying within beginner-friendly region, at least for the first few times, is always smart.
Design
The Amplifier Circuit
As I mentioned earlier, LM1875 is a pretty easy-to-use audio amplifier IC. According to its manufacturer, Texas Instruments, LM1875 is a high-performance and low-distortion amplifier designed to operate with minimum external components. To work out my own design, I referred to a number of designs made by other audio hobbyists as well as the reference design provided in LM1875’s datasheet. The following sources have been valuable:
Fig.1 shows the schematic of the amplifier circuit. The supply voltages, V+ and V-, are +16V and -16V respectively. The closed loop gain of the circuit is about 26.4dB. Resistor R6 and capacitor C9 form a low-pass filter, screening out high-frequency noise from input. Inductors L1 and L2 and resistor R12 form another low-pass filter, taking out high-frequency noise from amplifier output. Audio signal input and feed-back GND is isolated from the real power ground by a 10-ohm resistor, R7. This design further reduces noise.
The Power Supply Circuit
Fig.2 shows the schematic of the power supply circuit. The power supply unit takes in 12VAC, rectifies and filters it, giving out +-16VDC outputs. I may have added more filtering capacitors than actually needed. But it helps reduce output voltage ripples.
Others Circuits
The amplifier also features a number of other circuits:
- A simple in-rush current limiter (ICL) circuit, to slow down the charging process of power supply capacitors on power-up (Fig.3).
- A manual-controlled speaker protection circuit, protecting the speakers from the start-up transients. The speakers are simply disconnected from amplifier output when the amplifier is powering up. After full power-up, the speakers are re-connected. This is realized using 2 relays, which are in turn controlled manually, using a switch (Fig.4).
- A potentiometer for volume adjustment. It in fact builds 2 potentiometers on the same axis, allowing volume of both Left and Right channels to be adjusted equally. On the same axis there is also a rotary switch, which I use to control the speaker protection circuit.
The working principle of the ICL circuit is simple. As shown in Fig.3, on power-up, the relay SW4 is in OFF state, and AC current has to flow through the 56-ohm resistor R-ICL, which limits the charging current of the power supply capacitors. When the power supply output voltage rises to a level (around 12V), SW4 is activated (into ON state), short-connecting R-ICL. The power supply then finishes charging, and no current flows through R-ICL in normal amplifier operation. The 2 terminals, V-IN and PE1, are used to sense the power-supply output voltage. With the ICL circuit, the power supply fully starts up in around 8 seconds.
to be continued.
Leave a Comment


Rock Paper Scissors
Let's Play
Player
0
Computer
0
Let's see who wins this!
You
Computer
Make your Move
Developed with
by SUMANTH


These release notes cover new developer and user-facing incompatibilities, important issues, features, and major improvements.
Adds 'truncate_preserve' to shell; removes all data but preserves region count and region boundaries
Default compaction policy has been changed to a new policy that will explore more groups of files and is more strict about enforcing the size ratio requirements.
With this patch, customer filters can be dropped into a pre-configured folder (hbase.dynamic.jars.dir), which can be in hdfs. Region servers can pick them up dynamically, no need to restart the cluster for the new filters to take effect.
However, if a filter class is already loaded, it won't be un-loaded. Therefore, we can't load a new version of an existing class. Users have to have a proper way to do filter class versioning.
HBase clients from 0.94.7 going forward support the following new API for Mutations (Put/Delete/Append/Increment). Mutation.setDurability(Durability). Possible durability settings are: USE_DEFAULT (use whatever the table has been configured with), SKIP_WAL (do not write anything to the WAL), ASYNC_WAL (write to the WAL asynchronously), SYNC (write to the WAL synchrously), FSYNC (write to the WAL synchronously and force to disc everywhere - currently not supported).
Regionservers prior to 0.94.7 with ignore anything but SKIP_WAL and assume USE_DEFAULT.
Scanning in Thrift now supports the same functionality as Scan.setBatch
In order to avoid name collision with hdfs snapshot, ".snapshot" under HBase root directory must be renamed as ".hbase-snapshot" before deployment of 0.94.7 or later release is started.
Don't do rolling upgrade between <IP_ADDRESS> and 0.94.7 if there're on-going snapshots activities. Sequence of actions should be:
If you take a snapshot during the RS upgrades nothing critical happens. The ".snapshot" folder would appear again and the snapshot will fail since half of the data will be in ".hbase-snapshot" and the other half in ".snapshot"
Adds tool to check if any v1 hfiles present under hbase.rootdir. Run this tool before you move to hbase 0.95/0.96 because hfile v1 files are no longer supported in the newer versions of hbase (If an hfile v1 is found, run a major compaction on the offending, containing region and that should purge the v1 file).
Here is what the usage for the tool looks like:
{code} bin/hbase org.apache.hadoop.hbase.util.HFileV1Detector -h usage: HFileV1Detector [-h] [-n <arg>] [-p <arg>] -h,--help Help -n,--numberOfThreads <arg> Number of threads to use while processing HFiles. -p,--path <arg> Path to a table, or hbase installation In case no option is provided, it processes hbase.rootdir using 10 threads. Example: To detect any HFileV1 in a given hbase installation '/myhbase': $ $HBASE_HOME/bin/hbase org.apache.hadoop.hbase.util.HFileV1Detector -p /myhbase {code}
hbase-daemon.sh stop regionserver
Add timeout (default 1200 seconds) on stopping services with hbase-daemon.sh. The timeout is configurable with the environment variable HBASE_STOP_TIMEOUT.
Updated documentation to reflect that Thrift2 API deleteMultiple() throws a TIOError if any delete fails.
Take on the protobuf Service model. Undoes two layers of rpc -- a proxy that did reflection to hook up methods and an 'engine' layer that was put in place to support secure/insecure and Writables vs Protobuf rpc'ing.
hbase.server.compactchecker.interval.multiplier configuration setting was added to enable one to make more frequent compaction checks in the cluster, or in specific regions. See hbase-default.xml for details.
Added below to Cell Interface:
{code} + /** + * @return the tags byte array + */ + byte[] getTagsArray();
Introduces "favored nodes" for region files. Has an implementation of LoadBalancer that assigns favored nodes for each region. There is a Primary RegionServer that hosts the region, and then there is Secondary and Tertiary RegionServers. Currently, the favored nodes information is used in creating HDFS files - the Primary RegionServer passes the primary, secondary, tertiary node addresses as hints to the DistributedFileSystem API for creating files on the filesystem. These nodes are treated as hints by the HDFS to place the blocks of the file (this will be complete when HBASE-7942 is addressed). This alleviates the problem to do with reading from remote nodes (since we can make the Secondary RegionServer as the new Primary RegionServer) after a region is recovered. This should help provide consistent read latencies for the regions even when their primary region servers die. The implementation of the balancer is not complete as of this issue.
Distributed Log Replay Description:
After a region server fails, we firstly assign a failed region to another region server with recovering state marked in ZooKeeper. Then a SplitLogWorker directly replays edits from WAL(Write-Ahead-Log)s of the failed region server to the region after it's re-opened in the new location. When a region is in recovering state, it can also accept writes but no reads(including Append and Increment), region split or merge.
The feature piggybacks on existing distributed log splitting framework and directly replay WAL edits to another region server instead of creating recovered.edits files.
The advantages over existing log splitting recovered edits implementation: 1) Eliminate the steps to write and read recovered.edits files. There could be thousands of recovered.edits files are created and written concurrently during a region server recovery. Many small random writes could degrade the overall system performance. 2) Allow writes even when a region is in recovering state. It only takes seconds for a failed over region to accept writes again.
The feature can be enabled by setting hbase.master.distributed.log.replay to true (by default is false)
This feature limits the time that unflushed data will stay in the memstore. By default a memstore will flush if data older than 1h (3600000ms) is present.
This can be configured via hbase.regionserver.optionalcacheflushinterval (default value is 3600000).
As pointed out in https://github.com/forcedotcom/phoenix/pull/131, BaseRegionObserver#preCompactScannerOpen returns null by default, which hoses any coprocessors down the line, making override of this method mandatory in all subclasses of BaseRegionObserver, when there are multiple levels of coprocessor stacking - this same behavior is present in preFlushScannerOpen and preStoreScannerOpen.
Instead, we default to returning the passed scanner so earlier coprocessor changes are preserved and still support the default "no custom scanner" by returning null (default scanner passed to each hook).
Changed defaults:
By default, prefetching is enabled in the trunk version (0.95.2 and 0.98). To disable it, users have to set prefetching off in the Scan object.
This patch introduced a configuration hbase.hregionserver.prefetcher.resultsize.max to control how much data we can prefetch. By default, it is 256MB. If there is already more than that much data prefetched, no new prefetching will be scheduled until some prefetched results are retrieved by clients, so there is room again for new prefetching.
New hbase-it integration test, IntegrationTestBigLinkedListWithChaosMonkey
A new configuration "hbase.rest.authentication" is added to enable authentication. Currently, only "kerberos" is supported. You also need to specify the SPNEGO principal with configuration "hbase.rest.kerberos.spnego.principal". The keytab configured with "hbase.rest.keytab.file" should have a key for this SPNEGO principal besides the REST server principal.


Tube delays hit three lines in rush hour after Edgware Road incident
by Joe CurtisSevere Tube delays have hit multiple lines today after a faulty train at Edgware Road caused knock-on problems across the Underground.
The entire Circle Line was suffering bad delays due to the issue, as is the Hammersmith & City Line.
Read more: Revealed: These are London’s most crowded Tube lines
Transport for London (TfL) urged commuters to use other routes to work during rush hour, saying London buses will accept their tickets.
Meanwhile the incident led to the District Line being suspended between Edgware Road and High Street Kensington, with a good service on the rest of the line.
The Jubilee Line was experiencing minor delays while engineers work to repair a “a fault on some of our trains”, according to TfL.
Angry passengers took to Twitter to vent their frustration with the morning delays.
Philip Spike wrote: “No service between High Street Kensington and Edgware Road!
Has this become the Bermuda Triangle of the London tube service?”
Read more: Ranked: The worst Tube lines for air pollution
Steven replied to the District Line’s Twitter update by saying: “Again and again and again …. when will you get on top of these repeated failures?”
Meanwhile Lucy Rhodes added: “There seems to be a faulty train or signal issue most days at the moment. It is a real disruption to my commute. Why is this the case and are there any plans to tackle problems on the circle line?”
The latest Tube disruption comes as London Underground cleaners vote on a possible strike that could cause “significant disruption” around Christmas.
Read more: RMT threatens Christmas disruption as Tube cleaners vote on strike
The RMT union said 1,000 cleaners could strike in a bid for a salary bump and pensions and sick pay.
RMT general secretary Mick Cash warned: “The cleaners on the London Underground are key to keeping services moving – if a train is soiled by a member of the public it cannot move on until it has been cleaned and that happens more often than you would think.”


Login And SignUp Modal
A responsive login and registration template with modal.
Modal registration form
Login
Register
×
Login form
Email address
Password
×
Registration form
Name
Email address
Password


|
|
| VM (size_t mem_alloc) |
| |
| void | ClearMemory () noexcept |
| |
|
void | ResetMemory () |
| |
|
void | PrintAvailableMemorySpace () |
| |
| void | NewString (std::string *&s, const char *text) |
| |
| unsigned char * | NewString (const char *s, size_t len) |
| |
|
unsigned char * | NewString (const char s, size_t len) |
| |
◆ ClearMemory()
This function clears memory, completely. All memory bytes are replaced with NULL characters.
- Exceptions
-
◆ NewString() [1/2]
| void VM::NewString |
( |
std::string *& |
s, |
|
|
const char * |
text |
|
) |
| |
This function clears memory, completely. All memory bytes are replaced with NULL characters.
- Parameters
-
| s | Reference to a pointer of std::string, the string to input into virtual memory |
| text | Pointer to the text to be inserted into the virtual memory |
- Exceptions
-
◆ NewString() [2/2]
| unsigned char * VM::NewString |
( |
const char * |
s, |
|
|
size_t |
len |
|
) |
| |
This function clears memory, completely. All memory bytes are replaced with NULL characters.
- Parameters
-
| s | Pointer to the string to be inserted into the virtual memory |
| len | The length of the string to be inserted into the virtual memory |
- Exceptions
-
The documentation for this class was generated from the following files:


My favorite movies:
Men of Honor
American Sniper
Fury
My favorite weapons:
MK-19
Recurve Bow
D'k tahg


Manage Account
Bank/CC Accounts
Bank of America *54
Visa **27
Contacts
Joey Moey
Max Wax
Alerts
Min Balance
Spending Vel
×
Add Alert
Alert Type:
Minimum Balance
Spending Velocity
Overdraft
Payment Habits
Recipient:
Joey Moey
Max Wax
myself
Confirm
×
Add Contact
Name:
Email Address:
Phone Number:
Confirm
×
Add Account
Institution/Provider:
Account/Card Number
Password
Confirm


@Thuerlich, @jeffjam please read the pinned message , quickest way is send your funds from web wallet
How to send funds to the new address?
Send all KMD and assetchains funds to that address, even if Verus wallet doesn't support that coin at the moment. As long as you have the seed safe, you can access your funds later.
0. If you have Agama 0.3.5 or 0.3.6b, use that to send funds out or
1. Quickest - Agama webwallet ONLY to send funds out immediately https://www.atomicexplorer.com/wallet/#/
2. You can also use this guide to send all KMD and assetchains to new address. You don't need to use 2 computers. Just use one offline computer https://support.komodoplatform.com/en/support/solutions/articles/29000026631-sign-transactions-offline-and-broadcast-online-using-agama
Where to send funds?
- Another address created by Verus Agama or native mode
- Ledger wallet
- CEX (they are not affected but if you want to)
(edited)


Select a topic from the list below to begin preparation for the Biotechnician Assistant Credentialing Exam (BACE)
Click the Quiz link from one of the topics below to begin your knowledge assessment
Click the Resources link from one of the topics below to learn more before starting a quiz


First, we need the ZeroMQ system library. This is probably already installed on your system. If not, your package manager will provide it:
# You can skip this step on Windows and macOS, the package binary has it
# On a computing cluster, we recommend to use Conda or Linuxbrew
brew install zeromq # Linuxbrew, Homebrew on macOS
conda install zeromq # Conda, Miniconda
sudo apt-get install libzmq3-dev # Ubuntu
sudo yum install zeromq-devel # Fedora
pacman -S zeromq # Arch Linux
The latest stable version is available on CRAN.
Alternatively, it is also available on Github
.
# from CRAN
install.packages('clustermq')
# from Github
# install.packages('remotes')
::install_github('mschubert/clustermq') remotes
In the develop
branch, we will introduce code changes and new features. These may contain bugs, poor documentation, or other inconveniences. This branch may not install at times. However, feedback is very welcome.
# install.packages('remotes')
::install_github('mschubert/clustermq', ref="develop") remotes
While this is not the main focus of the package, you can use it to parallelize function calls locally on multiple cores or processes. This can also be useful to test your code before submitting it to a scheduler.
callr
package to run and manage multiple parallel R processes with options(clustermq.scheduler="multiprocess")
parallel
package to fork the current R process into multiple threads with options(clustermq.scheduler="multicore")
. This saves memory but sometimes causes problems (macOS, RStudio) and is not available on Windows.An HPC cluster’s scheduler ensures that computing jobs are distributed to available worker nodes. Hence, this is what clustermq
interfaces with in order to do computations.
By default, we will take whichever scheduler we find and fall back on local processing. This will work in most, but not all cases.
To set up a scheduler explicitly, see the following links:
options(clustermq.scheduler="PBS"/"Torque")
Default submission templates are provided and can be customized, e.g. to activate compute environments or containers.
There are reasons why you might prefer to not to work on the computing cluster directly but rather on your local machine instead. RStudio is an excellent local IDE, it’s more responsive than and feature-rich than browser-based solutions (RStudio server, Project Jupyter), and it avoids X forwarding issues when you want to look at plots you just made.
Using this setup, however, you lost access to the computing cluster. Instead, you had to copy your data there, and then submit individual scripts as jobs, aggregating the data in the end again. clustermq
is trying to solve this by providing a transparent SSH interface.
In order to use clustermq
from your local machine, the package needs to be installed on both there and on the computing cluster. On the computing cluster, set up your scheduler and make sure clustermq
runs there without problems. On your local machine, add the following options in your ~/.Rprofile
:
options(
clustermq.scheduler = "ssh",
clustermq.ssh.host = "user@host", # use your user and host, obviously
clustermq.ssh.log = "~/cmq_ssh.log" # log for easier debugging
)
We recommend that you set up SSH keys for password-less login.
Q
functionThe following arguments are supported by Q
:
fun
- The function to call. This needs to be self-sufficient (because it will not have access to the master
environment)...
- All iterated arguments passed to the function. If there is more than one, all of them need to be namedconst
- A named list of non-iterated arguments passed to fun
export
- A named list of objects to export to the worker environmentBehavior can further be fine-tuned using the options below:
fail_on_error
- Whether to stop if one of the calls returns an errorseed
- A common seed that is combined with job number for reproducible resultsmemory
- Amount of memory to request for the job (bsub -M
)n_jobs
- Number of jobs to submit for all the function callsjob_size
- Number of function calls per job. If used in combination with n_jobs
the latter will be overall limitchunk_size
- How many calls a worker should process before reporting back to the master. Default: every worker will report back 100 times totalThe full documentation is available by typing ?Q
.
The package is designed to distribute arbitrary function calls on HPC worker nodes. There are, however, a couple of caveats to observe as the R session running on a worker does not share your local memory.
The simplest example is to a function call that is completely self-sufficient, and there is one argument (x
) that we iterate through:
function(x) x * 2
fx =Q(fx, x=1:3, n_jobs=1)
#> Running sequentially ('LOCAL') ...
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 4
#>
#> [[3]]
#> [1] 6
Non-iterated arguments are supported by the const
argument:
function(x, y) x * 2 + y
fx =Q(fx, x=1:3, const=list(y=10), n_jobs=1)
#> Running sequentially ('LOCAL') ...
#> [[1]]
#> [1] 12
#>
#> [[2]]
#> [1] 14
#>
#> [[3]]
#> [1] 16
If a function relies on objects in its environment that are not passed as arguments, they can be exported using the export
argument:
function(x) x * 2 + y
fx =Q(fx, x=1:3, export=list(y=10), n_jobs=1)
#> Running sequentially ('LOCAL') ...
#> [[1]]
#> [1] 12
#>
#> [[2]]
#> [1] 14
#>
#> [[3]]
#> [1] 16
If we want to use a package function we need to load it on the worker using the pkg
argument or referencing it with package_name::
:
function(x) {
fx =%>%
x mutate(area = Sepal.Length * Sepal.Width) %>%
head()
}Q(fx, x=list(iris), pkgs="dplyr", n_jobs=1)
#> Running sequentially ('LOCAL') ...
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
#> [[1]]
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species area
#> 1 5.1 3.5 1.4 0.2 setosa 17.85
#> 2 4.9 3.0 1.4 0.2 setosa 14.70
#> 3 4.7 3.2 1.3 0.2 setosa 15.04
#> 4 4.6 3.1 1.5 0.2 setosa 14.26
#> 5 5.0 3.6 1.4 0.2 setosa 18.00
#> 6 5.4 3.9 1.7 0.4 setosa 21.06
foreach
backendThe foreach
package provides an interface to perform repeated tasks on different backends. While it can perform the function of simple loops using %do%
:
library(foreach)
foreach(i=1:3) %do% sqrt(i) x =
it can also perform these operations in parallel using %dopar%
:
foreach(i=1:3) %dopar% sqrt(i)
x =#> Running sequentially ('LOCAL') ...
The latter allows registering different handlers for parallel execution, where we can use clustermq
:
# set up the scheduler first, otherwise this will run sequentially
::register_dopar_cmq(n_jobs=2, memory=1024) # this accepts same arguments as `Q`
clustermq foreach(i=1:3) %dopar% sqrt(i) # this will be executed as jobs
x =#> Running sequentially ('LOCAL') ...
As BiocParallel supports foreach
too, this means we can run all packages that use BiocParallel
on the cluster as well via DoparParam
.
library(BiocParallel)
register(DoparParam()) # after register_dopar_cmq(...)
bplapply(1:3, sqrt)
drake
The drake
package enables users to define a dependency structure of different function calls, and only evaluate them if the underlying data changed.
drake — or, Data Frames in R for Make — is a general-purpose workflow manager for data-driven tasks. It rebuilds intermediate data objects when their dependencies change, and it skips work when the results are already up to date. Not every runthrough starts from scratch, and completed workflows have tangible evidence of reproducibility. drake also supports scalability, parallel computing, and a smooth user experience when it comes to setting up, deploying, and maintaining data science projects.
It can use clustermq
to perform calculations as jobs:
library(drake)
load_mtcars_example()
# clean(destroy = TRUE)
# options(clustermq.scheduler = "multicore")
make(my_plan, parallelism = "clustermq", jobs = 2, verbose = 4)
Function calls evaluated by workers are wrapped in event handlers, which means that even if a call evaluation throws an error, this should be reported back to the main R session.
However, there are reasons why workers might crash, and in which case they can not report back. These include:
In this case, it is useful to have the worker(s) create a log file that will also include events that are not reported back. It can be requested using:
Q(..., log_worker=TRUE)
This will create a file called
You can customize the file name using
Q(..., template=list(log_file = <yourlog>))
Note that in this case log_file
is a template field of your scheduler script, and hence needs to be present there in order for this to work. The default templates all have this field included.
In order to log each worker separately, some schedulers support wildcards in their log file names. For instance:
log_file="/path/to.file.%i"
log_file="/path/to.file.\$TASK_ID"
log_file="/path/to.file.%I"
log_file="/path/to.file.%a"
log_file="/path/to.file.$PBS_ARRAY_INDEX"
log_file="/path/to.file.$PBS_ARRAYID"
Your scheduler documentation will have more details about the available options.
When reporting a bug that includes worker crashes, please always include a log file.
Before trying remote schedulers via SSH, make sure that the scheduler works when you first connect to the cluster and run a job from there.
If the terminal is stuck at
Connecting <user@host> via SSH ...
make sure that each step of your SSH connection works by typing the following commands in your local terminal and make sure that you don’t get errors or warnings in each step:
# test your ssh login that you set up in ~/.ssh/config
# if this fails you have not set up SSH correctly
ssh <user@host>
# test port forwarding from 54709 remote to 6687 local (ports are random)
# if the fails you will not be able to use clustermq via SSH
ssh -R 54709:localhost:6687 <user@host> R --vanilla
If you get an Command not found: R
error, make sure your $PATH
is set up correctly in your ~/.bash_profile
and/or your ~/.bashrc
(depending on your cluster config you might need either).
If you get a SSH warning or error try again with ssh -v
to enable verbose output.
If the forward itself works, set the following option in your ~/.Rprofile
:
options(clustermq.ssh.log = "~/ssh_proxy.log")
This will create a log file on the remote server that will contain any errors that might have occurred during ssh_proxy
startup.
If the ssh_proxy
startup fails on your local machine with the error
Remote R process did not respond after 5 seconds. Check your SSH server log.
but the server log does not show any errors, then you can try increasing the timeout:
options(clustermq.ssh.timeout = 10) # or a higher number
This can happens when your SSH startup template includes additional steps before starting R, such as activating a module or conda environment.
In some cases, it may be necessary to activate a specific computing environment on the scheduler jobs prior to starting up the worker. This can be, for instance, because R was only installed in a specific environment or container.
Examples for such environments or containers are:
It should be possible to activate them in the job submission script (i.e., the template file). This is widely untested, but would look the following for the LSF scheduler (analogous for others):
#BSUB-J {{ job_name }}[1-{{ n_jobs }}] # name of the job / array jobs
#BSUB-o {{ log_file | /dev/null }} # stdout + stderr
#BSUB-M {{ memory | 4096 }} # Memory requirements in Mbytes
#BSUB-R rusage[mem={{ memory | 4096 }}] # Memory requirements in Mbytes
##BSUB-q default # name of the queue (uncomment)
##BSUB-W {{ walltime | 6:00 }} # walltime (uncomment)
| default_bash_env }}
module load {{ bashenv # or: source activate {{ conda | default_conda_env_name }}
# or: your environment activation command
-v $(( 1024 * {{ memory | 4096 }} ))
ulimit --no-save --no-restore -e 'clustermq:::worker("{{ master }}")' CMQ_AUTH={{ auth }} R
This template still needs to be filled, so in the above example you need to pass either
Q(..., template=list(bashenv="my environment name"))
or set it via an .Rprofile option:
options(
clustermq.defaults = list(bashenv="my default env")
)
If your master process is inside a container, accessing the HPC scheduler is more difficult. Containers, including singularity and docker, isolate the processes inside the container from the host. The R process will not be able to submit a job because the scheduler cannot be found.
Note that the HPC node running the master process must be allowed to submit jobs. Not all HPC systems allow compute nodes to submit jobs. If that is the case, you may need to run the master process on the login node, and discuss the issue with your system administrator.
If your container is binary compatible with the host, you may be able to bind in the scheduler executable to the container.
For example, PBS might look something like:
#PBS directives ...
module load singularity
SINGULARITYENV_APPEND_PATH=/opt/pbs/bin
singularity exec --bind /opt/pbs/bin r_image.sif Rscript master_script.R
A working example of binding SLURM into a CentOS 7 container image from a CentOS 7 host is available at https://groups.google.com/a/lbl.gov/d/msg/singularity/syLcsIWWzdo/NZvF2Ud2AAAJ
Alternatively, you can create a script that uses SSH to execute the scheduler on the login node. For this, you will need an SSH client in the container, keys set up for password-less login, and create a script to call the scheduler on the login node via ssh (e.g. ~/bin/qsub
for SGE/PBS/Torque, bsub
for LSF and sbatch
for Slurm):
#!/bin/bash
ssh -i ~/.ssh/<your key file> ${PBS_O_HOST:-"no_host_not_in_a_pbs_job"} qsub "$@"
Make sure the script is executable, and bind/copy it into the container somewhere on $PATH
. Home directories are bound in by default in singularity.
chmod u+x ~/bin/qsub
SINGULARITYENV_APPEND_PATH=~/bin
In your ~/.Rprofile
on your computing cluster, set the following options:
options(
clustermq.scheduler = "lsf",
clustermq.template = "/path/to/file/below" # if using your own template
)
The option clustermq.template
should point to a LSF template file like the one below (only needed if you want to supply your own template rather than using the default).
#BSUB-J {{ job_name }}[1-{{ n_jobs }}] # name of the job / array jobs
#BSUB-n {{ cores | 1 }} # number of cores to use per job
#BSUB-o {{ log_file | /dev/null }} # stdout + stderr; %I for array index
#BSUB-M {{ memory | 4096 }} # Memory requirements in Mbytes
#BSUB-R rusage[mem={{ memory | 4096 }}] # Memory requirements in Mbytes
##BSUB-q default # name of the queue (uncomment)
##BSUB-W {{ walltime | 6:00 }} # walltime (uncomment)
-v $(( 1024 * {{ memory | 4096 }} ))
ulimit --no-save --no-restore -e 'clustermq:::worker("{{ master }}")' CMQ_AUTH={{ auth }} R
In this file, #BSUB-*
defines command-line arguments to the bsub
program.
BSUB-M
and BSUB-R
. Check your local setup if the memory values supplied are MiB or KiB, default is 4096
if not requesting memory when calling Q()
BSUB-q default
. Use the queue with name default. This will most likely not exist on your system, so choose the right name (or comment out this line with an additional #
)BSUB-W {{ walltime }}
. Set the maximum time a job is allowed to run before being killed. The default here is to disable this line. If you enable it, enter a fixed value or pass the walltime
argument to each function call. The way it is written, it will use 6 hours if no arguemnt is given.#BSUB-*
(where *
represents the argument){{ ... }}
), as they are used to fill in the right variablesOnce this is done, the package will use your settings and no longer warn you of the missing options.
In your ~/.Rprofile
on your computing cluster, set the following options:
options(
clustermq.scheduler = "sge",
clustermq.template = "/path/to/file/below" # if using your own template
)
The option clustermq.template
should point to a SGE template file like the one below (only needed if you want to supply your own template rather than using the default).
#$ -N {{ job_name }} # job name
#$ -q default # submit to queue named "default"
#$ -j y # combine stdout/error in one file
#$ -o {{ log_file | /dev/null }} # output file
#$ -cwd # use pwd as work dir
#$ -V # use environment variable
#$ -t 1-{{ n_jobs }} # submit jobs as array
#$ -pe {{ cores | 1 }} # number of cores to use per job
-v $(( 1024 * {{ memory | 4096 }} ))
ulimit --no-save --no-restore -e 'clustermq:::worker("{{ master }}")' CMQ_AUTH={{ auth }} R
In this file, #$-*
defines command-line arguments to the qsub
program.
$ -q default
. Use the queue with name default. This will most likely not exist on your system, so choose the right name (or comment out this line with an additional #
){{ ... }}
), as they are used to fill in the right variables.Once this is done, the package will use your settings and no longer warn you of the missing options.
In your ~/.Rprofile
on your computing cluster, set the following options:
options(
clustermq.scheduler = "slurm",
clustermq.template = "/path/to/file/below" # if using your own template
)
The option clustermq.template
should point to a SLURM template file like the one below (only needed if you want to supply your own template rather than using the default).
#!/bin/sh
#SBATCH --job-name={{ job_name }}
#SBATCH --partition=default
#SBATCH --output={{ log_file | /dev/null }} # you can add .%a for array index
#SBATCH --error={{ log_file | /dev/null }}
#SBATCH --mem-per-cpu={{ memory | 4096 }}
#SBATCH --array=1-{{ n_jobs }}
#SBATCH --cpus-per-task={{ cores | 1 }}
-v $(( 1024 * {{ memory | 4096 }} ))
ulimit --no-save --no-restore -e 'clustermq:::worker("{{ master }}")' CMQ_AUTH={{ auth }} R
In this file, #SBATCH
defines command-line arguments to the sbatch
program.
SBATCH --partition default
. Use the queue with name default. This will most likely not exist on your system, so choose the right name (or comment out this line with an additional #
){{ ... }}
), as they are used to fill in the right variables.Once this is done, the package will use your settings and no longer warn you of the missing options.
In your ~/.Rprofile
on your computing cluster, set the following options:
options(
clustermq.scheduler = "pbs",
clustermq.template = "/path/to/file/below" # if using your own template
)
The option clustermq.template
should point to a PBS template file like the one below (only needed if you want to supply your own template rather than using the default).
#PBS -N {{ job_name }}
#PBS -J 1-{{ n_jobs }}
#PBS -l select=1:ncpus={{ cores | 1 }}:mpiprocs={{ cores | 1 }}:mem={{ memory | 4096 }}MB
#PBS -l walltime={{ walltime | 12:00:00 }}
#PBS -o {{ log_file | /dev/null }}
#PBS -j oe
#PBS -q default
-v $(( 1024 * {{ memory | 4096 }} ))
ulimit --no-save --no-restore -e 'clustermq:::worker("{{ master }}")' CMQ_AUTH={{ auth }} R
In this file, #PBS-*
defines command-line arguments to the qsub
program.
#PBS-q default
. Use the queue with name default. This will most likely not exist on your system, so choose the right name (or comment out this line with an additional #
){{ ... }}
), as they are used to fill in the right variables.Once this is done, the package will use your settings and no longer warn you of the missing options.
In your ~/.Rprofile
on your computing cluster, set the following options:
options(clustermq.scheduler = "Torque",
clustermq.template = "/path/to/file/below" # if using your own template
)
The option clustermq.template
should point to a Torque template file like the one below (only needed if you want to supply your own template rather than using the default).
#PBS -N {{ job_name }}
#PBS -l nodes={{ n_jobs }}:ppn={{ cores | 1 }},walltime={{ walltime | 12:00:00 }}
#PBS -o {{ log_file | /dev/null }}
#PBS -q default
#PBS -j oe
-v $(( 1024 * {{ memory | 4096 }} ))
ulimit --no-save --no-restore -e 'clustermq:::worker("{{ master }}")' CMQ_AUTH={{ auth }} R
In this file, #PBS-*
defines command-line arguments to the qsub
program.
#PBS -q default
. Use the queue with name default. This will most likely not exist on your system, so choose the right name (or comment out this line with an additional #
){{ ... }}
), as they are used to fill in the right variables.Once this is done, the package will use your settings and no longer warn you of the missing options.


All-New Tucson Previewed By Hyundai Vision T Concept
Compact crossover concept opens up and illuminates as it drives.
by Noah JosephSee this crossover right here? It's a new concept that Hyundai calls the Vision T. It's a plug-in hybrid and the seventh in a series of show cars to come out of the Hyundai Design Center. But when we look at it – pleasing as it is on the eyes – what we see is the Tucson of tomorrow.
Unveiled at the 2019 LA Auto Show today, the Vision T is described as a compact SUV – which in Hyundai terms means the Tucson. And though it's larger than the current model, it's nowhere as big as the midsize Santa Fe (even if the wheelbase is closer to the Palisade's).
Sizing classification aside, the Vision T cuts a handsome profile, applying similar design cues from last year's Le Fil Rouge concept to a taller form. It's a design language that Hyundai calls Sensuous Sportiness, and looks pretty good on the tall frame, coated in a subdued hue of matte green with metallic accents and the typical show car's oversized wheels.
Its face is more than just pretty, though: it's dynamic, too. And we don't just mean that it looks like it's moving while sitting still. We mean it actually adapts to motion. The grille, for example, is made up of individual elements that open up in sequence as the vehicle picks up speed.
The headlamps illuminate from their static dark matte chrome when the engine's turned on, and the taillights and emblems light up and power down in sequence as well. As to what constitutes that powertrain, we don't know. All Hyundai is saying is that it's a plug-in hybrid.
That's a powertrain configuration that Hyundai currently offers only on the Sonata and Ioniq, with the smaller Kona straddling the divide (here at any rate) with conventional internal-combustion and all-electric versions. But it's something that Hyundai's contemplated adding to the Tucson's stable before, and could come as a welcome addition to the next-generation crossover's powertrain lineup.


Routes
Either have templates embedded in Shell Page, tell Angular about ViewID to load.
or can have partials at server and tell URL.


Welcome to our official website. Please look around and contact us with any questions or comments. We believe that anyone can be a part of energy conservation on a small scale, and we would like to help people reach this goal at an affordable cost. Our mission is providing clear customer education, thoughtful design, fair pricing with quality components, careful installation, and responsive service.
We work with owners to size a solar system that will offset as much power as possible, but no more than necessary, using the National Renewable energy Laboratory's PV Watts estimation program.
All Advantage Energy Solutions, LLC and Corrales Solar designs are installed through a contract between the homeowner and Compass Electric Company, a licensed and insured Albuquerque company with extensive experience in solar installation.
Residential or Commercial--We can design and oversee installation of PV systems ranging from small, pole-mounted, -grid arrays to much larger grid-tied rooftop arrays. We are familiar with the application and commissioning process with New Mexico utilities, and the permitting requirements of various municipalities. We provide free site visits and estimates.
Renewable energy comes from a natural source that is theoretically inexhaustible, and includes wind, solar, biomass, tidal, wave, and hydroelectric. Of these, solar is the most versatile and simplest to site on a residence.
The electrification of the United States was accomplished in the 1920s and 1930s through the development of centralized large-scale power plants and a network of distribution power lines. Large hydroelectric facilities and nuclear power plants were added to the grid through the 1960s and 1970s. All of the large power generating facilities were designed to generate and sell power to the consumer, and the utilities that own them are highly-regulated monopolies.
Changes to Federal energy policy in 1992 and 2005 encouraged renewable sources, and allowed generation of power from sources such as wind and solar farms. This changed the flow of electrons for the first time.
Small-scale solar remained a niche power source for off-grid use until the invention of the grid-tied inverter, which synchronized solar power with utility grid power, and allowed excess power at a residence to flow onto the grid. This ability to offset utility bills fueled exponential growth in small residential systems, growing distributed rather than centralized power production.
Battery storage of excess power is becoming more affordable and useful as a means of backup power and/or a way to shift load to a less expensive time of day.
Q: How does solar PV work?
A: Sunlight hits the solar panels, where photons are converted to a direct current (DC). The direct current is routed to an inverter, which changes it to alternating current (AC). In a grid-tied system, the inverter locks onto the utility power and frequency, and, if more power is being made than is being used, the power flows onto the grid.
Q: What is net metering?
A: A qualified generation system must be allowed to push power onto the grid. Net metering is the process of compensation for the owner of the generator. Different utilities interpret net metering differently. In the PNM Small Solar Program, with inverter(s) no larger than 10kW AC, power that is pushed onto the grid becomes a credit, which may be used at a later date. The PNM Large Solar Program does not have the credit carryover provision.
Q: What is a kilowatt hour?
A: A kilowatt hour (kWh) is the basic unit of power consumption. Your utility bill provides a total of how many kWh you used in a month. A kilowatt (kW) is 1,000 watts, and a kilowatt hour is 1,000 watts of power used for one hour. It may be compared to ten 100-watt lamps on for one hour.
Q: How are PV systems sized?
A: A PV system is generally sized in kilowatts (kW) of DC power. The size in watts of each panel times the number of panels divided by 1000 is the kW size of a system.
Q: How do I know how much PV I need?
A: Within the PNM Small PV Program, the economic sweet spot is an offset of all of your annual use, or a bit less. First total twelve months of your monthly usage in kWh to get your annual usage. A good rule of thumb in the Albuquerque area is that a PV system will produce 5 kWh per DC kW of system size per day. Divide the total annual kWh by 5, then by 365 to come up with an estimated of the size in DC kW. For example, the average PNM customer averages 600 kWh/month, so 12 X 600 = 7200 kWh/year. 7200 / 5 / 365 = 3.94 kW.
Q: Can't I oversize my system and have PNM pay me for power?
A: It does not work out economically to oversize, under either of PNM's Solar Programs. With the Small Program, you wind up with a credit that is only good if you use it, and with the Large Program, you are paid for excess power at PNM's wholesale cost.
Q: How much does a PV system cost?
A: The cost of a PV system depends on a few factors, such as the price of panels, the type of mount, and the type of inverter(s). Premium high-efficiency panels can be expensive, and are best used where space for panels is limited. Any roof mount is less expensive than a ground mount, and flush mounts on a pitched roof are less expensive than ballast mounts on a flat roof. Microinverters are cost effective for a small system, but become much more expensive than string inverters in large system. Large systems in general are less expensive per watt than small systems. A ballpark working number would be in the range of $2.25 to $3.25/watt.


These are all the convert beatmaps that Rinze has been played. Including Fail & Odd Beatmaps
Update: 03 September 2019 19:32:00 GMT+7


 He was carrying a punnet full to the brim with odd and inconsequential objects, which he proceeded to describe to Unstrebnodtalb at length. Readers avid for the details should send an email headed Please tell me what was in the sleuth Aminadab's brimming punnet, to which the author will reply individually, to the point of tedium.
But Aminadab's rambling drivel cannot be allowed to keep us from the denouement of this exciting story.
“Hush! Hush!
Aminadab unzipped himself from his terrifying aquatic monster costume and placed his punnet on a flagstone next to one of Blodgett's fly-traps.
“You would do well to pay attention to my rambling drivel, Detective Captain Unstrobnedtalb,” he said, “For it is only because I carry with me at all times a vial of cassiber serum that I am able to assist you in bringing this case to a satisfactory conclusion. The deranged potato scientist Moop stunned me with an incredibly powerful poisonous dart from her blowpipe. By rights I should be in a coma. As it is, I had a split second in which to bite on a serum pill and thus outwit her!”
Detective Captain Unstrebnodtalb clawed at the sky, wailing horribly. “Very clever, Aminadab. But stop calling me Unstrobnedtalb, G-d damn you!”
While the two detectives were occupied with this banter, the culprit fled into the crumbling ruins of the House, forehead yet unmarked with an X.


Maryland’s Helpline is available 24/7 to provide support, guidance, and assistance. Please call 211 and select option 1, text your zip code to 898-211, or visit 211MD.org
Announcement
{{ announcement.title }}
{{ announcement.description|truncatewords:25 }} Continue Reading


The REST/RPC (RPC over REST) API allows the creation of client-side remote proxy interfaces for calling methods on server-side POJOs using entirely REST.
-
This is not to be confused with REST Proxies which are entirely client-side driven Java interfaces
against arbitrary backend REST interfaces.
Remote Interfaces
The following example shows a remote interface:
| @RemoteInterface // Annotation is optional
| public interface IAddressBook {
|
| void init() throws Exception;
|
| List<Person> getPeople();
|
| List<Address> getAddresses();
|
| int createPerson(CreatePerson cp) throws Exception;
|
| Person findPerson(int id);
|
| Address findAddress(int id);
|
| Person findPersonWithAddress(int id);
|
| Person removePerson(int id);
| }
The requirements for a remote interface method are:
Throwables with public no-arg or single-arg-string constructors are automatically recreated on the client side
when thrown on the server side.
Client side
Remote Interface proxies are instantiated on the client side using one of the following methods:
- {@link oajr.client.RestClient}
- {@link oajr.client.RestClient#getRrpcInterface(Class) getRrpcInterface(Class)}
- {@link oajr.client.RestClient#getRrpcInterface(Class,Object) getRrpcInterface(Class,Object)}
- {@link oajr.client.RestClient#getRrpcInterface(Class,Object,Serializer,Parser) getRrpcInterface(Class,Object,Serializer,Parser)}
Since we build upon the existing RestClient API, we inherit all of it's features.
For example, convenience methods for setting POJO filters and properties to customize the behavior of the
serializers and parsers, and the ability to provide your own customized Apache HttpClient for
handling various scenarios involving authentication and Internet proxies.
Here's an example of the above interface being used:
| // Create a RestClient using JSON for serialization, and point to the server-side remote interface servlet.
| RestClient client = RestClient.create()
| .json()
| .rootUrl("http://localhost:10000/remote")
| .build();
|
| // Create a proxy interface.
| IAddressBook ab = client.getRrpcInterface(IAddressBook.class);
|
| // Invoke a method on the server side and get the returned result.
| Person p = ab.createPerson(
| new Person(
| "John Smith",
| "Aug 1, 1999",
| new Address("My street", "My city", "My state", 12345, true)
| )
| );
Under the covers, this method call gets converted to a REST POST.
| HTTP POST http://localhost:10000/remote/org.apache.juneau.examples.addressbook.IAddressBook/createPerson(org.apache.juneau.examples.addressbook.Person)
| Accept: application/json
| Content-Type: application/json
|
| [
| {
| "name":"John Smith",
| "birthDate":"Aug 1, 1999",
| "addresses":[
| {
| "street":"My street",
| "city":"My city",
| "state":"My state",
| "zip":12345,
| "isCurrent":true
| }
| ]
| }
| ]
Note that the body of the request is an array.
This array contains the serialized arguments of the method.
The object returned by the method is then serialized as the body of the response.
Server side
There are two ways to expose remote interfaces on the server side:
-
Extending from {@link oajr.remote.RrpcServlet}.
-
Using a @RestOp(method=RRPC) annotation on a Java method.
In either case, the proxy communications layer is pure REST.
Therefore, in cases where the interface classes are not available on the client side, the same method calls can
be made through pure REST calls.
This can also aid significantly in debugging, since calls to the remote interface service can be made directly from
a browser with no coding involved.
RrpcServlet
The {@link oajr.remote.RrpcServlet} class is a simple specialized servlet with an abstract
getServiceMap() method to define the server-side POJOs:
| @Rest(
| path="/remote"
| )
| public class SampleRrpcServlet extends RrpcServlet {
|
| // Our server-side POJO.
| private AddressBook addressBook = new AddressBook();
|
| @Override /* RrpcServlet */
| protected Map<Class<?>,Object> getServiceMap() throws Exception {
| Map<Class<?>,Object> map = new LinkedHashMap<Class<?>,Object>();
|
| // In this simplified example, we expose the same POJO service under two different interfaces.
| // One is IAddressBook which only exposes methods defined on that interface, and
| // the other is AddressBook itself which exposes all methods defined on the class itself (dangerous!).
| map.put(IAddressBook.class, addressBook);
| map.put(AddressBook.class, addressBook);
| return map;
| }
| }
@RestOp(method=RRPC)
The @RestOp(method=RRPC) approach is easier if you only have a single
interface you want to expose.
You simply define a Java method whose return type is an interface, and return the implementation of that
interface:
| // Our exposed interface.
| @RestOp(method=RRPC, path="/addressbookproxy/*")
| public IAddressBook getProxy() {
| return addressBook;
| }
RrpcServlet in a browser
If you point your browser to the servlet above, you get a list of available interfaces:
| http://localhost:10000/remote
Clicking the hyperlinks on each shows you the list of methods that can be invoked on that service.
Note that the IAddressBook link shows that you can only invoke methods defined on that
interface, whereas the AddressBook link shows ALL public methods defined on that class.
| http://localhost:10000/remote/org.apache.juneau.examples.addressbook.IAddressBook
Since AddressBook extends from LinkedList, you may notice familiar collections
framework methods listed.
| http://localhost:10000/remote/org.apache.juneau.examples.addressbook.AddressBook
Let's see how we can interact with this interface through nothing more than REST calls to get a better idea on
how this works.
We'll use the same method call as in the introduction.
First, we need to create the serialized form of the arguments:
| Object[] args = new Object[] {
| new CreatePerson("Test Person",
| AddressBook.toCalendar("Aug 1, 1999"),
| new CreateAddress("Test street", "Test city", "Test state", 12345, true))
| };
| String asJson = Json5Serializer.DEFAULT_READABLE.toString(args);
| System.err.println(asJson);
That produces the following JSON output:
| [
| {
| name: 'Test Person',
| birthDate: 'Aug 1, 1999',
| addresses: [
| {
| street: 'Test street',
| city: 'Test city',
| state: 'Test state',
| zip: 12345,
| isCurrent: true
| }
| ]
| }
| ]
Note that in this example we're using JSON.
However, various other content types can also be used such as XML, URL-Encoding, UON, or HTML.
In practice however, JSON will preferred since it is often the most efficient.
Next, we can use a tool such as Poster to make the REST call.
Methods are invoked by POSTing the serialized object array to the URI of the interface method.
In this case, we want to POST our JSON to the following URL:
| http://localhost:10000/remote/org.apache.juneau.examples.addressbook.IAddressBook/createPerson(org.apache.juneau.examples.addressbook.CreatePerson)
Make sure that we specify the Content-Type of the body as text/json.
We also want the results to be returned as JSON, so we set the Accept header to
text/json as well.
When we execute the POST, we should see the following successful response whose body contains the returned
Person bean serialized to JSON:
From there, we could use the following code snippet to reconstruct the response object from JSON:
| String response = "output from above";
| Person p = JsonParser.DEFAULT.parse(response, Person.class);
If we alter our servlet to allow overloaded GET requests, we can invoke methods using nothing more than a
browser...
| @Rest(
| path="/remote",
|
| // Allow us to use method=POST from a browser.
| allowedMethodParams="*"
| )
| public class SampleRrpcServlet extends RrpcServlet {
For example, to invoke the getPeople() method on our bean:
| http://localhost:10000/remote/org.apache.juneau.examples.addressbook.IAddressBook/getPeople?method=POST
Here we call the findPerson(int) method to retrieve a person and get the
returned POJO (in this case as HTML since that's what's in the Accept header when calling from a
browser):
| http://localhost:10000/remote/org.apache.juneau.examples.addressbook.IAddressBook/findPerson(int)?method=POST&body=@(3)
When specifying the POST body as a &body parameter, the method arguments should be in UON
notation.
See {@link oaj.uon.UonSerializer} for more information about this encoding.
Usually you can also pass in JSON if you specify &Content-Type=text/json in the URL parameters
but passing in unencoded JSON in a URL may not work in all browsers.
Therefore, UON is preferred.
The hyperlinks on the method names above lead you to a simple form-entry page where you can test
passing parameters in UON notation as URL-encoded form posts.


IDENTIFICATION
Name
{% for mol in mol %} {{mol.MoleculeName}} {% endfor %}
MoleculeID
{% for mol in mol %} {{mol.id}} {% endfor %}
Description
Generic Drug
| Generic Code | EnGenericName | ATCCode | ATCName | Essential |
|---|---|---|---|---|
| {{generic}} | {{generic.EnGenericName}} | {{generic.ATCCode}} | {{generic.ATCName}} | {{generic.Essential}} |
Products
| ID | eRx | BrandName | Provider | ActivePackaging | GTIN |
|---|---|---|---|---|---|
| {{generic}} | {{product.eRx}} | {{product.BrandName}} | {{product.Provider}} | {{product.ActivePackaging}} | {{product.GTIN}} |
Insurance
| ID | EnGenericName | DosageForm | Price | OrganizationPercent | InfluencedDate | Approve |
|---|---|---|---|---|---|---|
| {{generic}} | {{generic.bime.EnGenericName}} | {{generic.bime.DosageForm}} | {{generic.bime.Price}} | {{generic.bime.OrganizationPercent}} | {{generic.bime.InfluencedDate}} | {{generic.bime.Approve}} |
Drug Interactions
| DRUG | DRUG | SEVERITY | INTERACTIN |
|---|---|---|---|
| {{interact.object}} | {{interact.subject}} | {{interact.text}} | {{interact.severity}} |
International/Other Brands
Categories
Small Molecule
UNII
Small Molecule
CAS number
Small Molecule
Weight
Small Molecule
Chemical Formula
Small Molecule
InChI Key
Small Molecule
PHARMACOLOGY
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
INTERACTIONS
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
REFERENCES
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
CLINICAL TRIALS
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
PHARMACOECONOMICS
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
PROPERTIES
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
SPECTRA
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
TAXONOMY
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
SPECTRA
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
SPECTRA
Name
Benzonatate
Accession Number
DB00868 (APRD00629)
{Type}
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule
Type
Small Molecule


Sat Feb 4, 2012
I was reading an interview with Limor Fried, the alpha-geek who founded the DIY electronics company Adafruit Industries, when I was struck by one of her answers:
What kind of phone do you have?
I do not own a cell phone; however, I have designed a cell-phone jammer.
Limor’s response was intriguing to me because of its dichotomy between technological know-how and an anti-technology stance. Here is an ubergeek who could reverse engineer a cellphone, yet who claims not to own one.
Yet, if you think about it, why is there this lust in our consumer culture for phones? Granted, it makes life easier for a lot of people, but there’s more to it.
Some people feel a sense of shame if they don’t own a cellphone. Or even more telling, a twinge of embarrassment if they own a cellphone, but not a smartphone. Look at the poor kid who digs out a quarter and makes a furtive call on the payphone in the mall.  And God help you if you’re a phoneless geek.
Perhaps it is not Limor’s answer which is unsettling, but the question itself. What kind of society have we become when the question that measures geek cred is “What kind of phone do you have?”


Scroll down (or click the narrative and use keyboard down arrow) to see how Hartford County, Connecticut divided into 29 separate towns from the early 1600s to the late 1800s. Boundaries shown here are not exact, but approximated from the best available digital sources: UConn Libraries MAGIC historical maps, Atlas of Historical County Boundaries at Newberry Library, and the Connecticut State Register and Manual. Map developed by Ilyana Ilyankou and Jack Dougherty. See sources, known issues, and code on GitHub. Learn more at OnTheLine.trincoll.edu.


Skipole WSGI generator.
The project root is normally the first point to be edited.
This shows the root of the site, and the sub folders and responder and template pages within it. The folders and pages can be edited, and new ones added. Where a folder is set as 'R' restricted, it's contents cannot be directly accessed by a call from a client browser. Typically a responder page will be called, which in turn calls your Python functions, and it then passes the call to a template page - which is usually in a restricted folder.
Therefore you would add responders and template pages to build your site.
You could also add 'File' pages - which link to static files on your server, and are useful to serve static CSS files which do not need to be dynamically built.
The above screenshot also shows a 'JSON' page. Your Python code can populate an empty JSON file with widget fields and values, since it is common to use an empty JSON file as a responder target, an empty one is provided with label 'general_json' and can be used for this purpose.
Different types of responder can be set into the project, sometimes a 'NoOperation' responder is used - this does nothing more than pass the call on to a target template page, however it can be removed and replaced with a more useful responder later - so it's chief use is to act as an place holder for future development.
The full definition of the project is held in a JSON file, the part holding the root folder and contents can be downloaded here, and stored by yourself as a JSON file which can be reused in other projects if required.
The second column of the table shown above shows the page ident number. Each page has an ident (project, number) however in most cases just the number is required, the project name being implied. To avoid linking to pages by an uninformative number, 'labels' can be defined, mapping a string to the ident, these are set in the 'Page Labels' area. The label is unique to the project, and can be different to the page 'name' which is shown in the first colum, and makes up the URL path of the page.


Some quick example text to build on the card title and make up the bulk of the card's content.
Some quick example text to build on the card title and make up the bulk of the card's content.
Some quick example text to build on the card title and make up the bulk of the card's content.
Rome is a sprawling, cosmopolitan city with nearly 3,000 years of globally influential art, architecture and culture on display.
Ancient ruins such as the Forum and the Colosseum evoke the power of the former Roman Empire.