--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/.60meta.60.20questions.html ---
How do I do the following inside a meta def
?
structure
type?structure
instance from field values?protected
lemmas/definitions with Lean 3.5?I want to write a command that will generate some basic definitions/lemmas about monoid_hom
, ring_hom
etc.
You can create structures using some lean 3.5 additions
The internal interface to protected
suggests that you can post hoc protect any definition, but it lacks a public API
Where can I read about these additions?
oh, I think I was mistaken. We added the ability to mimic the inductive
command, but not structure
. You can of course mimic it with an inductive, but structure projections get some fancy internal markings that you can't replicate
looks like the structure command does its magic right from the parser, so that will require some refactoring
OK, I can't mimic structure
. How do I create a def
producing a structure
?
Also, there is always the parser hack: use with_input
to parse a string that contains the structure definition
that works for pretty much anything, it's like eval
for lean
what do you mean by a def producing a structure?
I mean something like
instance {M : Type*} {N : Type*} {mM : monoid M} {mN : monoid N} : has_coe_to_fun (M →* N) := ⟨_, monoid_hom.to_fun⟩
or monoid_hom.id
.
I'll try with_input
. Can I use some quotation magic in the argument?
That's just sugar for a structure constructor. Is there a reason you can't just call that?
I think the angle brackets notation is a pexpr
that you may or may not be able to create from lean
Ah, indeed this was a stupid question.
This will construct the anonymous brackets though:
run_cmd do let p := ``(monoid_hom.to_fun), let e := ```(⟨_, %%p⟩), tactic.trace e
when you run to_expr
it will use the target type to resolve what constructor it is, as usual
Last updated: Apr 24 2020 at 19:02 UTC


Visit us at:
Le~spiccy pizza
Box 564, Nairobi
Kenya
Your Name
Email
Address
City
Zip


Sister of tragic Scots climber makes heartbreaking pilgrimage to Himalayan peak where he died
Kate Ballard’s brother Tom, 30, was climbing Nanga Parbat with Italian Daniele Nardi, 42, when they went missing on February 24.
by Jackie Grant, https://www.dailyrecord.co.uk/authors/jackie-grant/The sister of a Scots climber who died on the world’s ninth-highest mountain has made an emotional pilgrimage to the Himalayan peak where he lost his life.
Kate Ballard’s brother Tom, 30, was climbing Nanga Parbat with Italian Daniele Nardi, 42, when they went missing on February 24.
The 26,660ft peak in Pakistan is dubbed Killer Mountain because of its dangerous conditions.
Search teams found Tom and Daniele’s bodies, which were roped together on a hard-to-reach summit, nearly two weeks later.
The tragedy happened 24 years after Kate and Tom’s mum Alison Hargreaves died while descending K2.
Alison, who was 33, died months after becoming the first woman to conquer Everest unaided.
Kate, 28, said life has been “extremely difficult since February”.
She added: “I trekked to Nanga Parbat base camp simply to see Tom’s last mountain. It’s a magnificent place, days from civilisation, completely wild, untouched and grandiosely glorious.
“Our wish is that Tom will be left at rest on the mountain – at peace, undisturbed – as with mum on K2.”
In 2015, Tom was dubbed the new King of the Alps after he became the first person to solo climb all six major north faces of the mountain range in one winter.
Kate, a ski and snowboarding instructor who also teaches yoga, said: “Tom was the best brother I could have wished for. I could not be more proud.
“He loved me and I love him. He was shy, quiet – although when he spoke, it was worth listening.
“He was in tune with our natural world and he was completely comfortable and at ease in his preferred environment.
“In the mountains, mum and Tom found peace and a sense of freedom.
“They simply loved to climb and were talented enough to do so at the highest level.”
After Alison died in 1995, Kate, Tom and their dad James travelled from their home in Fort William to the spot where Alison had planned her summit of the world’s second-highest mountain.
A BBC documentary team filmed the trip.
Kate later described Alison as the “best mum I could have asked for”.
She added: “She inspired thousands of women worldwide to reach for more in their own lives.”


Some 2,000 incl Myanmar workers lose jobs as Thai luggage factory closes
by Shine Lin Aung
About 2,000 workers including Myanmar workers became jobless as their luggage factory near Bangkok of Thailand closed down, according to Hittaing (place to voice complaints) based in Thailand where migrant workers usually come to voice their complaints and grievances.
The luggage factory in Chonburi Province near Bangkok reportedly shut down on October 31 citing losses.
Those working at that factory were from Thailand, Myanmar and Cambodia, and they are now jobless.
Of the Myanmar workers, some worked after signing memorandums of understanding.
The factory stopped operation about 12 days before its shutdown. Factory officials announced closure after calling a meeting.
Following the factory closure, activists and Myanmar labour attachés to Thailand said they would try to make sure that the workers who lost their jobs get the benefits they deserve.


Always wanted to build your own apps? With Raptus and its 200+ bite-sized, hands-on tutorials, getting started has never been so easy!
Interested ? Join our mailing list!
Summary of the app
Modernize your business with your very own iPhone and Android apps. Your customers can use these mobile apps to place orders on the go.
Our tutorials are divided into two sections - lessons for learning the Engine and more for building Mobile Apps and Production. Each section will have Projects - a set of step-based tutorials, and Topics dividing up additional lessons in more detail.
These hands-on tutorials can be streamed in HD and can also be streamed in 4k resolution.
You will be able to share your work, help other people out and even ask for help in forums, and also ask help from other people that are struggling on the same course as you.
You will be able to download the tutorials and watch them offline.
After completing the course, you will be tested for your knowledge of Raptus, you can choose to pay for a certificate by navigating to the course home page and clicking on the Upgrade button under your final grade.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita nisi exercitationem amet corporis doloremque reiciendis aut quisquam, illum dolorem temporibus dicta magnam.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita nisi exercitationem amet corporis doloremque reiciendis aut quisquam.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita nisi exercitationem amet corporis doloremque reiciendis aut quisquam, illum dolorem temporibus dicta magnam, eligendi voluptatem nemo ea, reprehenderit culpa autem necessitatibus!
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam ultrices nunc eu varius egestas. Etiam ultricies laoreet velit sed gravida.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Velit error adipisci optio tempore voluptates non, deserunt. Eius porro, nisi consequuntur voluptatem pariatur.
Raptus is available for download on your iPhone, iPad, Android, Windows and the Web.


70 Trees for 70 Years
Written on April 29th, 2020 by Julia70 Trees
As my 70th birthday approached in the spring of 2019, I started dreaming up ideas for a party. Although I lived in Nelson, BC, I quickly decided to celebrate in Victoria, BC where my daughter lived and my son would be visiting from New York City for a friend’s wedding. I also had lots of relatives and friends on Vancouver Island. I knew I didn’t want or need gifts, so I mused about contributing to some good cause. I decided it would be a good idea to plant 70 native trees in honour of my birthday. I inquired of some friends in Greater Victoria and was directed to Habitat Acquisition Trust. One of HAT’s programs involves restoring native ecosystems in parks.
I was able to rent a small hall in Colwood, that is fairly close to Havenwood Park, where HAT was removing invasive species and re-planting with native species. I sent invitations to family and friends asking for gifts of money towards purchasing trees. On April 13th, I held a luncheon a the hall. After our first course, I reviewed each of the seven decades of my life and handed out seven copies of The Man Who Planted Trees by Jean Giono, one of my favourite books. After enjoying three kinds of birthday cake, we convoyed to Havenwood Park.
We were met at the park by a HAT staff person and several park volunteers. We were provided with shovels, plants in pots, and a demonstration of how to plant them. We hiked through the park and saw several areas where the volunteers had removed invasive species such as Himalayan Blackberry and English Ivy. We split into groups and planted our plants. The weather was overcast and drizzling, but that was perfect for planting. The volunteers assured us that they would see that the trees were watered, so that they would be able to survive the summer heat. One of volunteers was so impressed by the idea of a birthday planting that he decided he would do the same for his forthcoming 75th birthday!
In the end, we only planted 56 native plants, a combination of trees and shrubs. The HAT staff person explained that our choice was limited by the availability of native plants from local nurseries. I also learned that autumn is a better time to plant trees, at least on Vancouver Island, because the roots can get established during cool, wet weather. Then the plants are better able to tolerate the heat of the following summer.


Dear ,
As you like to play games, our suggestion is to choose C# as the first programming language to learn.
Dear ,
Python will be a great choice for you.
Dear ,
We suggest you to choose JavaScript, HTML and CSS as the first programming languages to learn. You will be able to create beautiful sites.


Chat application - using node.js and socket.io
Please enter your name below and click 'Join' or hit the 'Enter' key.


|
FIFA 20 Q450.00 |
CALL OF DUTY Q450.00 |
FORNITE Q450.00 |
MORTAL KOMBAT Q450.00 |
|
GRAND THEFT AUTO V Q450.00 |
NEED FOR SPEED PAYBACK Q450.00 |
HELLO NEIGHBOR Q450.00 |
NBA LIVE 19 Q450.00 |


@() @main("Game Rules") {
Carcassonne is a tile-based German-style board game for two to five players, designed by Klaus-Jürgen Wrede and published in 2000 by Hans im Glück in German and by Rio Grande Games (until 2012) and Z-Man Games (currently) in English. It received the Spiel des Jahres and the Deutscher Spiele Preis awards in 2001.
It is named after the medieval fortified town of Carcassonne in southern France, famed for its city walls. The game has spawned many expansions and spin-offs, and several PC, console and mobile versions. A new edition, with updated artwork on the tiles and the box, was released in 2014.
The game board is a medieval landscape built by the players as the game progresses. The game starts with a single terrain tile face up and 71 others shuffled face down for the players to draw from. On each turn a player draws a new terrain tile and places it adjacent to tiles that are already face up. The new tile must be placed in a way that extends features on the tiles it touches: roads must connect to roads, fields to fields, and cities to cities.
After placing each new tile, the placing player may opt to station a piece (called a "follower" or "meeple") on a feature of that newly placed tile. The placing player may not use a follower to claim any features of the tile that extend or connect features already claimed by another player. However, it is possible for terrain features claimed by opposing players to become "shared" by the subsequent placement of tiles connecting them. For example, two field tiles which each have a follower can become connected into a single field by another terrain tile.
The game ends when the last tile has been placed. At that time, all features (including fields) score points for the players with the most followers on them. The player with the most points wins the game.
During the players' turns, cities, cloisters, and roads (but not fields) are scored when they are completed—cities and roads when they are completed (i.e. contain no unfinished edges from which they may be expanded), and cloisters when surrounded by eight tiles. At the end of the game, when there are no tiles remaining, all incomplete features are scored. Points are awarded to the players with the most followers in a feature.
If there is a tie for the most followers in any given feature, all of the tied players are awarded the full number of points. In general (see table), points are awarded for the number of tiles covered by a feature; cloisters score for neighboring tiles; and fields score based on the number of connected completed cities.
Once a feature is scored, all of the followers in that feature are returned to their owners.
| Feature | Completed during play | Game end |
|---|---|---|
| City | 2 points per tile | 1 point per tile |
| Road | 1 point per tile | 1 point per tile |
| Cloister | 1 point + 1 point for each of the surrounding tiles | 1 point + 1 point for each of the surrounding tiles |
| Fields | (Not scored) | 3 points for each completed city bordering the field. |


audioInputBuffer
Returns the input buffer.
audioOutputBuffer
Returns the output buffer.
close
Closes the input file if it's open. Returns self.
codecName
Returns name of audio or video codec.
decode
Decodes the next chunk of input data.
Output (if any) is placed in the outputBuffers.
Returns self.
decodeCodecNames
Returns a list of strings with the names of the decode codecs.
didProcess
Called after the receiver processes some more of the input buffer.
encodeCodecNames
Returns a list of strings with the names of the encode codecs.
inputCoro
Returns coroutine currently writing to the receiver.
internalCoro
Returns coroutine used for the AVCodec to process data.
isAtEnd
Returns true if the stream is at its end, false otherwise.
open
Opens the input file. Return self on success or raises an exception on error.
path
Returns path to file the receiver is reading from or writing to.
setCodecName(aSeq)
Sets the codec name. Returns self. See: encodeCodecNames and decodeCodecNames
setInputCoro(aCoro)
Private method for setting inputCoro. Returns self.
setInternalCoro(aCoro)
Private method for setting internalCoro. Returns self.
setPath(aSeq)
Sets the path to file the receiver is reading or writing to. Returns self.
setStreamDestination(anObject)
Sets the streamDestination to anObject. The didProcess method will call:
if(streamDestination, streamDestination write(outputBuffer))
outputBuffer empty
streamDestination
Returns the streamDestination.
videoCodecName
Returns the name of the video codec.
willProcess
Called before the receiver will process more of the input buffer.
If inputBuffer is empty, it pauses the receiver's coro.
write(aSequence)
Appends aSequence to the input buffer and resumes the receiver's coroutine in order to process it.
The calling coroutine (inputCoroutine) will be scheduled to resume when didProcess is called.
|


Meyse
19-Jun-18 04:32 PM
thats cool, im doodling an easy to use gui for this
im wondering if theres a case if people would want to look back at some overview or status of what they jumblrd in a gui
so if i were to create a new seed with agama for example, i can use all of these addressess of different coins to jumblr all those different coins?
or are there limitations, some coins cant be jumblred?
or there needs to be a mm available in kmd for these coins?


AppSharing interface
FrameBuffer: Interface to capture desktop or application bitmaps, find differences between bitmaps, generate blocks and compressing them.
Canvas: Interface to decompress blocks and display them.
File information
Classes
IFrameBuffer
class IFrameBuffer {
public:
static IImageBuffer * CreateImageBuffer(class IIoMux * const iomux, class UFrameBuffer * const user, class IInstanceLog * const log, class MediaConfiguration * mediaConfiguration);
virtual ~IFrameBuffer() {};
virtual void Capture(unsigned int appId) = 0; // MakeCapture, CreateDiffBlocks and CompressDiffBlocks
virtual bool Mark(unsigned int appId, int coorX, int coorY, int dimX, int dimY) = 0;
virtual void Clean(unsigned int appId) = 0;
virtual void SubscribeApplications(void) = 0;
virtual void UnsubscribeApplications(void) = 0;
virtual void SetMousePosition(int coorX, int coorY) = 0;
virtual void CloseFrameBuffer(void) = 0;
};
Overview
Base class for the frame buffer interface.
Public functions
CreateFrameBuffer
Creates an instance of the frame buffer.
Parameters
| class IIoMux * const iomux |
iomux is the IIoMux instance of the application.
|
| class UFrameBuffer * const user |
UFrameBuffer instance that will receive the callbacks from the frame buffer.
|
| class IInstanceLog * const log |
The IInstanceLog interface provides AppInstance related logs which are controlled by the log flag LOG_APPSHARING.
|
Capture
Capture a bitmap of application.
Parameters
| unsigned int appId |
id of an application.
|
Mark
Mark area in the bitmap for retransmission.
Parameters
| unsigned int appId |
id of an application.
|
| int coorX |
| int coorY |
| int dimX |
| int dimY |
Clean
Clean saved information about a previous capture.
Parameters
| unsigned int appId |
id of an application.
|
SubscribeApplications
Request the frame to provide a list of available applications and future updates.
UnsubscribeApplications
Stop receiving updates of the applications.
RequestNewPicture
Send a whole new picture of an application.
Parameters
| unsigned int appId |
id of an application.
|
CloseFrameBuffer
Close the frame buffer.
UFrameBuffer
class UFrameBuffer {
public:
virtual void Add(unsigned int id, const char * name, const char * description, const char * icon, const char * thumbnail, void * handle) {};
virtual void Update(unsigned int id, const char * name, const char * description, const char * icon, const char * thumbnail) {};
virtual void Remove(unsigned int id) {};
virtual void Event(void * buf, size_t len) {};
virtual void HasData(unsigned int id) {};
virtual void CloseComplete() {};
};
Overview
A class that receives updates from the frame buffer interface.
Public functions
Add
Provide information about an application.
Parameters
| unsigned int appId |
id of an application.
|
| const char * name |
Name of the application.
|
| const char * description |
Description of the application.
|
| const char * icon |
Icon for the application.
|
| const char * thumbnail |
Thumbnail of the application.
|
| void * handle |
Platform dependent handle for the application.
|
Update
Update information about an application.
Parameters
| unsigned int appId |
id of an application.
|
| const char * name |
Name of the application.
|
| const char * description |
Description of the application.
|
| const char * icon |
Icon for the application.
|
| const char * thumbnail |
Thumbnail of the application.
|
Remove
Remove application.
Parameters
| unsigned int appId |
id of an application.
|
HasData
Frame Buffer has data to send for an application.
Parameters
| unsigned int appId |
id of an application.
|
CloseComplete
Frame Buffer was closed.
CompressBlock
class CompressedBlock {
public:
CompressedBlock() {
this->buf = NULL;
this->len = 0;
this->first = false;
this->last = false;
};
~CompressedBlock() { if(this->buf) free(this->buf); };
int coorX;
int coorY;
int dimX;
int dimY;
int picW;
int picH;
word seq;
enum CompressionType compressionType;
enum BlockType blockType;
int numEqBlocks;
unsigned char *buf;
int len;
int msg;
bool first;
bool last;
};
Overview
Provides all the information about a compress block.
CompressedBlockNode
class CompressedBlockNode {
public:
int userId;
int appId;
bool retransmissions;
public:
CompressedBlockNode(class CompressedBlock *pCompBlock, int userId, int appId, bool retransmissions) {
this->pCompBlock = pCompBlock;
this->retransmissions = retransmissions;
this->appId = appId;
this->userId = userId;
};
~CompressedBlockNode() {
if(pCompBlock) delete pCompBlock;
}
int GetUserId(void) { return userId; };
int GetAppId(void) { return appId; };
bool GetRetransmissions(void) { return retransmissions; };
class CompressedBlock *pCompBlock;
};
Overview
Compress block for a user and application id.
ICanvas
class ICanvas {
public:
static ICanvas * CreateCanvas(class IIoMux * const iomux, class UCanvas * const user, class IInstanceLog * const log);
virtual ~ICanvas() {};
virtual void PutBlock(unsigned int userId, unsigned int appId, class CompressedBlock * block) = 0;
virtual void DrawMouse(unsigned int userId, unsigned int appId, enum MouseType mouse, int coorX, int coorY) = 0;
virtual void Add(unsigned int userId, char * userName, unsigned int appId, char * appName, char * appDesc) = 0;
virtual void Update(unsigned int userId, char * userName, unsigned int appId, char * appName, char * appDesc) = 0;
virtual void Remove(unsigned int userId, unsigned int appId) = 0;
virtual void CloseCanvas(void) = 0;
};
Overview
Base class for the canvas interface.
Public functions
CreateCanvas
Creates an instance of the canvas interface.
Parameters
| class IIoMux * const iomux |
iomux is the IIoMux instance of the application.
|
| class UCanvas * const user |
UCanvas instance that will receive the callbacks from the canvas.
|
| class IInstanceLog * const log |
The IInstanceLog interface provides AppInstance related logs which are controlled by the log flag LOG_APPSHARING.
|
PuBlock
Pass a compress block to the canvas interface.
Parameters
| unsigned int userId |
Blocks belongs to user id.
|
| unsigned int appId |
Blocks belongs to application id.
|
| class CompressedBlock * block |
Compress block.
|
DrawMouse
Draw mouse type at the specific position.
Parameters
| unsigned int userId |
Blocks belongs to user id.
|
| unsigned int appId |
Blocks belongs to application id.
|
| enum MouseType mouse |
Mouse to display.
|
| int coorX |
| int coorY |
Add
Compress Blocks for a new application received.
Parameters
| unsigned int userId |
Blocks belongs to user id.
|
| char * userName |
Name of the user.
|
| unsigned int appId |
Blocks belongs to application id.
|
| char * appName |
Name of the application.
|
| char * appDesc |
Description of the application.
|
Update
New information for an application received.
Parameters
| unsigned int userId |
Blocks belongs to user id.
|
| char * userName |
Name of the user.
|
| unsigned int appId |
Blocks belongs to application id.
|
| char * appName |
Name of the application.
|
| char * appDesc |
Description of the application.
|
Remove
Application was Removed.
Parameters
| unsigned int userId |
Blocks belongs to user id.
|
| unsigned int appId |
Blocks belongs to application id.
|
CloseCanvas
Close canvas interface
UCanvas
class UCanvas {
public:
virtual bool IsDesktopShared() = 0;
virtual bool IsSharing(void) = 0;
virtual bool GetApplicationPosition(unsigned int appId, int * coorX, int * coorY) = 0;
virtual void SetWindowFront(unsigned int appId, int coorX, int coorY) = 0;
virtual void Event(void * buf, size_t len) = 0;
virtual void Send(void * buf, size_t len) = 0;
virtual void SendTo(void * buf, size_t len, unsigned short senderId) = 0;
virtual void Resend(unsigned short seq, unsigned short senderId) = 0;
virtual void CloseComplete(void) = 0;
};
Overview
A class that receives updates from the canvas interface.
Public functions
CloseComplete
Canvas interface was closed


Current studying computer engineering technolgy at Seneca College in Toronto.
Since beginning my journey as a freelance web developer years ago, I've done remote work for agencies, consulted for startups, and collaborated with talented people to create digital products for both business and consumer use. I plan and code efficiently simple things, and I enjoy what I do.


20 photographs of the week
by Jim PowellWildfires in California, protests in Basra and Barcelona and the Day of the Dead – the past seven days, as captured by the world’s best photojournalists
Windsor, California
High winds fuel hot embers from a burning oak tree near Windsor. The Kincade fire has burned more than 75,000 acres, an area twice the size of San Francisco.
Photograph: Peter Dasilva/EPA
Simi Valley, California
Ranchers evacuate horses at a burning ranch as the Easy fire spreads near Simi Valley.
Photograph: Étienne Laurent/EPA
Nakhon Ratchasima, Thailand
A wild elephant stops a car on a road at Khao Yai national park.
Photograph: Pratya Chutipaskul/AFP/Getty Images
Barcelona, Spain
A woman shouts at police officers during clashes in Barcelona. Around 350,000 people had protested peacefully against the imprisonment of nine Catalan separatist leaders for their roles in an illegal 2017 secession bid before the clashes occurred.
Photograph: Bernat Armangué/AP
Basra, Iraq
Iraqi students take part in an anti-government demonstration in front of their university in the centre of the southern city of Basra. Recent protests in Iraq began as demonstrations about unemployment and corruption and evolved into demands for regime change.
Photograph: AFP/Getty Images
Hasakeh, Syria
Men suspected of being affiliated with Islamic State are held in a prison cell in the northeastern Syrian city of Hasakeh. Kurdish sources said that around 12,000 IS fighters including Syrians, Iraqis and foreigners from 54 countries are detained in Kurdish-run prisons in northern Syria.
Photograph: Fadel Senna/AFP/Getty Images
Barisha, Syria
This still image from video released by the US Department of Defence shows US commandoes advancing on the compound of Islamic State leader Abu Bakr al-Baghdadi.
Photograph: Jose Romero/US Department of Defense/AFP/Getty Images
Qahtaniyah, Syria
A Syrian boy looks at a convoy of US armoured vehicles patrolling fields near the northeastern town of Qahtaniyah at the border with Turkey. US forces accompanied by Kurdish fighters of the Syrian Democratic Forces patrolled part of the border for the first time since Washington withdrew troops from the area last month.
Photograph: Delil Souleiman/AFP/Getty Images
Visby, Sweden
A rider competes in the Gotland grand national enduro race at Tofta airport near Visby.
Photograph: Soren Andersson/TT News Agency/AFP/Getty Images
Reunion, France
Lava from the ‘piton de la fournaise’ flows down the east-south-east face of the volcano on the Indian Ocean island of Reunion.
Photograph: Richard Bouhet/AFP/Getty Images
Santiago, Chile
Demonstrators hide behind a chipboard panel during clashes with riot police at a protest against government economic policies. Chilean President Sebastián Piñera unveiled a major cabinet reshuffle as he struggles to find a response to more than a week of street protests that have left at least 20 people dead.
Photograph: Martin Bernetti/AFP/Getty Images
Hong Kong
Riot police walk past a woman wearing Halloween make-up as they advance towards protesters in Hong Kong.
Photograph: Kim Kyung Hoon/Reuters
Kyaukphyu, Myanmar
A bull cart transports goods from a boat at the Japanma jetty in Kyaukphyu.
Photograph: Ye Aung Thu/AFP/Getty Images
Mexico City
Participants perform during the annual Day of the Dead parade in Mexico City.
Photograph: Gustavo Graf/Reuters
Manila, Philippines
Filipinos visit the graves of their departed relatives and loved ones at a public cemetery as they mark All Saints’ Day in Manila.
Photograph: Ezra Acayan/Getty Images
Washington DC
John Hamilton, vice-president and chief engineer of Boeing, and chief executive Dennis Muilenburg look back at family members holding photographs of Boeing 737 crash victims as they testify before a Senate commerce, science and transportation committee hearing.
Photograph: Sarah Silbiger/Reuters
Nghe An, Vietnam
Le Minh Tuan, father of 30-year old Le Van Ha, who is feared to be among the 39 people found dead inside a truck in England, cries while holding Ha’s son outside their house in Vietnam’s Nghe An province.
Photograph: Nhac Nguyen/AFP/Getty Images
Concepción, Chile
Security forces detain a demonstrator during anti-government protests in Concepción.
Photograph: José Luis Saavedra/Reuters
Pitlochry, Scotland
People walk on the bridge over the river Garry in Pitlochry.
Photograph: Russell Cheyne/Reuters
Kathmandu, Nepal
A general view of Kathmandu during the Diwali festival, also known as the Tihar celebration. The festival celebrates the victory of light over darkness.
Photograph: Narendra Shrestha/EPA


This deck of data visualisations is available to allow for cross market comparisons during the second time period of data collection April 27 to May 8 2020.
This deck of data visualisations is available to allow for cross market comparisons during the second time period of data collection April 27 to May 8 2020.
Read more on COVID-19 livelihood impacts, health behaviours and awareness in Kenya, Nigeria and South Africa.


Sun Web Application Guidelines - Version 4.1
|
| Search Guidelines | Send Feedback | Developers.sun.com |
| [ Table of Contents | 0 Revision History | 1 Introduction | 2 Visual Design | 3 Windows and Pages | 4 Mastheads | 5 Top-Level Navigation | 6 Content Area | 7 Simple Elements | 8 Complex Elements | 9 Tables | 10 Topology | 11 Contextual Help | 12 Search | 13 Wizards | 14 Alerts and Messages | 15 Progress Indicators | 16 Alarms and Status Indicators | 17 Login Page | 18 Version Page | Appendices ] |
How To Use These Guidelines - An Introduction
3 Windows and Content Pages > 3.3 JavaScript Windows
JavaScript windows come in three implementation types: confirmation, alert, and prompt (all fully modal, but limited in controls). They prevent interaction with the browser so the user must take an action in the JavaScript window before moving on to the next task. These windows have a standard icon that cannot be changed, read-only text messages, and OK and Cancel buttons.
| Type |
Characteristics |
Example/ Javascript Code |
|---|---|---|
Confirmation |
Has OK and Cancel buttons. |
|
Alert |
Has OK button only. |
|
Prompt |
Prompts user for input in a single text field. |
|
R1 Use modal JavaScript windows only when users clearly benefit from not being able to interact with other windows supported by the same browser. No actions are permitted: scrolling, surfacing, moving, or editing. If less extreme modality is desired, swap all or some portion of a browser window instead of using a JavaScript window.
R2 JavaScript windows can contain secondary content pages (see 3.8 Secondary-Content Pages).
3 Windows and Content Pages > 3.3 JavaScript Windows
| [ Table of Contents | 0 Revision History | 1 Introduction | 2 Visual Design | 3 Windows and Pages | 4 Mastheads | 5 Top-Level Navigation | 6 Content Area | 7 Simple Elements | 8 Complex Elements | 9 Tables | 10 Topology | 11 Contextual Help | 12 Search | 13 Wizards | 14 Alerts and Messages | 15 Progress Indicators | 16 Alarms and Status Indicators | 17 Login Page | 18 Version Page | Appendices ] |
| Privacy Policy | Terms of Use | Trademarks | Copyright 2007 Sun Microsystems, Inc. |


Telegram account linked: {{model.settings.firstName}} {{model.settings.lastName}} {{model.settings.username}}
No Telegram account linked yet.
You can enable Telegram by either clicking Enable or sending /start {{model.settings.startToken}} to @SteemWatchBot.
Clicking Enable will take you to Telegram. Once you are there, just click Start to create the link.
Reload this page when you are finished to confirm the process was successful.


Atlantic Steel Co was founded in 2001. Our satisfied clients include major construction and development companies, architects and designers.
It shall be our commitment to maintain these standards in order to meet and exceed all customer expectations as well as our own.
Atlantic Steel Co strives to furnish and erect the best structural steel in the industry. We maintain a staff trained in utilizing the latest products and technology as professionals in the industry.


respirators masks respiratory respirator {border-style px;} #ffffff;} influenza surgical PPE use UVGI efficacy healthcare protective decontamination viral reuse virus CI, methods review terms COVID- acute demonstrated px; {font-family effective filtering font-size high-risk patients systematic (RR, double; filter health irradiation laboratory-confirmed personal preventing spread study Boston Medical, PPE, air-purifying biologic border-color border-width compared conducted coronavirus disease equipment excessive germicidal infection infectious pandemic research situations solid; studies ultraviolet using workers {font-style {font-weight (Fig.Â Cook Elsevier FigureÂ Infect PAPRs available bold centre courier; differences dose em; especially face facepiece filtration highly illness infections masks, outbreak pandemic, possible previous protecting protection pt;} randomized reported resource respirators, respirators. risk severe shortage structural type types used workers.


| Category: containers | Component type: type |
Map has the important property that inserting a new element into a map does not invalidate iterators that point to existing elements. Erasing an element from a set also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased.
struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; int main() { map<const char*, int, ltstr> months; months["january"] = 31; months["february"] = 28; months["march"] = 31; months["april"] = 30; months["may"] = 31; months["june"] = 30; months["july"] = 31; months["august"] = 31; months["september"] = 30; months["october"] = 31; months["november"] = 30; months["december"] = 31; cout << "june -> " << months["june"] << endl; map<const char*, int, ltstr>::iterator cur = months.find("june"); map<const char*, int, ltstr>::iterator prev = cur; map<const char*, int, ltstr>::iterator next = cur; ++next; --prev; cout << "Previous (in alphabetical order) is " << (*prev).first << endl; cout << "Next (in alphabetical order) is " << (*next).first << endl; }
| Parameter | Description | Default |
|---|---|---|
| Key | The map's key type. This is also defined as map::key_type. | |
| Data | The map's data type. This is also defined as map::data_type. | |
| Compare | The key comparison function, a Strict Weak Ordering whose argument type is key_type; it returns true if its first argument is less than its second argument, and false otherwise. This is also defined as map::key_compare. | less<Key> |
| Alloc | The map's allocator, used for all internal memory management. | alloc |
| Member | Where defined | Description |
|---|---|---|
| key_type | Associative Container | The map's key type, Key. |
| data_type | Pair Associative Container | The type of object associated with the keys. |
| value_type | Pair Associative Container | The type of object, pair<const key_type, data_type>, stored in the map. |
| key_compare | Sorted Associative Container | Function object that compares two keys for ordering. |
| value_compare | Sorted Associative Container | Function object that compares two values for ordering. |
| pointer | Container | Pointer to T. |
| reference | Container | Reference to T |
| const_reference | Container | Const reference to T |
| size_type | Container | An unsigned integral type. |
| difference_type | Container | A signed integral type. |
| iterator | Container | Iterator used to iterate through a map. [1] |
| const_iterator | Container | Const iterator used to iterate through a map. |
| reverse_iterator | Reversible Container | Iterator used to iterate backwards through a map. [1] |
| const_reverse_iterator | Reversible Container | Const iterator used to iterate backwards through a map. |
| iterator begin() | Container | Returns an iterator pointing to the beginning of the map. |
| iterator end() | Container | Returns an iterator pointing to the end of the map. |
| const_iterator begin() const | Container | Returns a const_iterator pointing to the beginning of the map. |
| const_iterator end() const | Container | Returns a const_iterator pointing to the end of the map. |
| reverse_iterator rbegin() | Reversible Container | Returns a reverse_iterator pointing to the beginning of the reversed map. |
| reverse_iterator rend() | Reversible Container | Returns a reverse_iterator pointing to the end of the reversed map. |
| const_reverse_iterator rbegin() const | Reversible Container | Returns a const_reverse_iterator pointing to the beginning of the reversed map. |
| const_reverse_iterator rend() const | Reversible Container | Returns a const_reverse_iterator pointing to the end of the reversed map. |
| size_type size() const | Container | Returns the size of the map. |
| size_type max_size() const | Container | Returns the largest possible size of the map. |
| bool empty() const | Container | true if the map's size is 0. |
| key_compare key_comp() const | Sorted Associative Container | Returns the key_compare object used by the map. |
| value_compare value_comp() const | Sorted Associative Container | Returns the value_compare object used by the map. |
| map() | Container | Creates an empty map. |
| map(const key_compare& comp) | Sorted Associative Container | Creates an empty map, using comp as the key_compare object. |
template <class InputIterator> map(InputIterator f, InputIterator l) [2] |
Unique Sorted Associative Container | Creates a map with a copy of a range. |
template <class InputIterator> map(InputIterator f, InputIterator l, const key_compare& comp) [2] |
Unique Sorted Associative Container | Creates a map with a copy of a range, using comp as the key_compare object. |
| map(const map&) | Container | The copy constructor. |
| map& operator=(const map&) | Container | The assignment operator |
| void swap(map&) | Container | Swaps the contents of two maps. |
pair<iterator, bool> insert(const value_type& x) |
Unique Associative Container | Inserts x into the map. |
iterator insert(iterator pos, const value_type& x) |
Unique Sorted Associative Container | Inserts x into the map, using pos as a hint to where it will be inserted. |
template <class InputIterator> void insert(InputIterator, InputIterator) [2] |
Unique Sorted Associative Container | Inserts a range into the map. |
| void erase(iterator pos) | Associative Container | Erases the element pointed to by pos. |
| size_type erase(const key_type& k) | Associative Container | Erases the element whose key is k. |
| void erase(iterator first, iterator last) | Associative Container | Erases all elements in a range. |
| void clear() | Associative Container | Erases all of the elements. |
| iterator find(const key_type& k) | Associative Container | Finds an element whose key is k. |
| const_iterator find(const key_type& k) const | Associative Container | Finds an element whose key is k. |
| size_type count(const key_type& k) | Unique Associative Container | Counts the number of elements whose key is k. |
| iterator lower_bound(const key_type& k) | Sorted Associative Container | Finds the first element whose key is not less than k. |
| const_iterator lower_bound(const key_type& k) const | Sorted Associative Container | Finds the first element whose key is not less than k. |
| iterator upper_bound(const key_type& k) | Sorted Associative Container | Finds the first element whose key greater than k. |
| const_iterator upper_bound(const key_type& k) const | Sorted Associative Container | Finds the first element whose key greater than k. |
pair<iterator, iterator> equal_range(const key_type& k) |
Sorted Associative Container | Finds a range containing all elements whose key is k. |
pair<const_iterator, const_iterator> equal_range(const key_type& k) const |
Sorted Associative Container | Finds a range containing all elements whose key is k. |
data_type& operator[](const key_type& k) [3] |
map | See below. |
bool operator==(const map&, const map&) |
Forward Container | Tests two maps for equality. This is a global function, not a member function. |
bool operator<(const map&, const map&) |
Forward Container | Lexicographical comparison. This is a global function, not a member function. |
| Member function | Description |
|---|---|
data_type& operator[](const key_type& k) [3] |
Returns a reference to the object that is associated with a particular key. If the map does not already contain such an object, operator[] inserts the default object data_type(). [3] |
[1] Map::iterator is not a mutable iterator, because map::value_type is not Assignable. That is, if i is of type map::iterator and p is of type map::value_type, then *i = p is not a valid expression. However, map::iterator isn't a constant iterator either, because it can be used to modify the object that it points to. Using the same notation as above, (*i).second = p is a valid expression. The same point applies to map::reverse_iterator.
[2] This member function relies on member template functions, which at present (early 1998) are not supported by all compilers. If your compiler supports member templates, you can call this function with any type of input iterator. If your compiler does not yet support member templates, though, then the arguments must either be of type const value_type* or of type map::const_iterator.
[3] Since operator[] might insert a new element into the map, it can't possibly be a const member function. Note that the definition of operator[] is extremely simple: m[k] is equivalent to (*((m.insert(value_type(k, data_type()))).first)).second. Strictly speaking, this member function is unnecessary: it exists only for convenience.


I still Love you the same even though you are so old now, 21 years old, yikes. Btw you owe me like £100 for making this website.  This is starting to look like a wall of text to tell someone to stop smoking xD


I am mean stack developer with 2+ years experience. majorly working with angular2+ framework. I adapt myself to learn and work on any new Technologies quickly.
iAdaptime is an web based ERP application, its front end was completely developed in English & French language as its counterpart is France, it has two main phase, MODEL TIME – this completely involves the designing part of the screens including the dynamic tables and forms for the end user, BUSSINESS TIME – this completely involves the run time of the dynamically designed screens for the end user which includes all the CRUD operations the screen varies for each and every users.
Iyris is a product based company to develop web Application and Hybrid Mobile Applications.
Apart from being a web developer, I enjoy most of my time with music and movies. In the winter, I am an avid skier and novice ice climber. During the summer months I enjoy swimming.
Keep Physical fitness regularly .


{{modalError.message}}
Please provide a valid email
Leave blank and we'll create one automatically
No customers found


{{define "styles"}}{{end}} {{define "main"}}
There are no documents under this project.
This project has no members


MAGIC RECIPES
Enter your combinations of ingredients and favourite dishIngredients in CSV Recipe
| Recipe | Recipe Page | Ingredients | Picture |
|---|---|---|---|
| Recipe | Recipe Page | Ingredients | Picture |
| Recipe | Recipe Page | Ingredients | Picture |
|---|---|---|---|
| Recipe | Recipe Page | Ingredients | Picture |


Mouse Maze
Game Logic
- Language - p5.js , javascript
- Setting array after generating random values and making maze
- Level up - Inside 60 sec match two colored squares
Website & Publishing Design
- Language - p5.js , html, jquery libraries
- Static Design (image) - Generate many squares like maze style
- Dynamic Design (web) - With library scripts, User seems like that is in maze when enter this website.
- Font - Roboto
Developed website design & front coding
Developed game logic with p5.js & javascript
Email [Jiwoo Kim]
<EMAIL_ADDRESS>Email [Ian Cheo]
portfolioian@gmail.com


How to read the visualization
There are different possible way to read the visualization.
First, it's possible to observe the pattern created by the square at the top, where media cross their orientation. Each group of ten words represents the ten most used words from the specific speaker (tf highest value), those colored in gray are those used also by other speakers, and so less relevant for characterizing the speech made by these speakers. The words colored in blue instead are used only by the speaker they are associated. Then it's possible to display the words from the groups at the top, passing the mouse over the squares and clusters that most interest, and turn to see the words represented. Otherwise you can start from the specific words that interest and determine who uses them and in what amounts. Furthermore, the words in gray are ordered and represented by a gray gradation that goes from a darker to a higher nuance, based on the number of repetitions of the word within the visualization.


Hello i am Eugene Dzikunu
About me
i am a
teacher
at Mat-Michael International School from
Dome
Interests
My interests include:
Teaching
listening to musix
playing soccer
love to bet as well
taught by ispace
Make 10 appear


Library: Foundation
Package: Streams
Header: Poco/BinaryWriter.h
Description
A convenient wrapper for using Buffer and MemoryStream with BinarWriter.
Inheritance
Direct Base Classes: BinaryWriter
All Base Classes: BinaryWriter
Member Summary
Member Functions: data, stream
Inherited Functions: bad, byteOrder, fail, flush, good, operator <<, stream, write7BitEncoded, writeBOM, writeRaw
Constructors
BasicMemoryBinaryWriter
BasicMemoryBinaryWriter(
Buffer < T > & data,
StreamByteOrder byteOrder = NATIVE_BYTE_ORDER
);
BasicMemoryBinaryWriter
BasicMemoryBinaryWriter(
Buffer < T > & data,
TextEncoding & encoding,
StreamByteOrder byteOrder = NATIVE_BYTE_ORDER
);
Destructor
~BasicMemoryBinaryWriter
Member Functions
data
Buffer < T > & data();
data
const Buffer < T > & data() const;
stream
const MemoryOutputStream & stream() const;
stream
MemoryOutputStream & stream();


Files
Headings
History
v1.2.0 2016 November 6
v1.1.1 2016 May 2
v1.1.0 2016 May 2
v1.0.0 2013 December 10
History
v1.2.0 2016 November 6
Rejigged internals, functionality should remain exactly the same
Documentation is now generated from source code
Added Flow Type Comments
More efficient evaluation of ignore checks
v1.1.1 2016 May 2
Fixed
browser
field
v1.1.0 2016 May 2
Converted from CoffeeScript to ESNext
v1.0.0 2013 December 10
Initial release extracted from
balupton/bal-util


Home
About
Get Started
Blog
Documentation
Examples
Get Help
rest-tool
Table of Content
Create and maintain API projects
Create new projects
The structure of a project
The
config.yml
file
Upgrade an existing API project
Create and maintain services
Service definitions
The structure of the
service.yml
file
Create new services
Service stereotypes
Add new service to the project
Add new service to the project in bulk mode
Configure the services
Create mock data
Validation
Create dynamic services
Using the server
The mock server configuration
Start the server
Use as static mock server
Use as static content provider
Implement dynamic mocking behavior
Change the response status code
Use the proxy
Documenting the REST API project
Generate documentation
Customize the generated documentation
Testing the api
Generate test cases
Run test cases
Add new test-case templates
References


Mac Bashing
4 min read
It turns out that I have to use a piece of software that works best on a Mac. Time for a rant. Lets stroll over to Apple's reasons to buy a Macbook and start with the category that prompted today's flamage.

From 3D molecular modeling and DNA imaging ....  Watch that bioinformatics software crawl, watch it wither, watch it crash. Now lets go on to Apple's description of their
And now it’s even faster with the latest-generation Intel processors, high-performance graphics....
That "high-performance graphics" is going to cost you.
PCIe-based flash storage
Apple is nice enough to use a hard drive type that is incompatible with every other laptop on the market. This helps them charge you the special Mac user price on your upgrades. Oh, and don't forget the soldered RAM that is not replaceable by the user. Some things haven't changed since the days of the old Macs that I remember using in elementary school.
[caption id="attachment_1003" align="aligncenter" width="480"] Except for the monitor this is still as true now as it was in 1998. Via http:/
Now lets visit the Mac OS X page
OS X is the operating system that powers every Mac. Built on a rock-solid UNIX foundation
As far as I can tell the "UNIX foundation" in OS X consists of two things
- Buying the rights to the UNIX trademark so Apple can call their crappy bloatware OS UNIX
- Copying and pasting a bunch of code from operating systems that actually have a "rock-solid UNIX foundation" like Linux and BSD
Apple doesn't obey the fundamental rules that guide the design of real UNIXes. These principles are famously summed up by Doug McIlroy as follows "This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface."
Instead of writing programs that do one thing and do it well, Apple prefers to write bloatware that does many things but none of it well. Instead of writing programs to work together and use text for input and output, Apple writes programs that output weird proprietary file formats, and that refuse to work with command line interfaces.
it’s engineered to take full advantage of what the hardware is capable of.
Hmm. Mac OS more seems built to burn through the RAM and run slow.
And it’s designed to deliver the most intuitive and integrated computer experience in the world.
I wonder if Apple should design their user interfaces in a way that actually allows people to get real work done instead of nerfing their OS into an "intuitive" environment for lusers who refuse to learn how their computer actually works.
If you already use an iPhone or iPad, a Mac will feel instantly familiar.
Sure. But I use my Ipad as an appliance for web browsing and other simple tasks. However, I expect to get real work done on my laptop.


Java 2D™ Graphics and Imaging
The Java 2DTM API is a set of
classes for advanced 2D graphics and imaging. It encompasses line
art, text, and images in a single comprehensive model. The API
provides extensive support for image compositing and alpha channel
images, a set of classes to provide accurate color space definition
and conversion, and a rich set of display-oriented imaging
operators. These classes are provided as additions to the
java.awt and java.awt.image packages.
Overview
API Specification
Tutorials and Programmer's
Guides
API Enhancements
More Information


{{ define "main" }} {{ partial "jumbotron-bls-acls-pals" (dict "imageUrl" .Params.image "title" .Title "subtitle" .Params.subtitle) }}
We provide onsite CPR certification in the Central Kentucky area.
Healthcare providers of all types are required to renew their American Heart Association credentials every two years. Noble Nurses makes this convenient by coming to your home or place of business. Certification courses are also regularly available at our office in Lexington, Kentucky.
Whether you need to obtain or renew your BLS, ACLS, or PALS certifications, Noble Nurses provides training in a relaxed and enjoyable environment. Call today to schedule your next certification course!
For your convenience Noble Nurses will come to your place of business for CPR training. This is a popular service for hospitals, doctor's and dentist's offices, nursing homes, companies, stores, daycares, and churches. A travel fee is added for locations outside of Lexington, Kentucky.
Noble Nurses is located at 2692 Richmond Road, Suite 220 in Lexington, Kentucky. You will feel at home in our cozy office space. Our classrooms are setup for individual and group CPR training.


I had some friends visit from out of town for a low scale party that I was having. Each friend brought over whatever they could find, which ended up being a lot. After partying it up all night, I could tell that the only drugs that were still in my system at that time were LSD and adderall, so I figured that I would try to end my night. I remembered that I had recently ordered some kratom and that it is used as a depressant. Well, I brewed up some tea for myself and the other two friends that were tripping with me. We all drank the tea, and a few minutes later we all noticed an increase in our visual hallucinations. It was relaxing and pleasant simultaneously. I don't know if other people experienced this, but me and the two of my friends all noticed similar effects. There are other variables that might have played a role in this, but I am just reporting what I noticed.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Fortran Programming
Contents
Fortran Programming#
Table of Contents#
- Guide to Fortran 2008 Programming
- Section 1.8 Example 2: Quadratic Equation
- Section 1.16: Factorial Recursion
- Section 2.1: Statement Blocks
- Section 2.1: Associate Construct
- Section 3.4: Putting Procedures in a Module
- Section 3.6: Median of Three
- Section 3.8: Argument Passing
- Section 3.17: Case Study: Adaptive Numerical Integration
- Section 4.1: Elsewhere Example
- Section 8.1: Submodules
- Section 8.2: Time Matrix Multiply
- Section 8.7: Generic Elemental Procedures
- Section 8.8: Findloc Function
- Fortran MOOC
- Section: Arrays
- Section Arrays: Allocate from Source
- Section Arrays: Array Arithmetic
- Section Arrays: Array Elements
- Section Arrays: Array Initialization
- Section Arrays: Array Timing
- Section Arrays: Assumed
- Section Arrays: Compute Factorial
- Section Arrays: Elemental Subroutine
- Section Arrays: Enlarge Array
- Section Arrays: Identity
- Section Arrays: Linear Transform
- Section Arrays: Matrix
- Section Arrays: Max Array
- Section Arrays: Normalize
- Section Arrays: Normalize Performance
- Section Arrays: Reshape
- Section Arrays: Subarrays
- Section Arrays: Submatrices
- Section Arrays: Trace
- Section: Floating Point
- Section: Call By Semantics
- Section: Computing Pi
- Section: Implicit vs Explicit Loops
- Section: Ball Throw
- Section: BLAS/LAPACK
- Section: Arrays
Resources and Textbooks Used#
In this section we will be programming in Fortran using examples and techniques found in these books and resources:
“Guide to Fortran 2008 Programming” by Walter S.Brainerd#
This book may be purchased here:
Amazon page to purchase “Guide to Fortran 2008 Programming” by Walter S. Brainerd”
“Introduction to Programming Using Fortran” from the Open Textbook Library#
This online resource may be obtained here:
Introduction to Programming using Fortran
“Modern Fortan” by Milan Curcic (Manning Publications)#
This book may be purchased from: Modern Fortran: Building Efficient Parallel Applications
PRACE MOOC on “Fortran for Scientific Programming” by FutureLearn#
This online resource may be obtained from Github PRACE MOOC on “Fortran for Scientific Programming”
Project Code on Github#
Project code is available at the following Github repositories:
Worked Examples in Guide to Fortran 2008 Programming
Worked Examples in Introduction to Programming Using Fortran
Worked Examples in Modern Fortran
PRACE MOOC on “Fortran for Scientific Programming” by FutureLearn


Source[+Out, +Mat] + | v Flow[-In, +Out, +Mat] + | v Sink[-In, +Mat] ⥥ RunnableGraph
+------------+ +--------------------------------+ | | | | | Observer |---<> Subject | | | | | +------------+ +--------------------------------+ +------------+ | + observerCollection | | + notify() + +--------------------------------+ +------------+ | + registerObserver(observer) | | + unregisterObserver(observer) | | + notifyObservers() | +--------------------------------+
+----------------+ +----------------------------------+ | | | | | Observer |---<> Observable | | | | | +----------------+ +----------------------------------+ +----------------+ +----------------------------------+ | + onNext() + | + subscribe(subscriber) | | + onError() + | + subscribe(observer)(scheduler) | | + onComplete() + | + consumeWith(consumer) | +----------------+ +----------------------------------+ ^ | +-------------+ | | | Subscriber | | | +-------------+ | + scheduler | +-------------+ +-------------+
Observable[+Out] + | v Transformer[-In, +Out] + | v Observer[-In] ⥥ Cancelable
Observable[+Out] + | v Transformer[-In, +Out] <=> Observable[A] => Observable[B] + | v Observer[-In] ⥥ Cancelable
Observable[+Out] + | v Observer[-In] ⥥ Cancelable
Observable[+Out] + | v Consumer[-In, +Res] ⥥ Task[Res]
object HelloGuys extends App {
def helloGuys(names: String*): RunnableGraph[Future[Done]] = {
Source(names.toList)
.toMat(Sink.foreach(n => println(s"Hello $n !")))(Keep.right)
}
implicit val actorSystem = ActorSystem("hello-guys-app")
implicit val actorMaterializer = ActorMaterializer()
import actorSystem.dispatcher
helloGuys("Scala.IO", "guys").run().onComplete {
case _ => actorSystem.terminate()
}
}
object HelloGuys extends App {
def helloGuys(names: String*) = {
Observable(names: _*).consumeWith(Consumer.foreach(n =>
println(s"Hello $n !")))
}
import monix.execution.Scheduler.Implicits.global
val cancelable: CancelableFuture[Unit] = helloGuys("Scala.IO", "guys").runAsync
Await.result(cancelable, Duration.Inf)
}
+---------+ +-----------+ +------+ | | | | | | +---> NGINX +---> Web App +---> DB | | | | | | | +---------+ +-----------+ +------+
+-----------------------------------------------------+ | Cache Processor | +-----------------------------------------------------+ | | | +----------+ | | +----------+ | | | +--------+ +----------+ | | +----------+ | | | | | | | | | | | | | URL +----> HTTP | | |----> Reporter | | | | Feeder | | Client | |-+ | | | | | | | +-+ | | | | +--------+ +----------+ +----------+ | | | +-----------------------------------------------------+
trait URLFeeder {
def url: Source[URLVal, NotUsed]
}
class FileURLFeeder(fileUrlFeederConfig: FileUrlFeederConfig) extends URLFeeder {
override val url: Source[URLVal, NotUsed] = FileIO
.fromPath(new File(fileUrlFeederConfig.fileLocation).toPath)
.via(
Framing.delimiter(ByteString("\n"),
maximumFrameLength = 256,
allowTruncation = true))
.map(bs => URLVal(bs.utf8String))
.mapMaterializedValue(_ => NotUsed)
}
trait URLFeeder {
def url: Observable[URLVal]
}
class FileURLFeeder(fileUrlFeederConfig: FileUrlFeederConfig) extends URLFeeder {
override val url: Observable[URLVal] = Observable
.fromLinesReader(
new BufferedReader(
new InputStreamReader(
new FileInputStream(fileUrlFeederConfig.fileLocation),
StandardCharsets.UTF_8)))
.map(URLVal)
}
trait HttpClient {
def httpGet: Flow[URLVal, (URLVal, Either[Throwable, HttpStatusVal]), NotUsed]
}
class SttpHttpClient(cfg: HttpClientConfig)(
implicit b: SttpBackend[Future, Source[ByteString, Any]]) extends HttpClient {
import scala.concurrent.ExecutionContext.Implicits.global
override val httpGet =
Flow[URLVal].mapAsyncUnordered(httpClientConfig.maxClient)(url =>
get(url).map(url -> _))
private def get(url: URLVal): Future[Either[Throwable, HttpStatusVal]] = {
sttp.get(StringContext(url.value).uri()).send()
.map(r => Right(HttpStatusVal(r.code)))
.recover { case t: Throwable => Left(t) }
}
}
trait HttpClient {
def httpGet: Transformer[URLVal, (URLVal, Either[Throwable, HttpStatusVal])]
}
class SttpHttpClient(httpClientConfig: HttpClientConfig)(
implicit b: SttpBackend[Task, Observable[ByteBuffer]]) extends HttpClient {
override val httpGet: Transformer[URLVal, (URLVal, Either[Throwable, HttpStatusVal])] =
_.mapAsync(httpClientConfig.maxClient)(url =>
get(url).map(url -> _))
private def get(url: URLVal): Task[Either[Throwable, HttpStatusVal]] = {
sttp.get(StringContext(url.value).uri()).send()
.map(r => Right(HttpStatusVal(r.code)))
.onErrorRecover { case t: Throwable => Left(t) }
}
}
trait Reporter[T] {
def urlBucketsHandler: URLBuckets => T
lazy val report: Sink[(URLVal, Either[Throwable, HttpStatusVal]), Future[T]] =
Flow[(URLVal, Either[Throwable, HttpStatusVal])]
.fold((Seq[CachedUrl](), Seq[NotCachedUrl](), Seq[InvalidUrl]())) {
case ((cachedUrl, notCachedUrl, invalidUrl), (url, eitherResponse)) =>
eitherResponse.fold(
_ => (cachedUrl, notCachedUrl, url.invalid +: invalidUrl),
r =>
if (r.isSuccess)
(url.cached +: cachedUrl, notCachedUrl, invalidUrl)
else
(cachedUrl, url.notCached +: notCachedUrl, invalidUrl)
)
}
.map(urlBucketsHandler)
.toMat(Sink.head)(Keep.right)
}
trait Reporter[T] {
def urlBucketsHandler: URLBuckets => T
val report: Consumer[(URLVal, Either[Throwable, HttpStatusVal]), T] =
Consumer
.foldLeft[URLBuckets, (URLVal, Either[Throwable, HttpStatusVal])](
(Seq[CachedUrl](), Seq[NotCachedUrl](), Seq[InvalidUrl]())
) {
case ((cachedUrl, notCachedUrl, invalidUrl), (url, eitherResponse)) =>
eitherResponse.fold(
_ => (cachedUrl, notCachedUrl, url.invalid +: invalidUrl),
r =>
if (r.isSuccess)
(url.cached +: cachedUrl, notCachedUrl, invalidUrl)
else
(cachedUrl, url.notCached +: notCachedUrl, invalidUrl)
)
}.map(urlBucketsHandler)
}
class MessageReporter extends Reporter[String] {
def listUrls(urls: Seq[URLVal]): String = urls.mkString(" - ", "\n - ", "\n")
override val urlBucketsHandler: URLBuckets => String = {
case (cachedUrl, notCachedUrl, invalidUrl) =>
val sb = new StringBuilder()
sb.append(s"${cachedUrl.size} urls cached\n")
if (notCachedUrl.nonEmpty) {
sb.append(s"${notCachedUrl.size} urls haven't been cached :\n")
sb.append(listUrls(notCachedUrl))
}
if (invalidUrl.nonEmpty) {
sb.append(s"${invalidUrl.size} invalid urls:\n")
sb.append(listUrls(invalidUrl))
}
sb.toString()
}
}
class CacheProcessor[T](urlFeeder: URLFeeder,
httpClient: HttpClient,
reporter: Reporter[T])(
implicit materializer: Materializer) {
def cache: Future[T] =
urlFeeder.url
.via(httpClient.httpGet)
.runWith(reporter.report)
}
class CacheProcessor[T](urlFeeder: URLFeeder,
httpClient: HttpClient,
reporter: Reporter[T])(implicit scheduler: Scheduler) {
def cache: CancelableFuture[T] =
urlFeeder.url
.transform(httpClient.httpGet)
.consumeWith(reporter.report)
.runAsync
}
object AkkaStreamMain extends App {
implicit val system: ActorSystem = AkkaModule.actorSystem
implicit val materializer: ActorMaterializer = AkkaModule.actorMaterializer
import system.dispatcher
val httpClientConfig: HttpClientConfig = Configs[HttpClientConfig]
.get(ConfigFactory.load(), "cache.http-client").value
implicit val httpBackend: SttpBackend[Future, Source[ByteString, Any]] = AkkaHttpBackend.usingActorSystem(system)
val httpClient: SttpHttpClient = new SttpHttpClient(httpClientConfig)
val fileUrlFeederConfig: FileUrlFeederConfig = Configs[FileUrlFeederConfig]
.get(ConfigFactory.load(), "cache.file-url-feeder").value
val urlFeeder: FileURLFeeder = new FileURLFeeder(fileUrlFeederConfig)
val reporter: MessageReporter = new MessageReporter()
val cacheProcessor: CacheProcessor[String] = new CacheProcessor[String](urlFeeder, httpClient, reporter)
cacheProcessor.cache onComplete {
case Failure(e) =>
e.printStackTrace()
system.terminate()
case Success(message) =>
println(message)
system.terminate()
}
}
object MonixMain extends App {
import monix.execution.Scheduler.Implicits.global
val httpClientConfig: HttpClientConfig = Configs[HttpClientConfig]
.get(ConfigFactory.load(), "cache.http-client").value
implicit val httpBackend: SttpBackend[Task, Observable[ByteBuffer]] = AsyncHttpClientMonixBackend()
val httpClient: SttpHttpClient = new SttpHttpClient(httpClientConfig)
val fileUrlFeederConfig: FileUrlFeederConfig = Configs[FileUrlFeederConfig]
.get(ConfigFactory.load(), "cache.file-url-feeder").value
val urlFeeder: FileURLFeeder = new FileURLFeeder(fileUrlFeederConfig)
val bucketHandler: URLBuckets => String = BucketHandler.messageBuilderBucketHandler
val reporter: Reporter[String] = new MessageReporter()
val cacheProcessor: CacheProcessor[String] = new CacheProcessor[String](urlFeeder, httpClient, reporter)
cacheProcessor.cache onComplete {
case Failure(e) =>
e.printStackTrace()
httpBackend.close()
case Success(message) =>
println(message)
httpBackend.close()
}
}
class NumbersSource extends GraphStage[SourceShape[Int]] {
val out: Outlet[Int] = Outlet("NumbersSource")
override val shape: SourceShape[Int] = SourceShape(out)
override def createLogic(inheritedAttributes: Attributes): GraphStageLogic =
new GraphStageLogic(shape) {
private var counter = 1
setHandler(out, new OutHandler {
override def onPull(): Unit = {
push(out, counter)
counter += 1
}
})
}
}
val numbersSource: Source[Int, NotUsed] = Source.fromGraph(new NumbersSource())
numbersSource.take(5).runForeach(println)
def numbersObservable: Observable[Int] = {
def asyncBoundary(cancelable: BooleanCancelable, ack: Future[Ack],
downstream: Subscriber[Int], em: ExecutionModel, nextCounter: Int)
(implicit s: Scheduler): Unit = {
...
}
@tailrec
def loop(c: BooleanCancelable, downstream: Subscriber[Int], em: ExecutionModel,
counter: Int, syncIndex: Int)(implicit s: Scheduler): Unit = {
...
}
Observable.create[Int](Unbounded) { downstream =>
val cancelable = BooleanCancelable()
val scheduler = downstream.scheduler
loop(cancelable, downstream, scheduler.executionModel, 1, 0)(scheduler)
cancelable
}
}
@tailrec
def loop(c: BooleanCancelable, downstream: Subscriber[Int], em: ExecutionModel,
counter: Int, syncIndex: Int)(implicit s: Scheduler): Unit = {
if (c.isCanceled)
downstream.onComplete()
else {
val ack = downstream.onNext(counter)
val nextCounter = counter + 1
val nextIndex =
if (ack == Continue) em.nextFrameIndex(syncIndex)
else if (ack == Stop) -1
else 0
if (nextIndex > 0)
loop(c, downstream, em, nextCounter, nextIndex)
else if (nextIndex == 0)
asyncBoundary(c, ack, downstream, em, nextCounter)
}
}
def asyncBoundary(cancelable: BooleanCancelable, ack: Future[Ack],
downstream: Subscriber[Int], em: ExecutionModel, nextCounter: Int)
(implicit s: Scheduler): Unit = {
ack.onComplete {
case Success(success) =>
if (success == Continue)
loop(cancelable, downstream, em, nextCounter, 0)
case Failure(ex) =>
s.reportFailure(ex)
}
}
numbersObservable.take(5).foreach(println)
class Map[A, B](f: A => B) extends GraphStage[FlowShape[A, B]] {
val in = Inlet[A]("Map.in")
val out = Outlet[B]("Map.out")
override val shape = FlowShape.of(in, out)
override def createLogic(attr: Attributes): GraphStageLogic =
new GraphStageLogic(shape) {
setHandler(in, new InHandler {
override def onPush(): Unit = push(out, f(grab(in)))
})
setHandler(out, new OutHandler {
override def onPull(): Unit = pull(in)
})
}
}
val plusOneFlow: Flow[Int, Int, NotUsed] = Flow.fromGraph(new Map((a:Int) => a + 1))
Source(1 to 5).via(plusOneFlow).runForeach(println)
class MapOperator[-A, +B](f: A => B) extends Operator[A, B] {
def apply(out: Subscriber[B]): Subscriber[A] = {
new Subscriber[A] {
implicit val scheduler = out.scheduler
private[this] var isDone = false
def onNext(elem: A): Future[Ack] = {
var streamError = true
try {
val next = f(elem)
streamError = false
out.onNext(next)
} catch {
case NonFatal(ex) if streamError =>
onError(ex)
Stop
}
}
def onError(ex: Throwable): Unit = ...
def onComplete(): Unit = ...
}
}
}
class MapOperator[-A, +B](f: A => B) extends Operator[A, B] {
...
def onError(ex: Throwable): Unit =
if (!isDone) {
isDone = true
out.onError(ex)
}
def onComplete(): Unit =
if (!isDone) {
isDone = true
out.onComplete()
}
}
}
val plusOneOperator = new MapOperator((a:Long) => a + 1)
Observable.range(1,6,1).liftByOperator(plusOneOperator).foreach(println)
class StdoutSink extends GraphStageWithMaterializedValue[SinkShape[Int], Future[Done]] {
val in: Inlet[Int] = Inlet("StdoutSink")
override val shape: SinkShape[Int] = SinkShape(in)
override def createLogicAndMaterializedValue(inheritedAttributes: Attributes) = {
val promise = Promise[Done]()
val logic: GraphStageLogic = new GraphStageLogic(shape) with InHandler {
...
}
(logic, promise.future)
}
}
val logic: GraphStageLogic = new GraphStageLogic(shape) with InHandler {
override def preStart(): Unit = pull(in)
override def onPush(): Unit = {
println(grab(in))
pull(in)
}
override def onUpstreamFinish(): Unit = {
super.onUpstreamFinish()
promise.trySuccess(Done)
}
override def onUpstreamFailure(ex: Throwable): Unit = {
super.onUpstreamFailure(ex)
promise.tryFailure(ex)
}
setHandler(in, this)
}
val stdoutSink: Sink[Int, Future[Done]] = Sink.fromGraph(new StdoutSink())
Source(1 to 5).toMat(stdoutSink)(Keep.right).run()
class StdoutConsumer[A] extends Consumer.Sync[A, Unit] {
def createSubscriber(cb: Callback[Unit], s: Scheduler): (Subscriber.Sync[A], AssignableCancelable) = {
val out = new Subscriber.Sync[A] {
implicit val scheduler = s
private[this] var isDone = false
def onNext(elem: A): Ack = {
println(elem)
Continue
}
def onComplete(): Unit = if (!isDone) {
isDone = true
cb.onSuccess(())
}
def onError(ex: Throwable): Unit = if (!isDone) {
isDone = true
cb.onError(ex)
}
}
(out, AssignableCancelable.dummy)
}
}
Observable.range(1,6,1).consumeWith(new StdoutConsumer()).runAsync
+-------+ | | +--> ^10 +--+ +-------------+ | | | | +---------+ IN | | | +-------+ | | | OUT +---> Broadcast +-+ +-+ Merge +---> | | | +-------+ | | | +-------------+ | | | | +---------+ +--> *10 +--+ | | +-------+
val myFlowGraph: Graph[FlowShape[Int, Int], NotUsed] = GraphDSL.create() {
implicit builder =>
import akka.stream.scaladsl.GraphDSL.Implicits._
val bcast = builder.add(Broadcast[Int](2))
val merge = builder.add(Merge[Int](2))
val by10 = Flow[Int].map(_ * 10)
val pow10 = Flow[Int].map(Math.pow(_, 10).toInt)
bcast ~> pow10 ~> merge
bcast ~> by10 ~> merge
FlowShape(bcast.in, merge.out)
}
val flow: Flow[Int, Int, NotUsed] = Flow.fromGraph(myFlowGraph)
Source(1 to 5).via(flow).runForeach(println)
| Controlled | Async | Ordered |
|---|---|---|
def balancer[In, Out](worker: Flow[In, Out, Any], workerCount: Int):
Flow[In, Out, NotUsed] = {
import GraphDSL.Implicits._
Flow.fromGraph(GraphDSL.create() { implicit b =>
val balancer = b.add(Balance[In](workerCount, waitForAllDownstreams = true))
val merge = b.add(Merge[Out](workerCount))
for (_ <- 1 to workerCount) {
balancer ~> worker.async ~> merge
}
FlowShape(balancer.in, merge.out)
})
}
val processedJobs: Source[Result, NotUsed] = myJobs.via(balancer(worker, 3))
| Controlled | Async | Ordered |
|---|---|---|
val sumConsumer = Consumer.foldLeft[Long,Long](0L)(_ + _)
val loadBalancer = {
Consumer
.loadBalance(parallelism=10, sumConsumer)
.map(_.sum)
}
val observable: Observable[Long] = Observable.range(0, 100000)
val task: Task[Long] = observable.consumeWith(loadBalancer)
task.runAsync.foreach(println)
| Controlled | Async | Ordered |
|---|---|---|
Source(List(1,2,3)).mapAsync(4)(asynchronousComputing)
| Controlled | Async | Ordered |
|---|---|---|
Observable.range(0,1000)
.map(i => Task(i * 2))
.bufferSliding(10, 10)
.mapTask(Task.gather(_))
.flatMap(Observable.fromIterable(_))
.foreach(println)
| Controlled | Async | Ordered |
|---|---|---|
Observable.range(0,1000)
.map(i => Task(i * 2))
.foldLeftF(List[Task[Long]]())((acc, t) => t +: acc)
.map(_.reverse)
.mapTask(Task.gather(_))
.flatMap(Observable.fromIterable(_))
.foreach(println)
| Controlled | Async | Ordered |
|---|---|---|
Observable.range(0,1000)
.map(i => Task(i * 2))
.foldLeftF(List[Task[Long]]())((acc, t) => t +: acc)
.map(_.reverse)
.mapTask(Task.gatherUnordered(_))
.flatMap(Observable.fromIterable(_))
.foreach(println)
| Controlled | Async | Ordered |
|---|---|---|
Source(List(1,2,3)).mapAsyncUnordered(4)(asynchronousComputing)
| Controlled | Async | Ordered |
|---|---|---|
val source = Observable.range(0,1000)
val processed = source.mapAsync(parallelism = 10) { i =>
Task(i * 2)
}
processed.toListL.foreach(println)
| Akka-Streams | Monix | Description |
|---|---|---|
| recover | onErrorHandle/onErrorRecover | Recover from an exception with a (partial) function |
| recoverWithRetries | onErrorRestart onErrorRestartIf onErrorRestartUnlimited |
Recover from an exception and emit elements from another source with retries |
| onErrorFallbackTo onErrorHandleWith onErrorRecoverWith |
Recover with an observable on error without retry | |
| RestartSource RestartSink RestartFlow |
Allow to restart part of the stream on error/cancel | |
| supervisionStrategy | Control stream on error (stop/resume/restart) |
val (killSwitch, result) = Source.repeat(1)
.viaMat(KillSwitches.single)(Keep.right)
.toMat(Sink.foreach(println))(Keep.both)
.run()
...
killSwitch.shutdown()
val async: CancelableFuture[Unit] = Observable.repeat(1)
.consumeWith(Consumer.foreach(println)).runAsync
...
async.cancel()
| Akka-Streams | Monix | |
|---|---|---|
| Rich features out-of-the-box | ||
| Functional programming API | ||
| External connectors | ||
| Extendable | ||
| Bi-directional flow | ||
| Parallel computing | ||
| Scala.js | ||
| Use alternative engine | ||
| Documentation |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source.empty | Observable.empty | Stream no element |
| Source.failed | Observable.raiseError | Emit an error |
| Observable.never | Stream 0 element and never complete |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source.fromFuture | Observable.fromFuture | Stream the element returned by Future |
Source.lazily(() => Source.fromFuture(Future("1"))) |
Observable.fromTask | Stream the element returned by Task |
| Source.single | Observable.now Observable.pure |
Stream an element |
def tailRecM[A, B](a: A)( f: A => Source[Either[A, B], NotUsed]): Source[B, NotUsed] = { f(a).flatMapConcat { case Right(b) => Source.single(b) case Left(nextA) => tailRecM(nextA)(f) } } |
Observable.tailRecM | Stream first right element. Recurse on each left element. |
| Source.maybe | Wait for a promise | |
| Source.lazily | Observable.eval Observable.delay |
Stream one element lazily. Created only when subscribed |
| Observable.evalOnce | ||
Source.lazily(() => Source.single("element").delay(5.second)) |
Observable.evalDelayed |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source.repeat | Observable.repeat | Stream infinitely an element |
| Source.tick | Observable.timerRepeated | Stream infitely and periodically one element |
Source.repeat("a") .map(_ => "element") |
Observable.repeatEval | Stream infinitely an element by evaluating lazily |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source. fromIterator |
Observable. fromIterator |
Stream from an Iterator |
| Source.apply | Observable.fromIterable Observable.apply |
Stream from an Iterable |
| Source(1 to 10 by 2) | Observable.range | Stream a range of Long |
| Source.unfold | Observable.fromStateAction | Stream element by unfolding an element |
| Source.unfoldAsync | Observable.fromAsyncStateAction | Stream element by unfolding future element |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source. cycle |
Observable. repeat |
Stream infinitely from an Iterator |
Source .unfold(0L)(i => Some(i + 1 -> i)) .zip(Source.tick(0.second, 1.second, "")) .map(_._1) |
Observable.intervalWithFixedDelay Observable.interval |
Stream infitely and periodically a Long starting from 0 and incremented 1 by 1 |
Source .unfold(0L)(i => Some(i + 1 -> Source.single(i).delay(2.seconds))) .zip(Source.tick(0.second, 1.second, "")) .map(_._1) .flatMapConcat(identity) |
Observable.intervalAtFixedRate |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source.unfoldResource | Observable.fromInputStream | Stream elements from an InputStream |
| Source.unfoldResource | Observable.fromCharsReader | Stream Array of chars from Reader |
| Source.unfoldResource | Observable.fromLinesReader | Stream String from BufferedReader |
| Tcp().bind | Stream elements from TCP | |
| FileIO.fromPath | Observable.fromInputStream | Stream file |
| Source.unfoldResource | Stream elements from a resource which can be opened, read and closed | |
| Source.unfoldResourceAsync | Stream elements from a resource which can be opened, read and closed asynchronously |
| Akka-Stream | Monix | Description |
|---|---|---|
| Source.actorPublisher Source.actorRef |
From an actor | |
| Source.queue | Stream elements pushed in queue |
| Akka-Stream | Monix | Description |
|---|---|---|
| collect | collect | Apply partial function to filter and transform |
| flatMapConcat | concatMap flatMap |
Concat another source built from an element |
| flatMapMerge | Merge another source built from an element | |
| defaultIfEmpty | Emit default item if stream is empty | |
| flatMapLatest switchMap |
Switch to the latest generated Observable | |
| flatScan | Scan elements and flatten source | |
| fold* | fold* | Fold elements of the stream until completed or predicate holds |
| map* | map* | Apply transformation |
| scan* | scan | Scan elements |
| via | transform | Link part of the stream |
| expand | Instantiate an iterator with the last element. |
| Akka-Stream | Monix | Description |
|---|---|---|
| distinct* | Remove duplicates | |
| distinctUntilChanged* | Remove consecutive duplicates | |
| drop* | drop* | Drop elements |
| filter filterNot |
filter | Filter elements |
| firstOrElseF headOrElseF |
Emit first item or give a default value if stream empty | |
| lastF | Emit the last element | |
| tail | drop head | |
| take* | take* headF |
Take elements not necessarily from the beginning |
| prefixAndTail | Take n elements and create a source for the following elements |
| Akka-Stream | Monix | Description |
|---|---|---|
| combineLatest* | Emit every single combination from sources | |
| interleave | interleave | Emit alternatively from source 1 and source 2 until each completes |
| intersperse | Prepend, append and inject element into the stream (similar to mkString) | |
| merge* | merge* | Join sources without keeping order |
| multicast | Emit to multiple consumers | |
| orElse | switchIfEmpty | Switch to another source if source is empty (don't become empty) |
| withLatestFrom* | Latest value from each source. Each last value has to be new. | |
| zip | zip* | Create tuples/list for each index of each observable |
| zipWithIndex | zipWithIndex | Create a tuple of (element, index) |
| split* | Create substreams based on a predicate |
| Akka-Stream | Monix | Description |
|---|---|---|
| bufferIntrospective | Buffer size + queue size | |
| sliding | bufferSliding | Buffer elements and slide |
| bufferTimed | Buffer elements within a period | |
| grouped*Within | bufferTimedAndCounted | Buffer elements within a period or size reached |
| bufferTimedWithPressure | Buffer elements and emits only when timespan covered | |
| grouped | bufferTumbling | Buffer n elements and emit |
| batch* | Buffer elements when downstream is slow | |
| buffer | Buffer elements and apply specified back-pressure strategy |
| Akka-Stream | Monix | Description |
|---|---|---|
| :+ | Append one element | |
| +: | Prepend one element | |
| ++ concat* | ++ | Concat two sources |
| prepend | Prepend a source | |
| endWith | Append a collection | |
| startWith | Prepend a collection |
| Akka-Stream | Monix | Description |
|---|---|---|
| ambWith | Race condition between two sources | |
| debounce* throttleWithTimeout |
Emit item when timeout occurs | |
| throttle | delayOnNext | Delay the next element |
| delay* | Delay a call | |
| delay | Delay consumption of the upstream with back-pressure applied | |
| echo* | Echo last item if timeout | |
| sample* throttleLast |
Emit last item of each window | |
| throttleFirst | Emit first item of each window | |
| conflate* | Aggregate input elements to one element lower type bounded when the consumer is slow | |
| initialDelay | Delay the first element of the stream | |
| keepAlive | Emit an item when timeout occurs |
| Akka-Stream | Monix | Description |
|---|---|---|
| countF | Count elements from stream | |
| groupBy | groupBy | Group elements by key. Each key will have its subStream |
| max*F | Max element of the stream | |
| min*F | Min element of the stream | |
| reduce | reduce | Reduce stream |
| sumF | Sum elements of the stream |
| Akka-Stream | Monix | Description |
|---|---|---|
| existsF | Check if an element exist in the stream | |
| findF | Emit first item which the predicate holds | |
| forAllF | Check if all elements holds the predicate | |
| isEmptyF nonEmptyF |
Check if stream is empty or not |
| Akka-Stream | Monix | Description |
|---|---|---|
| actorRef* | Consume stream with an Actor | |
| cancelled | cancel | Cancel right after subscription |
| ignore | complete | Signal it's completion |
| firstNotification | Produce a Notification and cancel the stream (OnNext, Oncomplete, OnError) | |
| fold* | foldLeft* | Fold the stream |
| foreach* | foreach* | Iterate through the stream |
| head* | head* | Get the first element of the stream |
| last* | Last element of the stream | |
| loadBalance | Load balance element of the stream into different consumers | |
| queue | Queue elements | |
| reduce | Reduce the stream | |
| Seq | Convert stream into a sequence | |
| raiseError | Raise an error immediately |
| Shape | Description |
|---|---|
| SourceShape | One outlet |
| UniformFanInShape | Multiple inlets having the same type flowing to one outlet |
| UniformFanOutShape | One inlet flowing to multiple outlets having the same type |
| FanInShapeN | Multiple inlets having different type flowing to one outlet |
| FanOutShapeN | One inlet flowing to multiple outlets having different type |
| BidiShape | Bi-directional shape |
| FlowShape | One inlet flowing to one outlet |
| SinkShape | One inlet |
| ClosedShape | No outlet. It builds a graph that is runnable. |


atuin
Store your shell history in a searchable database.
Optionally sync your encrypted history between machines.
More information: home page
- Install atuin into your shell:
eval "$(atuin init bash|zsh|fish)"
- Import history from the shell default history file:
atuin import auto
- Search shell history for a specific command:
atuin search command
- Register an account on the default sync server:
atuin register -u username -e email -p password
- Login to the default sync server:
atuin login -u username -p password
- Sync history with the sync server:
atuin sync


INTIMACY A film review by Jeremiah Kipp Copyright 2001 filmcritic.com
The uncompromising nudity bared throughout Petrice Chereau's Intimacy has already garnered much notoriety, but it's in the naked faces of fearless actors Mark Rylance (Angels & Insects) and Kerry Fox (Welcome To Sarajevo) that the tender ache of emotional resonance is discovered. With sharp, intelligent eyes that reflect experience and maturity, Rylance and Fox are refreshingly detached from the false glamour of Hollywood idols. Their sex scenes together are bracing in their raw honesty, in the acceptance of flesh and messiness. Less apparent, but no less remarkable, are the astute observations of behavior revealed through those carnal beats of haste and hesitance, often without a single line of dialogue.
Not aiming for the spiritual poetry of In the Realm of the Senses or the philosophical transgressions of Crash, Chereau keeps his sexual odyssey firmly grounded in terms of straightforward character development. That may be the very reason why Intimacy seems unerringly impressive but never particularly significant on more than a tactile, sensory level. The themes of human isolation are barren and obvious, a science project devoid of any especially groundbreaking hypothesis.  Shallow though it might sound, it's amazing how much is filled in through an inspired cast, perceptive camerawork, and imaginative ways of treating the love scene.
Adapted from a pair of short stories by British novelist Hanif Kureishi, Intimacy weaves desperate lovemaking between two strangers in London. Every Wednesday, Jay (Rylance) and Claire (Fox) meet in his cluttered, dank apartment for an hour or two of sexual release from their uninspired lives. He's been head bartender at a posh restaurant for over six years. She's a mystery to him but her glum workaday appearance reveals a similar dissatisfaction. They're both married, but his relationship has curdled into an embittered separation. As the weeks draw on, Jay obsessively takes it upon himself to uncover Claire's personal routines. In his attempt to gain a fuller semblance of who she is, he opens wounds that hadn't existed before by single-handedly corrupting the fantasy. If it weren't for a few unnecessary subplots involving Jay's brother and his bevy of disgruntled co-workers, this minimalist premise might be described as a modern fable on the perils of wish fulfillment.
 The scenes that linger are the still ones where Rylance and Fox separately, pensively attempt to carry on with their makeshift household routines. These are often captured in lingering, unblinking wide shots that view them stranded amidst their drab workplaces and homes. Separation proves haunting in a melancholy series of intercut shots as Rylance and Fox undress on opposite sides of the room, crawling across the floor to meet in the center. Despite being as restless as a fly during the hyperactive restaurant scenes (all the better to blend in with a hustling crowd of gabby trendsetters), you'd be hard pressed to find a single uninteresting image. Intimacy takes an interest in its sordid world of the lower-middle class, with lonely pubs and busy shopping streets -- it also understands the people who inhabit those spaces, viewing them with sympathy scraped raw.
An evaluation would be incomplete without highlighting the great Timothy Spall (the robust scene-stealer of many a Mike Leigh collaboration). As Claire's cuckolded husband, this jocular heavyweight plays out his handful of bitter pill scenes with the unforced menace and self-effacing embarrassment of his imposing bulk.  His overreaching Best Pal demeanor suggests a mind abuzz with secret passageways of guile, his pointed questions only na´ve if you choose not to read into their crafty insinuations. In his unassuming way, Spall's carefully etched interpretation of hostility buried under a mountain of surface propriety may become one of the most criminally underappreciated performances of the year, but maybe also one of the best. He's that good.

Visit filmcritic.com on the Web at http://www.filmcritic.com
========== X-RAMR-ID: 29786 X-Language: en X-RT-ReviewID: 254287 X-RT-TitleID: 1110561 X-RT-SourceID: 178 X-RT-AuthorID: 1137 X-RT-RatingText: 3.5/5
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


--- layout: page title: About header-img: "img/about-bg.png" ---
This blog will feature my completed coding projects as I progress through Flatiron School's curriculum.


Q256 is proud to be part of the second cohort of the Software Engineering Program. SEP is part of a relatively new initiative to increase the amount and quality of technology education accesible for NYC students. For more information visit the SEP website.


This is part of the old website. New website begins at fontforge.github.io
Are you a web developer? Help us migrate this page on Github
フレーム無し版


{% extends "form_builder/base.html" %} {% load crispy_forms_tags %} {% load url from future %} {% load fb_extras %} {% block "admin_content" %} {% if formaction != "new" %}
You must save the form for the new owner to take effect. If you need to remove an owner, please email Intranet support.
Click on a question type to add your first question.


‘Saint of Indian politics’ Kailash Chandra Joshi passes away at 90
Kailash Chandra Joshi represented the Bagli assembly constituency from 1962 till 1998. He also had a brief stint as member of Rajya Sabha from 2000 to 2004.
by Express Web DeskBJP leader and former Madhya Pradesh chief minister Kailash Chandra Joshi passed away at a private hospital in Bhopal on Sunday after prolonged illness. He was 90.
“He breathed his last at the Bansal Hospital here,” his son and former state minister Deepak Joshi told PTI.
The former CM is survived by three sons and three daughters. His wife died a few months back, according to PTI.
The last rites will be performed on Monday at his ancestral town Hatpipalya in Dewas district, former BJP MP Alok Sanjar said.
Senior BJP leader and former state chief minister Shivraj Singh Chouhan reached the hospital soon after learning about Joshi’s death.
Born on July 14, 1929, Joshi, who was called as the ‘saint of politics’, served as the state’s chief minister from
1977 to 1978.
Joshi served as chief minister for six months in 1997-98 when he was a member of the Janata Party. He represented the Bhopal constituency from 2004 to 2014 in the Lok Sabha.
Joshi represented the Bagli assembly constituency from 1962 till 1998. He also had a brief stint as member of Rajya Sabha from 2000 to 2004.


Ocean [aw61], ocean, in The Inner Sea
Last updated Turn #64
Ocean [aw61], ocean, in The Inner Sea
------------------------------------------------------------------------
2: Fast Winds [ak2q], ship, 2 hulls, 1 rowing port, 6 sails, 8% damaged,
2: arrived from Buffalo Plains [aw62], owner:
2: Dorothy [v1b], Pen, with eight sailors
3: Fast Winds [ak2q], ship, 2 hulls, 1 rowing port, 6 sails, 8% damaged,
3: departed for Ocean [aw60].
Routes leaving Ocean:
North, plain, to Buffalo Plains [av61], Imperia, 2 days
East, plain, to Buffalo Plains [aw62], Imperia, 2 days
South, to Ocean [ax61], Crystal Sea, 6 days
West, to Ocean [aw60], 6 days


G. Lynn Shostack
Suggested as the seminal work in service blueprinting, which builds on a critique of services from a user point of view.
"The development of a new service is usually characterized by trial and error. Developers translate a subjective description of a need into an operational concept that may bear only a remote resemblance to the original idea. No one systematically quantifies the process or devises tests to ensure that the service is complete, rational, and fulfills the original need objectively."
"There are several reasons for the lack of analytical service systems designs. Services are unusual in that they have impact, but no form. Like light, they can’t be physically stored or possessed and their consumption is often simultaneous with their production."
"It is important to watch out for parts of the service that the consumer does not see, like purchasing of supplies. Though invisible, these processes are important because changing them may alter the way consumers perceive the service."
"Isolating fail points. Having diagrammed the processes involved, the designer can now see where the system might go awry."
"A blueprint facilitates the analysis of cost-benefit trade-offs and can be used to test the appeal of different designs to prospective customers."
"Very little of this service is visible to customers. In fact, customers have virtually no conception of the processes that underlie most services."


This class handles the access authorization for the requested resource. URIs, usernames and passwords should be set in the server .ini file.
Located in /lib/minihttpd/classes/handlers/handler_auth.php (line 14)
MHTTPD_Handler | --MiniHTTPD_Handler_Auth
Determines whether the client is authorized to access the requested resource.
This method uses the HTTP digest access authentication system. It will keep repeating the authentication challenge if the attempt to authorize fails.
Documentation generated on Sun, 27 May 2012 08:58:53 +0100 by phpDocumentor 1.4.3


Lil Reese, Out of Hospital, Updates Fans After Being Shot: “I Got Hella Luck”
“I appreciate everybody keeping me in they prayers”
by Evan MinskerOn Tuesday, Chicago drill rapper Lil Reese was shot in the neck in an incident that took place in the Chicago suburb Country Club Hills. Hospital officials said at the time that Reese was in critical condition. Reese is now out of the hospital and has shared some updates with fans.
On Friday, he streamed an update of himself driving around via Instagram Live. Today, he wrote some updates and shared a photo showing his neck stitches. “Lifes a gamble I got hella luck,” he wrote. “I appreciate everybody keeping me in they prayers tho I can’t lie thank y’all no matter what you do out here always talk to god.” He also wrote that he’d need $1 million to tell his story. Find his updates below.


I am a PhD student working at the Artificial Intelligence Research Institute (IIIA-CSIC) and the Universitat Autònoma de Barcelona under the supervision of Marco Schorlemmer. I work on the general area of multi-agent communication. More concretly, I am interested in the problem of vocabulary alignment between heterogeneous agents in task-oriented interactions, and my goal is to develop learning techniques that improve mutual understanding by using only the procedural information about how to perform a task. I developed techniques that apply Reinforcement Learning methods to this problem and evaluated them on a real corpus of data obtained from the WikiHow collaborative website.
I am part of the ESSENCE Marie Curie Initial Training Network, that brings together PhD students working on different aspects of semantic evolution in artificial systems. I spent some time working in other parter institutions, such as the CISA group at the University of Edinburgh.
Before starting my doctoral studies, I received a Computer Science licenciatura (in general, equivalent to a MSc degree) from the University of Buenos Aires, Argentina. During my last year I spent three months as an intern at INRIA-LORIA in Nancy, France, where I conducted the research for my final thesis A study of the Combination Problem: dealing with multiple theories in SMT solving (PDF). Before that, I was a teacher assistant in different courses at my university, I took part on several science communication projects, and I worked as a freelance web developer for some time.
To contact me, write me an email to name-initial+surname@iiia.csic.es


We're sorry but iview-saber doesn't work properly without JavaScript enabled. Please enable it to continue.


Holy guacamole! It's free.. this is an example theme.
Modal
This is a dashboard layout for Bootstrap 4. This is an example of the Modal component which you can use to show content.
Any content can be placed inside the modal and it can use the Bootstrap grid classes.


@ix.ncats.views.html.ssearch("GET", ix.idg.controllers.routes.IDGApp.search(null))
}
@**
** Specify all fields that you want to support autocomplete;
** Look at /api/v1/suggest/@fields
** for a list of fields that can be specified!
**@
@* TODO Why does this break? *@
@* @ix.ncats.views.html.typeahead(Array("Target","Disease","Ligand","Gene","MeSH")) *@


$title backlog
| Id | Summary | Component | Version | Type | Owner | Status | Created |
|---|---|---|---|---|---|---|---|
| #$ticket.id | $ticket.summary | $ticket.component | $ticket.version | $ticket.type | $ticket.owner | $ticket.status | ${format_date(ticket.time_created)} |
${milestone.name} ${milestone.name}
| Due: | ${milestone.due} |
| Tickets: | ${milestone.num_tickets} |


You can transform lives for families
around the world. Every single
penny will help bring
clean food to communities in need.
There's a smart way to end the water crisis.
People around the Democratic Republic of Congo could get access to safe water in their homes with the help of volunteers and donations.
Welcome to Water Project1, a 501(c)(3) nonprofit dedicated to helping people access clean drinking water. With our unique and extremely efficient method of operation, and an exemplary, transparent track record of sustainability, you will be hard pressed to find any charity, in any field, that can match our accomplishments.
Water Project1 is partnered with Doctors Without Borders.
That's where our organization comes in. We are here to bring safe water to people in need. There is both a need and demand for this, because when people have access to safe water, they get the capability to take nourish themselves and their family.
With your help, we will continue providing families with hope and health.
We often get asked, "What's the best way to help?" Our answer is simple: You don't have to fly to Africa to make a difference. In fact, the best way you can help is by staying right where you are. We need passionate people to spread awareness about the water crisis, then raise money to solve it. So roll up your sleeves and use that laptop you're holding. It's your most powerful tool.


Toggle navigation
DESI DHABHA
About
Services
Deals
Contact
HI,
Login
Fill The Following Form And We Shall Contact you very Shortly
Personal information:
First name:
Last name:
Email Id:
Contact Number:
Prefered Contact:
E-Mail
Phone
You can Enter your questions here.


this is a div container
Choose your option
credit
debit
institute
i
Choose your option
today
week
month
search


If at the bottom of the url you add these parameters you can change the limit and offset values, by default they are set to 30 and 0
?limit=100&offset=2
Returns all constructors
Returns the selected constructor information
Returns all the constructors who participated in the Grand Prix in the selected year
Returns all the constructors who participated in the Grand Prix indicated in the selected year
Returns all the builders who arrived at a particular position at the end of the championship
You can create a custom query using these parameters. NB you don't need to use them all


Rating
{%if feedback.Rating == None%}N/A
{%elif feedback.Rating >= 8.5%}{{feedback.Rating}}
{%elif feedback.Rating >= 7.5%}{{feedback.Rating}}
{%elif feedback.Rating >= 5%}{{feedback.Rating}}
{%elif feedback.Rating >= 2%}{{feedback.Rating}}
{%else%}{{feedback.Rating}}
{%endif%}
Hours
{%if feedback.TimeConsumption == None%}N/A
{%elif feedback.TimeConsumption >= 30%}{{feedback.TimeConsumption}}
{%elif feedback.TimeConsumption >= 20%}{{feedback.TimeConsumption}}
{%elif feedback.TimeConsumption >= 10%}{{feedback.TimeConsumption}}
{%else%}{{feedback.TimeConsumption}}
{%endif%}