In the following, we would like to inform you about the purposes, type and scope of the processing of your personal data while using the Contrasts App (hereinafter also referred to as the "App"). The legal basis for the level of data protection within the App is the Regulation (EU) 2016/679 (GDPR).
Responsible for the processing of personal data within the app is:
Christoph Wendt
Philippstraße 29
76185 Karlsruhe
E-Mail<EMAIL_ADDRESS>The app allows you to create color pairs and determine their contrast to each other and thus the legibility.
When using the app, the data processing that takes place can be divided into three main categories:
The Contrasts app is available through the App Store operated by Apple Inc. The download may require prior registration with the App Store and installation of the App Store software. We have no control over the collection and processing of your personal information in connection with registering and providing downloads from the App Store. Apple Inc. as the operator of the App Store is solely responsible in this respect.
For more information on this data processing, please refer to the App Store Privacy Policy:
The following data is collected when the app is called up:
This data is temporarily stored in a log file for the following purposes:
The legal basis for the above-mentioned data processing is based on Art. 6 para. 1 letter f) GDPR.
In order for our app to function properly, it is necessary for you to allow and grant access to certain functions of your terminal device, so that certain data is stored on your terminal device. You will be prompted to grant the appropriate access authorization once at the beginning or when you use the respective function.
If you create color pairs, they will be stored directly in the memory of your mobile device, depending on the installation location of the app.
The app allows you to synchronize created color pairs across all your devices using iCloud. You can disable syncing in the iCloud system settings.
Color pairs stored on your stored device will not be transferred to us.
An Internet connection is only required when sending crash reports and usage statistics.
You can send color pairs you have created to other people. A system dialog will appear where you can share your content (e.g. via contacts, e-mail, social media). A data processing by us as well as a transmission of the contact data to us does not take place.
If you want to give us feedback, you can do so via the e-mail form within the app. We ask you not to send any further personal data of you or other persons within the feedback function to us. The legal basis for data processing within the framework of the feedback function is Art. 6 para. 1 lit. a) GDPR. Your feedback messages will be deleted after 4 weeks.
To improve our app, anonymized usage statistics are sent to us. The data collected in the process is not linked to your person.
The App uses the Microsoft AppCenter SDK to determine the popularity of suggested features (usage count) and other overall statistics (such as operating system version and device model) to help us better target our development efforts to future releases.
We base the data processing on our justified interest in improving the App. The legal basis for data processing is Art. 6 Par. 1 letter f) GDPR.
If you do not wish to receive statistics on the use of the App and wish to prevent the sending of usage statistics, you can deactivate these functions at any time in the App's settings using the slider (right of objection according to Art. 21 GDPR).
In addition, usage statistics can be collected by the system via Apple Inc. This system setting is not specific to the Contrasts App and can be deactivated in the device settings.
If a crash occurs in the app, anonymous crash reports (function tracing, operating system version, device model) are automatically collected to help us troubleshoot crashes in our applications. We also use the Microsoft AppCenter SDK for this purpose. We base the data processing on our legitimate interest in improving the App. The legal basis for data processing is Art. 6 para.1 lit. f) GDPR.
If you do not want anonymous crash reports to be sent to us via the Microsoft AppCenter SDK, you can deactivate these functions at any time using the slider in the app's settings (right of objection according to Art. 21 GDPR).
In addition, system-side error reports can be collected via Apple Inc. This system setting is not specific to the Contrasts App and can be deactivated in the device settings.
Unless you disable this feature, the app statistics will be sent to Microsoft, Corp. For more information about Microsoft's privacy policy and the AppCenter SDK, please see:
If you access websites via the in-app browser (e.g. via links), your personal data will be processed on these websites in deviation from this privacy policy. This privacy policy only applies to our App. We ask you to read the privacy policies of the linked websites. We are not responsible for the websites linked within the App and do not endorse their content. For illegal, incorrect or incomplete content as well as for damages resulting from the use or non-use of the information, the provider of the website to which the link was made is solely liable.
According to Art. 15 para. 1 GDPR you have the right to request information about the personal data we have stored about you.
In addition, if the legal requirements are met, you have the right to correct (Art. 16 GDPR), delete (Art. 17 GDPR) and restrict the processing (Art. 18 GDPR) of your personal data.
If data processing is based on Art. 6 para. 1 lit. e) or f) GDPR, you have the right to object under Art. 21 GDPR. If you object to data processing, it will not be carried out in future unless the data controller can prove that there are compelling reasons for further processing worthy of protection which outweigh the data subject's interest in objecting.
If you yourself have provided the processed data, you have a right to data
transfer in accordance with Art. 20 GDPR.
If the data processing is based on consent pursuant to Art. 6 para. 1
letter a) GDPR, you may revoke such consent at any time with effect for
the future, without affecting the legality of the previous processing.
In the above-mentioned cases, in case of open questions or complaints, please contact the above-mentioned contact address in writing or by e-mail.
You also have the right to complain to a data protection supervisory authority. The data protection supervisory authority of the federal state in which you live or in which the person responsible is based is responsible.
This privacy policy is current and dated July 28, 2020, and may be subject to change as our app develops or new technologies are implemented.
Date of publication: August 9, 2020


Interface WaveformClient
-
- All Known Implementing Classes:
WaveformLocalClient
,WaveformWebClient
public interface WaveformClient
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description reactor.core.publisher.Mono<String>
clearAutoPicks()
reactor.core.publisher.Flux<Waveform>
getActiveSharedEventStationWaveformsById(Long id)
reactor.core.publisher.Flux<Waveform>
getAllActiveStacks()
reactor.core.publisher.Flux<Waveform>
getAllStacks()
reactor.core.publisher.Flux<Waveform>
getSharedEventStationWaveformsById(Long id)
reactor.core.publisher.Mono<SyntheticCoda>
getSyntheticFromWaveformId(Long id)
reactor.core.publisher.Flux<SyntheticCoda>
getSyntheticsFromWaveformIds(Collection<Long> ids)
reactor.core.publisher.Flux<Waveform>
getUniqueEventStationMetadataForStacks()
reactor.core.publisher.Mono<Waveform>
getWaveformFromId(Long id)
reactor.core.publisher.Flux<Waveform>
getWaveformMetadataFromIds(List<Long> ids)
reactor.core.publisher.Flux<Waveform>
getWaveformsFromIds(Collection<Long> ids)
reactor.core.publisher.Mono<Waveform>
postWaveform(Waveform segment)
reactor.core.publisher.Flux<String>
postWaveforms(Long sessionId, List<Waveform> segments)
reactor.core.publisher.Flux<String>
setWaveformsActiveByEventId(String id, boolean active)
reactor.core.publisher.Flux<String>
setWaveformsActiveByIds(List<Long> selectedWaveforms, boolean active)
reactor.core.publisher.Flux<String>
setWaveformsActiveByStationName(String name, boolean active)
reactor.core.publisher.Flux<String>
setWaveformsActiveByStationNameAndEventId(String name, String id, boolean active)
reactor.core.publisher.Flux<String>
setWaveformsActiveInsidePolygon(boolean active)
reactor.core.publisher.Flux<String>
setWaveformsActiveOutsidePolygon(boolean active)
-
-
-
Method Detail
-
getSyntheticFromWaveformId
reactor.core.publisher.Mono<SyntheticCoda> getSyntheticFromWaveformId(Long id)
-
getWaveformsFromIds
reactor.core.publisher.Flux<Waveform> getWaveformsFromIds(Collection<Long> ids)
-
getWaveformMetadataFromIds
reactor.core.publisher.Flux<Waveform> getWaveformMetadataFromIds(List<Long> ids)
-
getSyntheticsFromWaveformIds
reactor.core.publisher.Flux<SyntheticCoda> getSyntheticsFromWaveformIds(Collection<Long> ids)
-
postWaveform
reactor.core.publisher.Mono<Waveform> postWaveform(Waveform segment) throws com.fasterxml.jackson.core.JsonProcessingException
- Throws:
com.fasterxml.jackson.core.JsonProcessingException
-
getAllStacks
reactor.core.publisher.Flux<Waveform> getAllStacks()
-
getAllActiveStacks
reactor.core.publisher.Flux<Waveform> getAllActiveStacks()
-
postWaveforms
reactor.core.publisher.Flux<String> postWaveforms(Long sessionId, List<Waveform> segments)
-
getUniqueEventStationMetadataForStacks
reactor.core.publisher.Flux<Waveform> getUniqueEventStationMetadataForStacks()
-
getSharedEventStationWaveformsById
reactor.core.publisher.Flux<Waveform> getSharedEventStationWaveformsById(Long id)
-
getActiveSharedEventStationWaveformsById
reactor.core.publisher.Flux<Waveform> getActiveSharedEventStationWaveformsById(Long id)
-
setWaveformsActiveByIds
reactor.core.publisher.Flux<String> setWaveformsActiveByIds(List<Long> selectedWaveforms, boolean active)
-
setWaveformsActiveByEventId
reactor.core.publisher.Flux<String> setWaveformsActiveByEventId(String id, boolean active)
-
setWaveformsActiveByStationName
reactor.core.publisher.Flux<String> setWaveformsActiveByStationName(String name, boolean active)
-
setWaveformsActiveByStationNameAndEventId
reactor.core.publisher.Flux<String> setWaveformsActiveByStationNameAndEventId(String name, String id, boolean active)
-
setWaveformsActiveOutsidePolygon
reactor.core.publisher.Flux<String> setWaveformsActiveOutsidePolygon(boolean active)
-
setWaveformsActiveInsidePolygon
reactor.core.publisher.Flux<String> setWaveformsActiveInsidePolygon(boolean active)
-
clearAutoPicks
reactor.core.publisher.Mono<String> clearAutoPicks()
-
-


keygen generates
working, high-quality
3D-printable models of keys
based on given parameters.
Select a key type to get started.
Please wait...
keygen generates working, high-quality 3D-printable models of keys based on given parameters.
To generate a key, select your key type and shapes. Then, follow the instructions on how to properly enter the bitting.
Click Download STL to save your key in a format suitable for 3D printing at e.g. shapeways.
This site is simply a web interface to keygen, a light wrapper around OpenSCAD. You can download and use this tool offline if you so desire.
If you need to generate a large number of keys, please download and run this tool locally. It eases load on the server, and will be faster and more flexible.
Contributions of key types and shapes are always welcome. Direct any comments or questions to the github project.
~ervanalb
close


Ayurvedic Yoga Massage (AYM) is a deep tissue oil massage followed by assisted yoga stretches. It is adjusted to suit clients needs, whether that is relaxing, energising, soothing, deep or remedial. The method was developed by Master Kusum Modak in Pune, India, after many years of studying traditional Ayurvedic massage and Iyengar yoga. AYM is an amazing technique which works on physical, emotional, mental and energetic levels.


Years ago, motorcycle stuntman Johnny Blaze (Nicolas Cage) sold his soul to save the life of a loved one. Now, he transforms into a fiery, avenging agent of justice at night wherever evil roams. As the only one who can walk in both worlds, Johnny is charged by Mephistopheles (Donal Logue) himself to destroy Blackheart (Wes Bentley), a demon that wants to overthrow Mephistopheles and create a worse hell than the one that currently exists.
 His next assignment takes him to Bangkok, and as usual, he finds a street-wise guy named Kong to help him. After Kong has a close call and learns who Joe is, Kong asks him to train him and he does. Joe also meets a local girl who is deaf and spends time with her. However, Joe has a hard time keeping his other life from her. It also appears that the person who hired Joe, breaks his rule of complete anonymity and tries to find him.
A Las Vegas magician who can see into the future is pursued by FBI agents seeking to use his abilities to prevent a nuclear terrorist attack.


AccommodationFinder
Home
Create residence
View applications
Logout
Create a residence profile
Fill in all the textfields provided
Residence Name
Address
Number of rooms
Size of each room
Monthly rental
  Create Residence Profile
Back


Hi, I'm Charles. This is my website to share my portfolio and blog posts. My favorite things in life are technology, games and food.


| menu |
|
|
UI Elements!
- Input Fields
- Check Box
- Radio Button
- Buttons
- List view
Main Header 1!
Lorem Ipsum is simply dummy text of the printing
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.


|
Wyatt
0.0.1
|
Public Member Functions | |
| CommandManager () | |
| ~CommandManager () | |
| bool | runCommand (Command *command) |
| bool | cancel (Command *command) |
| bool | cancelAll () |
| void * | run () |
| int | join () |
| int | kill () |
| unsigned long | inFlight () |
| Public Member Functions inherited from Thread | |
| int | start () |
| int | join () |
| int | detach () |
| void | signal (int signal) |
| pthread_t | self () |
Additional Inherited Members | |
| Protected Attributes inherited from Thread | |
| std::atomic< int > | m_signal |
Definition at line 15 of file CommandManager.h.
| CommandManager::CommandManager | ( | ) |
Creates the command manager object.
Definition at line 7 of file CommandManager.cpp.
| CommandManager::~CommandManager | ( | ) |
Destroys the command manager object.
Definition at line 13 of file CommandManager.cpp.
| bool CommandManager::cancel | ( | Command * | command | ) |
Cancel a command. Pass in the pointer to the command you want canceled, and it will be canceled and un-scheduled.
| command | A pointer to a command object. |
Definition at line 27 of file CommandManager.cpp.
| bool CommandManager::cancelAll | ( | ) |
Cancel all running commands.
Definition at line 35 of file CommandManager.cpp.
| unsigned long CommandManager::inFlight | ( | ) |
Get how many commands are in flight in the command manager.
Definition at line 85 of file CommandManager.cpp.
| int CommandManager::join | ( | ) |
Re-join the thread and end command execution.
Definition at line 73 of file CommandManager.cpp.
| int CommandManager::kill | ( | ) |
Re-join the thread and end command execution.
Definition at line 80 of file CommandManager.cpp.
|
virtual |
Threading run function
Implements Thread.
Definition at line 45 of file CommandManager.cpp.
| bool CommandManager::runCommand | ( | Command * | command | ) |
Add a command to be run. Create your command, and then pass a pointer to it in to this method. It will be run along with all other scheduled commands.
| command | A pointer to a command object. |
Definition at line 18 of file CommandManager.cpp.


Mr. Rogers Neighborhood
Enter a number:
Enter an number:
Enter your name:
Submit
Reversed
add/remove name
Rules
Replace:
With:
Add Rule
Clear Rules
Use Default Rules
Use Custom Rules
Result:
Clear


This demo illustrates the basic functionality of the Notification custom element.
You have
2
new messages.
Click to view.
Check mail


Whitney Music Box animation in HTML5.
Graphics code by
Jim Bumgardner
.
Audio created with
MIDI.js
Loading API...


Game 1: Utah Jazz vs New Orleans Pelicans
My Pick:
Utah Jazz
Why I'm Rolling with them:
The Pelicans have been on a tear, and are currently sitting at 4-0 and the top of the Western Conference. But they showed signs of faltering last night against the Nets, and I'm wary to pick a team on the tail end of a back to back. Anthony Davis will bounce back, but the Jazz have been playing good basketball, with Joe Ingles proving he is a top shooter in the league, and Rudy Gobert terrorizing the paint. Jazz take it, 108-103
Game 2: Boston Celtics vs Detroit Pistons
My Pick:
Boston Celtics
Why I'm Rolling with them:
The Pistons are undefeated. The Celtics have looked sloppy. That's not enough to change my view on the fact that Bostons athletic wings should provide Griffin with a real challenge, and their guards are leagues above Detroit. Detroit should dominate the rebounding matchup, but don't count out Horford to make smart defensive plays and keep Drummond honest. I have the Celtics winning 115-106
Game 3: Philadelphia 76ers vs Charlotte Hornets
My Pick:
Philadelphia 76ers
Why I'm Rolling with them:
Embiid may be out tonight, but luckily Charlotte doesn't have the inside presence to capitalize. They're going to be tired, on the second night of a back to back where they looked very good against a weak Bulls team, but the 76ers are a different beast. Ben Simmons will have a great game, as Charlotte's perimeter defense is not enough to stop him from working his way inside. 76ers, 118-107
Game 4: Chicago Bulls vs Atlanta Hawks
My Pick:
Atlanta Hawks
Why I'm Rolling with them:
Disclaimer - I love Trae Young. Atlana's trade is looking better by the minute, as he had a monster 35-11 game against the Cavaliers earlier this week. That said, that isn't the only reason I have the Hawks winning.  High scoring game with the Hawks winning 123-115
Game 5: Indiana Pacers vs Cleveland Cavaliers
My Pick:
Indiana Pacers
Why I'm Rolling with them:
There's no sugarcoating it. The Cavs are bad. They have no real defensive presence, and allow guards to penetrate to the basket at will. Kevin Love isn't looking great so far as a first option, but should still be counted on for 18-8 tonight. But Sabonis has been playing extremely well off the bench, and Oladipo should be able to have a dominant performance against the lack of real defensive guards. Pacers 111-98
Game 6: Portland Trail Blazers vs Miami Heat
My Pick:
Portland Trail Blazers
Why I'm Rolling with them:
Portland's backcourt has been hot to start the year, and they've gotten good production from their bench to get off to a 3 and 1 start. The Heat are 2-2, but have played 4 mediocre teams. I like Dragic, but beyond that Miami rely on gritty basketball and that won't be enough to beat the Blazers. Watch out for Dame as Portland wins it 117-111
Game 7: Phoenix Suns vs Memphis Grizzlies
My Pick:
Memphis Grizzlies
Why I'm Rolling with them:
Devin Booker is out. Phoenix doesn't really have any other primary ball handlers, so they're going to have to play out of the post more tonight. Watch Ayton get 5 assists, but the Grizzlies have a way more balanced roster. Conley will go off, and Marc Gasol will limit Ayton's scoring effectiveness. Grizzlies take it 118-104
Game 8: Orlando Magic vs Milwaukee Bucks
My Pick:
Orlando Magic
Why I'm Rolling with them:
This is my hot take for the night. The Magic have the long, athletic defenders needed to disrupt Giannis, (which still means he gets like 27-8-10). The Bucks played last night, and I think they're focused on their upcoming matchup with the Raptors. Magic's lack of a point guard will hurt them against Bledsoe, but if the Magic can get hot they take this one 120-115
Game 9: Los Angeles Lakers vs San Antonio Spurs
My Pick:
Los Angeles Lakers
Why I'm Rolling with them:
Lebron and the Lakers seem to be figuring it out. Lonzo's stepback over Jokic in their win against the Nuggets was filthy. I'm a big believer in the Spurs continued excellence, but they barely squeezed by the Lakers in San Antonio. If Lebron hits those free throws, they lose. In Los Angeles, I give the edge to the Lakers 128-119


The visualization below shows how often the types of self-nominated traits of hackathon participants were linked. The thicker a line, the more people nominated both traits.


When matter is compressed beyond a certain density, a black hole is created. It's called black because no light can escape from it. Some black holes are the tombstones of what were once massive stars. An enormous black hole is thought to lurk at the center of the Milky Way galaxy.
Black holes were once stars.
As nuclear energy starts running out, gravity starts to overcome pressure, increasing core density and gravitational force.
Nuclear reaction stops and the star explodes as a supernova, expelling outer parts of the star into space.
The core collapses under its own weight into single point of infinite desity.
Gravitational forces at this stage are so strong light cannot escape from its pull.
Black holes, because of their very massive mass and intense gravity, will cause light to bend around them, which will cause the appearance of background objects (like stars) to be distorted. See how that looks like in the next section...
The below simulation shows how the gravity of a black hole affects the trajectory of light.
While this visualization below doesn't specifically show a black hole, it does help intuit how objects would have to behave to stay in orbit around an object with increasing mass (black hole). We also assume that the masses of the orbiting objects are negligible compared to the center mass and that the orbits are perfectly circular"
has experienced
less time that the center mass


"HIEL "life of (i.e., from) God, a native of Bethel, who built (i.e., fortified) Jericho some seven hundred years after its destruction by the Israelites. There fell on him for such an act the imprecation of Joshua (6:26). He laid the foundation in his first-born, and set up the gates in his youngest son (1 Kings 16:34), i.e., during the progress of the work all his children died.
"HIEL "life of (i.e., from) God, a native of Bethel, who built (i.e., fortified) Jericho some seven hundred years after its destruction by the Israelites.
There fell on him for such an act the imprecation of Joshua (6:26). He laid the foundation in his first-born, and set up the gates in his youngest son (1 Kings 16:34), i.e., during the progress of the work all his children died.


"Tin can you hear me now?"
Ah, childhood. Treehouses and sleepovers and talking to your friends on tin can telephones. It's made of junk: just two old tin cans and a length of string, but it's the stuff that memories are made of. Occasionally you can see a variant that has a tube that travels underground. This variant is derived from early nautical vessels.
Truth in Television, of course, although the real thing only works if there is no slack in the string at all. In visual media, the string is just as likely to be portrayed as slack or winding its way around, under, or over things, which wouldn't work.
Of course, now that cellular phones are cheap enough that even children have them, this is a sadly disappearing relic.
Examples:
- The Mueller commercials used this.
- Also used by Progresso Soup here, among other examples.
- They also now have their soup cans showing video. In one scene, the chef responding looks into the video screen on his tin can and says to the customer, "Let me put you on webcan." (Which is a cute pun on "webcam".)
- A chapter of Yotsuba&! has Yotsuba, Miura, and Ena playing with paper-cup versions. Yotsuba keeps hers, which shows up in later chapters as her "cell phone".
- An episode of Hanamaru Kindergarten has two toddlers playing with one of these only a few feet long, in a very loud classroom.
- Negima!?: Kaede and Setsuna tried to make these work between their rooms however as Konoka explained◊ they don't work between doors, much to their dismay causing them to gain +5 Absentmindedness and -3 intelligence, however it lets them hear the invisible Cute Ghost Girl nearby leading to screams.
- Black Butler officially takes this trope Up to Eleven in chapter 71: paintings and gramophones?!
- Tamako and Mochizou from Tamako Market uses these to communicate from their rooms. In episode 2, Dera sabotaged their discussion by standing on the line. Actually, their line was not taut enough for the vibrations to pass through some of the time.
- The pirate captain in the first episode of Spaceship Agga Ruter has several paper cups attached to strings on the bridge of her ship, which she uses to, among other things, communicate with other vessels. The rest of her ship is fairly normal.
- In Black★Rock Shooter, Yomi and Kagari communicate with this, as they are next door neighbors.
- JoJo's Bizarre Adventure: Stone Ocean: Jolyne's Stand "Stone Free" allows her to unwind her own body into a string which can transmit sound. The author even notes that the ability uses the same principles as tin can phones when describing it.
- Ninja Scroll has a variant. The baddies can communicate over moderate distances by holding wires in their mouths, because one of them is a user of Razor Floss and can control it to make the sound transmit well.
- Shown exactly as the picture above in Sound of the Sky episode 8. In this universe even a regular phone is very rare, so even the cool soldier in charge of the platoon's hotline is impressed by this device!
- Chapter 61 of Monthly Girls' Nozaki-kun has Nozaki and Sakura communicating via paper-cup phones for ideas for Nozaki's manga. Sakura becomes so attached to hers that her friends comment on how neglected her actual phone has become. Suzuki and Mamiko keep their flip-phones in the end, however the experience affects Nozaki enough that he accidentally draws the two holding and talking into their phones as if they're paper-cups.
- Used in episode 4 of season 2 in WORKING!!!! by Popura to Jun as a way for him to talk to Mahiru without getting hit by her as the latter Does Not Like Men and usually hits any guy who gets too close to her. He immediately tells Souma to call Mahiru on his cellphone, but Souma refuses, stating that not using the cup phone would insult Popura. Jun attempts it, until Souma starts laughing at him, prompting him to angrily yank at the phone while crushing the cup. They end up using the cellphone afterwards.
- One of the official Sly Cooper tie-in comics shows the gang pulling their first heist as gap-toothed youngsters in the orphanage, the cookie jar caper, using one of these as a communicator. When Sly is almost sprung, it, seemingly accidentally, doubles as an extraction device, with Sly being pulled to safety before he is spotted when Murray pedals the getaway trike away.
- They've probably done this in The Beano or The Dandy at least a hundred times.
- One Donald Duck comic had Huey, Dewey, and Louie set one up between Donald and Neighbor Jones after their feuding starts taking its toll on their house. "Have a war of words!" Unfortunately, Jones feeds the business end of a live wire to his can, giving Donald a nasty shock.
- Used and mocked (because of the need to keep the string taut) in a Harvey Comics story involving Little Audrey with Melvin and Echo (two of the main male characters). When Audrey wants to ask if the girls can borrow the boys' clubhouse for a meeting, Echo tries to "contact the chief on this" via a tin-can telephone - with the string just lying on the ground leading into the nearby bushes. Naturally, he has to shout to Melvin (hiding in said bushes) and Melvin likewise has to shout back since the tin-can phone is useless with the string slack. Echo dutifully relays the message even though Audrey can obviously hear Melvin clearly. Then, to cap it all off, Audrey takes the tin can Echo was holding and shouts her reply to Melvin into the tin can instead of just plain shouting (which obviously would have been just as effective). Although perhaps justified as Audrey "playing along" with the game, it's still funny from an adult POV.
- In RainbowDoubleDash's Lunaverse, Trixie and Lyra use this when confronted by Octavia, a pony with remarkable hearing. Knowing that Octavia will hear Lyra if she's anywhere in the room, they go outside and run a tin-can telephone to her. This lets her eavesdrop on the talk between Trixie and Octavia without Octavia sensing her presence.
- Exactly what the boys use to communicate with the girl across the street in 3 Ninjas.
- Scary Movie 2 parodied this. After getting high-tech goggles and weapons, the heroes didn't have enough money for cell phones. So they used Dixie cups. Dixie cups that have only about 3 feet of string between them.
- Used by the kids in Milk Money.
- Short appearance in Walk the Line.

- Used by Adam Sandler and the kids in Grown Ups.
- Played for laughs in Adele Hasn't Had Her Dinner Yet, where Detective Carter and commissioner Ledvina use a tin phone to communicate while sitting tables apart during a cabaret show.
- A poster for In the Loop depicts two politicians holding one of these with a tangled-up piece of string, accompanied with the tagline "The Fate of the world is on the line."
- The talking tube variant appears in The Happening, as Elliot and Alma end up talking to each other through this as they are separated from each other during a chemical attack by the plants.
- The Little Hut: The three castaways marooned on the island use conch shells and string to place phone calls to each other.
- One of Anthony Buckeridge's Jennings novels features a brief craze for tin can phones at the title character's school.
- In Henry and the Paper Route (in the same world as the Ramona Quimby books), Henry Huggins is excited when a boy his own age moves into the neighborhood. In his first conversation with the kid, Henry suggests a tin can phone, but he's told that it probably wouldn't work and, at any rate, they both have actual phones in their houses.
- Kristy of The Babysitters Club recollects doing this with Mary Anne when they were children.
- Also appears in Alfons Zitterbacke, a children's book from East Germany. It doesn't work, probably because the kids knot the string to places (they're trying to make a really long line, between their respective rooms).
- In Nancy Springer's They're All Named Wildfire, the two main characters live in the opposite sides of a duplex. They drill a hole in the wall so that they can pass a string through to use a tin can telephone. (Interestingly, the fact that the string has to be taut rather than slack is mentioned, as it affects the position of the hole they create.) The tin-can telephone becomes thematically important as a symbol of the Power of Friendship in opposition to racism.
- In Mister Rogers' Neighborhood, the Neighborhood of Make Believe has tin phone cages that lower out of nowhere, allowing for communication.
- Used in Pee-wee's Playhouse with the Picturephone, except this one is actually a telephone. In Pee-Wee's world, *everyone* uses a tin can on their Picturephones.
- Dad's Army attempted to use this as a form of emergency communication in one episode but were foiled by the verger with his hedge shears.
- This exchange from Friends:
Ross: It would be so cool to live across [the street] from you guys!Joey: Yeah—hey, then we could do that telephone thing! Y'know, where you have a can, and we have a can, and, and it's connected by a string!Chandler: Or, we could do the actual telephone thing.
- Mentioned in the second series of Torchwood. Apparently they don't work when the "entire. telephone. network. is down."
- Young Blades: In "To Heir is Human," Siroc invents a tin can telephone-like device using metal cups and some string, which he uses to eavesdrop on the Cardinal's Guards.
- In one episode of Emu's World, the "Boggle's Kingdom" segment had the villains use this to communicate. In the next episode, King Boggle adapts the idea by replacing one of the tins with a bucket mounted on the outside of the castle, to create "Radio Boggle".
- Murr from Impractical Jokers had the challenge of trying to sell wireless cans with antennas.
- Used in Calvin and Hobbes once or twice.
- Peanuts had them at least twice. In a 1980s Sunday Strip, Lucy gave Charlie Brown part of a tin-can telephone for use during a baseball game. In a 1999 strip, Sally was playing with one when she asked, "How do you get an outside line?"
- One of the very earliest Sunday strips shows Shermy giving one of these to Charlie Brown. After failing to contact him a few times, Shermy finds out that "the line is busy" - Snoopy is chewing on the string.
- A cartoon in Future Life magazine showed a flying saucer hovering next to an observatory. The alien pilot is talking to the astronomer on a tin can telephone, explaining (paraphrased): "Yes, our technology is ahead of yours in many ways but behind you in others."
- Referenced in Kingdom of Loathing, during a side-quest to the Frat/Hippy War quest if you offer to help promote a hippy jam band. If you go back right after accepting the quest, the promoter will complain that he'll have to use tin cans on a string for the PA system if you don't get some more publicity for the concert.
- Hark! A Vagrant shows that Crazy Nancy has one.
- xkcd's Universal Converter Box includes "string (fits most cans)" among its many connectors.
- Daisy Owl has kids using a tin can phone while spying on bullies. We hear the one who is actually spying get discovered and wedgied. Then the string starts moving:
Jen: They're tracing the call!Daisy: HANG UP! HANG UP!
- Homestar Runner:
- The Homestar Runner (the 1930s version) was implied to be talking to modern-day Marzipan's answering machine on one of these in "Marzipan's Answering Machine 13.2".
- At the end of "Strong Bad is in Jail" cartoon, Strong Bad is somehow able to use one of the cans in his jail cell (the one labelled "EWW") to prank-call Marzipan.
- The two hosts of the weekly WrestleCrap Radio podcast, R. D. Reynolds and Blade Braxton, are implied to be conversing on one of these.
- One episode of Happy Tree Friends had Cuddles and Lumpy playing with one. This being Happy Tree Friends, it results in Cuddles' eardrums being blown out.
- The Wonder Pets! receive their calls of distress primarily through a tin can phone.
- In The Simpsons, Bart's tin can phone was once wiretapped.
- D.W. once bugged Arthur's room with one of these.
- Also, Arthur and Buster sometimes communicated this way.
- Used on the Super Mario World cartoon, with coconut halves and vines.
- Used a few times on Ed, Edd n Eddy, with some very bizarre Split-Screen Phone Call effects going on (people actually travelling through the string, for instance, or Ed using a sponge instead of a tin can).
- Played with in South Park's "Wacky Molestation Adventure": After the kids have taken over the town and the actual phone system is ruined, we see a scene where Cartman yells into a tin can that isn't connected to anything. Then another kid puts a lid on the can and leaves with it. He ends up coming back, Cartman removes the lid and gets a response.
- This was done a few times in Hanna-Barbera's version of The Little Rascals.
- The farm on the U.S. Acres portion of Garfield and Friends has an entire system of tin cans for when intrabarnyard communication is desired.
- In an episode of SpongeBob SquarePants, Squidward used one of these to apologize to SpongeBob without actually doing so to his face; however, the attempt was foiled because Patrick was using the string as dental floss.
- In My Little Pony: Friendship Is Magic episode "Party of One", Pinkie Pie uses this to eavesdrop on Twilight Sparkle.
- In the Schoolhouse Rock! short "Where the Money Goes", the father facetiously suggests to his son that if they stop paying the phone bill they can always resort to using "tin cans and a string."
- The Powerpuff Girls: In "Impeach Fuzz", when notorious hillbilly Fuzzy Lumpkins is elected mayor, he replaces the Powerpuff Hotline with a tin can.
- This has been used a few times in Recess.
- In the Tennessee Tuxedo and His Tales short "Telephone Terrors", Tennessee and Chumley set up a network of tin-can telephones throughout the zoo to tell the other animals about Stanley Livingston's upcoming piano recital. Guess where Chumley got the wires?
- Mr. Bogus and Brattus both communicate on one of these at the beginning of the episode "Bogus Private Eye".
- On Rugrats, Angelica turns her lemonade stand into a drive-thru service by using one of these as an intercom system.
- The Clarence episode "Goldfish Follies", to keep up with its retraux theme, has a scene where Clarence and Sumo use cans to text each other.
- In the Wander over Yonder episode "The Hat", Sylvia and Wander get separated and communicate with each other with tin cans with transmission antennas in place of string.
- Danger Mouse: Crumples the Clown uses one to feed DM information on the aliens' culture in "Attack of the Clowns".
- The Smurfs episode "The First Telesmurf" uses the talking tube variant with overgrown smurfmelon vines, where a Smurf uses the same blossom both to speak into and to listen from.
- Goof Troop: Max and PJ have tin can telephones connecting both their bedrooms.
- Variation: The Looney Tunes film "Heir Conditioned" has an alley cat ringing a cowbell in a gutter downspout to contact another cat sleeping on a roof to tell him about Sylvester's inheritance windfall.
- Family Guy: In "Throw It Away", Lois chides Peter for wanting to keep a tin can on a string, asking why a grown man would even have one, before cutting to his friends listening into the other can in their treehouse.
Joe: Sounds like things aren't going well at the Griffins'.Cleveland: This is why no girls allowed!Quagmire: I hate to do this, guys, but Peter's been compromised. (cuts the string)


{% if not user %}
Sign Up
Log in
{% else %}
My Account
Log out
{% endif %}
Fullioapp>
{% block content %}{% endblock %}
Questions?
Feel free to ask
any
questions by emailing us at
<EMAIL_ADDRESS>.
{% block script %}{% endblock %}


In this project, we’ll build my first neural network and use it to predict daily bike rental ridership.
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
A critical step in working with neural networks is preparing the data correctly. Variables on different scales make it difficult for the network to efficiently learn the correct weights. Below, we’ve written the code to load and prepare the data. You’ll learn more about this soon!
data_path = 'Bike-Sharing-Dataset/hour.csv'
rides = pd.read_csv(data_path)
rides.head()
| instant | dteday | season | yr | mnth | hr | holiday | weekday | workingday | weathersit | temp | atemp | hum | windspeed | casual | registered | cnt | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2011-01-01 | 1 | 0 | 1 | 0 | 0 | 6 | 0 | 1 | 0.24 | 0.2879 | 0.81 | 0.0 | 3 | 13 | 16 |
| 1 | 2 | 2011-01-01 | 1 | 0 | 1 | 1 | 0 | 6 | 0 | 1 | 0.22 | 0.2727 | 0.80 | 0.0 | 8 | 32 | 40 |
| 2 | 3 | 2011-01-01 | 1 | 0 | 1 | 2 | 0 | 6 | 0 | 1 | 0.22 | 0.2727 | 0.80 | 0.0 | 5 | 27 | 32 |
| 3 | 4 | 2011-01-01 | 1 | 0 | 1 | 3 | 0 | 6 | 0 | 1 | 0.24 | 0.2879 | 0.75 | 0.0 | 3 | 10 | 13 |
| 4 | 5 | 2011-01-01 | 1 | 0 | 1 | 4 | 0 | 6 | 0 | 1 | 0.24 | 0.2879 | 0.75 | 0.0 | 0 | 1 | 1 |
This dataset has the number of riders for each hour of each day from January 1 2011 to December 31 2012. The number of riders is split between casual and registered, summed up in the cnt
column. You can see the first few rows of the data above.
Below is a plot showing the number of bike riders over the first 10 days in the data set. You can see the hourly rentals here. This data is pretty complicated! The weekends have lower over all ridership and there are spikes when people are biking to and from work during the week. Looking at the data above, we also have information about temperature, humidity, and windspeed, all of these likely affecting the number of riders. You’ll be trying to capture all this with your model.
rides[:24*10].plot(x='dteday', y='cnt')
<matplotlib.axes._subplots.AxesSubplot at 0x19097aacb38>
Here we have some categorical variables like season, weather, month. To include these in our model, we’ll need to make binary dummy variables. This is simple to do with Pandas thanks to get_dummies()
.
dummy_fields = ['season', 'weathersit', 'mnth', 'hr', 'weekday']
for each in dummy_fields:
dummies = pd.get_dummies(rides[each], prefix=each, drop_first=False)
rides = pd.concat([rides, dummies], axis=1)
fields_to_drop = ['instant', 'dteday', 'season', 'weathersit',
'weekday', 'atemp', 'mnth', 'workingday', 'hr']
data = rides.drop(fields_to_drop, axis=1)
data.head()
| yr | holiday | temp | hum | windspeed | casual | registered | cnt | season_1 | season_2 | ... | hr_21 | hr_22 | hr_23 | weekday_0 | weekday_1 | weekday_2 | weekday_3 | weekday_4 | weekday_5 | weekday_6 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0.24 | 0.81 | 0.0 | 3 | 13 | 16 | 1 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 0.22 | 0.80 | 0.0 | 8 | 32 | 40 | 1 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 2 | 0 | 0 | 0.22 | 0.80 | 0.0 | 5 | 27 | 32 | 1 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 3 | 0 | 0 | 0.24 | 0.75 | 0.0 | 3 | 10 | 13 | 1 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 4 | 0 | 0 | 0.24 | 0.75 | 0.0 | 0 | 1 | 1 | 1 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
5 rows × 59 columns
To make training the network easier, we’ll standardize each of the continuous variables. That is, we’ll shift and scale the variables such that they have zero mean and a standard deviation of 1.
The scaling factors are saved so we can go backwards when we use the network for predictions.
quant_features = ['casual', 'registered', 'cnt', 'temp', 'hum', 'windspeed']
# Store scalings in a dictionary so we can convert back later
scaled_features = {}
for each in quant_features:
mean, std = data[each].mean(), data[each].std()
scaled_features[each] = [mean, std]
data.loc[:, each] = (data[each] - mean)/std
We’ll save the last 21 days of the data to use as a test set after we’ve trained the network. We’ll use this set to make predictions and compare them with the actual number of riders.
# Save the last 21 days
test_data = data[-21*24:]
data = data[:-21*24]
# Separate the data into features and targets
target_fields = ['cnt', 'casual', 'registered']
features, targets = data.drop(target_fields, axis=1), data[target_fields]
test_features, test_targets = test_data.drop(target_fields, axis=1), test_data[target_fields]
We’ll split the data into two sets, one for training and one for validating as the network is being trained. Since this is time series data, we’ll train on historical data, then try to predict on future data (the validation set).
# Hold out the last 60 days of the remaining data as a validation set
train_features, train_targets = features[:-60*24], targets[:-60*24]
val_features, val_targets = features[-60*24:], targets[-60*24:]
Below you’ll build your network. We’ve built out the structure and the backwards pass. You’ll implement the forward pass through the network. You’ll also set the hyperparameters: the learning rate, the number of hidden units, and the number of training passes.
The network has two layers, a hidden layer and an output layer. The hidden layer will use the sigmoid function for activations. The output layer has only one node and is used for the regression, the output of the node is the same as the input of the node. That is, the activation function is $f(x)=x$. A function that takes the input signal and generates an output signal, but takes into account the threshold, is called an activation function. We work through each layer of our network calculating the outputs for each neuron. All of the outputs from one layer become inputs to the neurons on the next layer. This process is called forward propagation.
We use the weights to propagate signals forward from the input to the output layers in a neural network. We use the weights to also propagate error backwards from the output back into the network to update our weights. This is called backpropagation.
Hint: You’ll need the derivative of the output activation function ($f(x) = x$) for the backpropagation implementation. If you aren’t familiar with calculus, this function is equivalent to the equation $y = x$. What is the slope of that equation? That is the derivative of $f(x)$.
Below, you have these tasks:
self.activation_function
in __init__
to your sigmoid function.train
method.train
method, including calculating the output error.run
method.class NeuralNetwork(object):
def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):
# Set number of nodes in input, hidden and output layers.
self.input_nodes = input_nodes
self.hidden_nodes = hidden_nodes
self.output_nodes = output_nodes
# Initialize weights
self.weights_input_to_hidden = np.random.normal(0.0, self.hidden_nodes**-0.5,
(self.hidden_nodes, self.input_nodes))
self.weights_hidden_to_output = np.random.normal(0.0, self.output_nodes**-0.5,
(self.output_nodes, self.hidden_nodes))
self.lr = learning_rate
#### Set this to your implemented sigmoid function ####
# Activation function is the sigmoid function
self.activation_function = lambda x: 1 / ( 1 + np.exp(-x)) #sigmoid function
def train(self, inputs_list, targets_list):
# Convert inputs list to 2d array
inputs = np.array(inputs_list, ndmin=2).T
targets = np.array(targets_list, ndmin=2).T
#### Implement the forward pass here ####
### Forward pass ###
# TODO: Hidden layer
hidden_inputs = np.dot(self.weights_input_to_hidden, inputs)
hidden_outputs = self.activation_function(hidden_inputs)
# TODO: Output layer
final_inputs = np.dot(self.weights_hidden_to_output, hidden_outputs)
final_outputs = final_inputs
#final_outputs = self.activation_function(final_inputs)
#### Implement the backward pass here ####
### Backward pass ###
# TODO: Output error
output_errors = targets - final_outputs
# TODO: Backpropagated error
hidden_errors = np.dot(self.weights_hidden_to_output.T, output_errors)
hidden_grad = hidden_outputs * (1 - hidden_outputs)
# TODO: Update the weights
#self.weights_hidden_to_output += self.lr * output_errors * hidden_outputs.T
self.weights_hidden_to_output += self.lr * np.dot(output_errors,hidden_outputs.T)
self.weights_input_to_hidden += self.lr * np.dot((hidden_errors * hidden_grad), inputs.T)
def run(self, inputs_list):
# Run a forward pass through the network
inputs = np.array(inputs_list, ndmin=2).T
#### Implement the forward pass here ####
# TODO: Hidden layer
hidden_inputs = np.dot(self.weights_input_to_hidden, inputs)
hidden_outputs = self.activation_function(hidden_inputs)
# TODO: Output layer
#final_inputs = np.dot(hidden_inputs.T, self.weights_input_to_hidden )
final_inputs = np.dot(self.weights_hidden_to_output, hidden_outputs)
final_outputs = final_inputs
#final_outputs = self.activation_function(final_inputs)
return final_outputs
def MSE(y, Y):
return np.mean((y-Y)**2)
Here you’ll set the hyperparameters for the network. The strategy here is to find hyperparameters such that the error on the training set is low, but you’re not overfitting to the data. If you train the network too long or have too many hidden nodes, it can become overly specific to the training set and will fail to generalize to the validation set. That is, the loss on the validation set will start increasing as the training set loss drops.
You’ll also be using a method know as Stochastic Gradient Descent (SGD) to train the network. The idea is that for each training pass, you grab a random sample of the data instead of using the whole data set. You use many more training passes than with normal gradient descent, but each pass is much faster. This ends up training the network more efficiently. You’ll learn more about SGD later.
This is the number of times the dataset will pass through the network, each time updating the weights. As the number of epochs increases, the network becomes better and better at predicting the targets in the training set. You’ll need to choose enough epochs to train the network well but not too many or you’ll be overfitting.
This scales the size of weight updates. If this is too big, the weights tend to explode and the network fails to fit the data. A good choice to start at is 0.1. If the network has problems fitting the data, try reducing the learning rate. Note that the lower the learning rate, the smaller the steps are in the weight updates and the longer it takes for the neural network to converge.
The more hidden nodes you have, the more accurate predictions the model will make. Try a few different numbers and see how it affects the performance. You can look at the losses dictionary for a metric of the network performance. If the number of hidden units is too low, then the model won’t have enough space to learn and if it is too high there are too many options for the direction that the learning can take. The trick here is to find the right balance in number of hidden units you choose.
import sys
### Set the hyperparameters here ###
epochs = 3000
learning_rate = 0.005
hidden_nodes = 29
output_nodes = 1
N_i = train_features.shape[1]
network = NeuralNetwork(N_i, hidden_nodes, output_nodes, learning_rate)
losses = {'train':[], 'validation':[]}
for e in range(epochs):
# Go through a random batch of 128 records from the training data set
batch = np.random.choice(train_features.index, size=256)
for record, target in zip(train_features.ix[batch].values,
train_targets.ix[batch]['cnt']):
network.train(record, target)
# Printing out the training progress
train_loss = MSE(network.run(train_features), train_targets['cnt'].values)
val_loss = MSE(network.run(val_features), val_targets['cnt'].values)
sys.stdout.write("\rProgress: " + str(100 * e/float(epochs))[:4] \
+ "% ... Training loss: " + str(train_loss)[:5] \
+ " ... Validation loss: " + str(val_loss)[:5])
losses['train'].append(train_loss)
losses['validation'].append(val_loss)
Progress: 99.9% ... Training loss: 0.052 ... Validation loss: 0.192
plt.plot(losses['train'], label='Training loss')
plt.plot(losses['validation'], label='Validation loss')
plt.legend()
plt.ylim(ymax=0.5)
(-0.0075726922224508414, 0.5)
Here, use the test data to view how well your network is modeling the data. If something is completely wrong here, make sure each step in your network is implemented correctly.
fig, ax = plt.subplots(figsize=(8,4))
mean, std = scaled_features['cnt']
predictions = network.run(test_features)*std + mean
ax.plot(predictions[0], label='Prediction')
ax.plot((test_targets['cnt']*std + mean).values, label='Data')
ax.set_xlim(right=len(predictions))
ax.legend()
dates = pd.to_datetime(rides.ix[test_data.index]['dteday'])
dates = dates.apply(lambda d: d.strftime('%b %d'))
ax.set_xticks(np.arange(len(dates))[12::24])
_ = ax.set_xticklabels(dates[12::24], rotation=45)
<img src=”/harishmalan.github.io/static/assets/img/blog/output_22_0.png” width=”25%”
Answer these questions about your results. How well does the model predict the data? Where does it fail? Why does it fail where it does?
Note: You can edit the text in this cell by double clicking on it. When you want to render the text, press control + enter
Run these unit tests to check the correctness of your network implementation. These tests must all be successful to pass the project.
import unittest
inputs = [0.5, -0.2, 0.1]
targets = [0.4]
test_w_i_h = np.array([[0.1, 0.4, -0.3],
[-0.2, 0.5, 0.2]])
test_w_h_o = np.array([[0.3, -0.1]])
class TestMethods(unittest.TestCase):
##########
# Unit tests for data loading
##########
def test_data_path(self):
# Test that file path to dataset has been unaltered
self.assertTrue(data_path.lower() == 'bike-sharing-dataset/hour.csv')
def test_data_loaded(self):
# Test that data frame loaded
self.assertTrue(isinstance(rides, pd.DataFrame))
##########
# Unit tests for network functionality
##########
def test_activation(self):
network = NeuralNetwork(3, 2, 1, 0.5)
# Test that the activation function is a sigmoid
self.assertTrue(np.all(network.activation_function(0.5) == 1/(1+np.exp(-0.5))))
def test_train(self):
# Test that weights are updated correctly on training
network = NeuralNetwork(3, 2, 1, 0.5)
network.weights_input_to_hidden = test_w_i_h.copy()
network.weights_hidden_to_output = test_w_h_o.copy()
network.train(inputs, targets)
self.assertTrue(np.allclose(network.weights_hidden_to_output,
np.array([[ 0.37275328, -0.03172939]])))
self.assertTrue(np.allclose(network.weights_input_to_hidden,
np.array([[ 0.10562014, 0.39775194, -0.29887597],
[-0.20185996, 0.50074398, 0.19962801]])))
def test_run(self):
# Test correctness of run method
network = NeuralNetwork(3, 2, 1, 0.5)
network.weights_input_to_hidden = test_w_i_h.copy()
network.weights_hidden_to_output = test_w_h_o.copy()
self.assertTrue(np.allclose(network.run(inputs), 0.09998924))
suite = unittest.TestLoader().loadTestsFromModule(TestMethods())
unittest.TextTestRunner().run(suite)
.....
----------------------------------------------------------------------
Ran 5 tests in 0.011s
OK
<unittest.runner.TextTestResult run=5 errors=0 failures=0>


Store
A f.lux based application uses a single store for managing all state. A Store
instance is created
by specifying a root Property and the initial state. The property must be a Property
subclass
and the state a json compatible value of appropriate type for the root Property
. The store manages
changes to the state through the shadow state. The shadow state proxies the actual state and each
shadow state property is immutable and modifications to the shadow state, whether through function calls
or direct assignment, are reflected asynchronously in the next javascript interpreter 'tick'.
The Store
class contains some advanced features useful for implementing complex business logic,
loggers, and memory efficient master/detail user interfaces. Most of the time, however, your
application will create a f.lux store and utilize the f.lux-react
module for accessing the store's shadow state properties.
Subscribing to store changes
Entities can subscribe to state changes resulting from actions on the shadow state. Subscription callbacks are registered/unregistered using the methods:
subscribe(callback)
- adds a callback to the subscriber listunsubscribe(callback)
- removes a callback from the subscriber list
The callback
has the form:
callback(store, shadow, prevShadow)
Update and wait
Shadow state action changes to the actual state occur asynchronously. Usually, this works out well since your event and network processing will want to work with a single, consistent state. Certain situations occur where your code performs some actions on the shadow state and then needs to perform additional calculations/changes on the updated state. The f.lux store exposes several methods to make this process easy:
-
updateNow(syncExec)
- performs any pending actions synchronously and then invokes thesyncExec
callback which does not take any parameters. -
waitFor(callback)
- registers a one-time no argument callback to be invoked after the next state change. -
waitThen()
- returns aPromise
that will be resolved following the next state change.
Transients
F.lux store's transient objects are used for managing applications data that is used for short periods of time. Transients are expecially useful for implementing master/detail user interfaces. The master list is typically long lived while the detail records are rapidly inspected and discarded.
Transient shadow objects are available through the {@link Store#transients} method. The
transientsproperty is a TransientShadow exposes a
Map` interface for adding, accessing,
and removing transient objects.
The transient shadow properties are swept after each state change and non-locked properties are
removed from the transients
object relieving your code of the responsibility of proactively
removing objects when no longer required.
The normal flow of working with a transient is:
- Create a
Property
- Pick a transient object ID (
transId
) - Obtain
Store.transients
var trans = transients.set(transId, property)
- returns aTransientProperty
- Do somethings with the transient object:
trans.data()
trans.lock()
- `trans.unlock(transId
The f.lux-react
module contains the TransientManager
class that is useful for managing
transient data in a React component.
Listener API
The Store
class exposes a listener api for monitoring state changes. The f.lux module ships with
one listener called Logger that tracks state changes and provides time travel debugging. A
listener is registered/unregsitered using:
Where the listener
parameter is an object that can implement the following methos:
onError(msg, error)
- an error occurred during aStore
operationonPreStateUpdate(action, impl)
- invoked before a shadow property executes an actiononPostStateUpdate(action, impl)
- invoked after a shadow property executes an actiononPreUpdate(currState, time)
- invoked before the store's state is updatedonPostUpdate(time, currState, prevState)
- invoked after the store's state is updated
See:
Promise and timers
Some environments require special handling for timers, such as
React Native. Additionally, developers
may desire to utilize specific
Promise
libraries in order to take advantage of specialized features. The Store
class provides methods for
setting the timer functions and Promise
module to be utilized by f.lux.
Static Method Summary
| Static Public Methods | ||
| public static |
all(promises: *): * |
|
| public static |
clearInterval(intervalId: *): * |
|
| public static |
clearTimeout(timerId: *): * |
|
| public static |
getPromise(): * |
|
| public static |
promise(callback: *): * |
|
| public static |
reject(error: *): * |
|
| public static |
resolve(params: ...*): * |
|
| public static |
setInterval(callback: *, time: *, params: ...*): * |
|
| public static |
setPromise(promise: *) |
|
| public static |
setTick(ticker: *) |
|
| public static |
setTimeout(callback: *, time: *, params: ...*): * |
Constructor Summary
| Public Constructor | ||
| public |
constructor(root: Property, state: Object | Array, useTransients: boolean) Creates a new f.lux store for managing the application state. |
Member Summary
| Public Members | ||
| public get |
Gets the top-level |
|
| public get |
rootImpl: ShadowImpl: * Gets the ShadowImpl backing the Store#shadow. |
|
| public get |
Gets the current f.lux shadow state. |
|
| public get |
Gets the current, actual application state. |
|
| public get |
Gets the |
Method Summary
| Public Methods | ||
| public |
addListener(listener: Object) Adds a listener object to monitor state changes. |
|
| public |
changeState(state: Object | Array, newRoot: boolean, time: number) Set a new value for the application state. |
|
| public |
dispatchUpdate(action: function(time: number)) Schedules an action to update the application state. |
|
| public |
findByPath(path: Array): Shadow Gets the shadow state property based on array of property keys. |
|
| public |
Gets if an update action has been registered with the store. |
|
| public |
isolated(): * |
|
| public |
removeListener(listener: *) Removes a listener object from monitoring state changes. |
|
| public |
schedule() Schedules pending tasks to execute. |
|
| public |
setRootProperty(root: Property, state: Object | Array) Changes the top-level |
|
| public |
Adds a callback to be invoked after each application state change. |
|
| public |
unsubscribe(callback: *) Removes a callback to be invoked after each state change. |
|
| public |
Executes all pending updates and waitFor() requests synchronously (immediately) and then invokes an optional callback once the shadow state is updated. |
|
| public |
Registers a one-time no argument callback to be invoked after the next state change. |
|
| public |
Returns a |
Static Public Methods
public static clearInterval(intervalId: *): * source
Params:
| Name | Type | Attribute | Description |
| intervalId | * |
Return:
| * |
public static clearTimeout(timerId: *): * source
Params:
| Name | Type | Attribute | Description |
| timerId | * |
Return:
| * |
public static promise(callback: *): * source
Params:
| Name | Type | Attribute | Description |
| callback | * |
Return:
| * |
public static resolve(params: ...*): * source
Params:
| Name | Type | Attribute | Description |
| params | ...* |
Return:
| * |
public static setInterval(callback: *, time: *, params: ...*): * source
Params:
| Name | Type | Attribute | Description |
| callback | * | ||
| time | * | ||
| params | ...* |
Return:
| * |
public static setPromise(promise: *) source
Params:
| Name | Type | Attribute | Description |
| promise | * |
public static setTick(ticker: *) source
Params:
| Name | Type | Attribute | Description |
| ticker | * |
public static setTimeout(callback: *, time: *, params: ...*): * source
Params:
| Name | Type | Attribute | Description |
| callback | * | ||
| time | * | ||
| params | ...* |
Return:
| * |
Public Constructors
Public Members
public get root: Property: * source
Gets the top-level Property
used for shadowing the application state.
See:
Public Methods
public addListener(listener: Object) source
Adds a listener object to monitor state changes. A listener
is an object that can
implement the following methos:
onError(msg, error)
- an error occurred during aStore
operationonPreStateUpdate(action, impl)
- invoked before a shadow property executes an actiononPostStateUpdate(action, impl)
- invoked after a shadow property executes an actiononPreUpdate(currState, time)
- invoked before the store's state is updatedonPostUpdate(time, currState, prevState)
- invoked after the store's state is updated
Params:
| Name | Type | Attribute | Description |
| listener | Object | object with methods to be invoked on state changes. |
See:
public changeState(state: Object | Array, newRoot: boolean, time: number) source
Set a new value for the application state. This will totally replace the current state and trigger
a reshadowing. The root Property
instance will be reused.
This method is used by Logger to implement time travel debugging.
Params:
| Name | Type | Attribute | Description |
| state | Object | Array | the new application state |
|
| newRoot | boolean |
|
|
| time | number |
|
the f.lux time for the change. |
public dispatchUpdate(action: function(time: number)) source
Schedules an action to update the application state. This method is utilized by root ShadowImpl to trigger the reshadow process and custom properties, listeners, and application logic should never need to explicitly invoke it.
Throw:
f.lux store already scheduled to perform an update. |
public findByPath(path: Array): Shadow source
Gets the shadow state property based on array of property keys.
Params:
| Name | Type | Attribute | Description |
| path | Array | array of property keys from the root to the desired property. |
public removeListener(listener: *) source
Removes a listener object from monitoring state changes.
Params:
| Name | Type | Attribute | Description |
| listener | * |
public schedule() source
Schedules pending tasks to execute. This method should not need to be called by code external to the class.
public setRootProperty(root: Property, state: Object | Array) source
Changes the top-level Property
and application state.
public subscribe(callback: function(store: Store, shadow: Shadow, prevShadow: Shadow)) source
Adds a callback to be invoked after each application state change. The callback
has the form:
callback(store, shadow, prevShadow)
public unsubscribe(callback: *) source
Removes a callback to be invoked after each state change.
Params:
| Name | Type | Attribute | Description |
| callback | * |
public updateNow(syncExec: function()) source
Executes all pending updates and waitFor() requests synchronously (immediately) and then invokes an optional callback once the shadow state is updated.
This method is useful when custom properties change the shadow state and need these changes to be reflected before performing additional processing.
Params:
| Name | Type | Attribute | Description |
| syncExec | function() | a callback to be invoked after all pending changes have been reflected in the shadow state. |


net view
Lists shared resources on a domain. Used with no parameters lists all machine accounts in a domain.
Options:
\\computer name Specifies the computer whose resource should be viewed
/domain:<domain name> The domain to be used
/network:<NetWare network> A NetWare network to be used


Success
Igor was registered Successfully!
Read the guide, to to learn how to get started using Igor
Unregister Igor


Robson Souza
Java Developer
Featured works
iCompra
https://github.com/robsonsouza-pr/icompra
Bolão do Robão
https://github.com/robsonsouza-pr/bolaodorobao
Sorte sua
https://github.com/robsonsouza-pr/sortesua


Terms and Privacy Policy for this site. Normal users don't read walls of text, so to the point:
Code License: MIT
Non-code Content License: CC-BY-3.0
Third-party services: Google Analytics, Chitika and Disqus
Hosted on: Github Pages
Android is a trademark of Google Inc. Google Play is a trademark of Google Inc.


Yes! As stated in the Google Play description, Reference Library is an app that allows you to Read and sort your library.
Yes you can!
Just long press the book, and you will be able to delete it.
Just long press the item in the wishlist, and you will be able to move it to your library.
By rating the app 5 stars on Google Play, you support the creation of this independent, free and ad-free application. I am developping it on my free time so please, if you like it, do not hesitate! You can click here to rate it.
you can read from bottom. where link is available.


Only the first password field references the list of requirements using aria-describedby
“Met” and “Unmet” only change when the criteria becomes met, or unmet.
Each list item is like: <li aria-live=”polite” artia-atomic=”true”>. aria-live=”polite” makes a screen reader read out the contents when there’s a change, and aria-atomic=”true” makes the screen reader read out the whole line, not just “met” or “unmet”. Note that each list item needs to be its own live region. If the whole widget is a live region, then the whole list gets read out whenever there’s a change. You don’t want that.
Screen Reader results
Windows:
NVDA 2022.1
Firefox 100
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, that requirement is read out twice!, followed by the entire password requirements section. Example after typing the first uppcase letter: "Bullet Uppercase letter met. Bullet Uppercase letter met. Your password must contain at least...."
Edge 102
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, that requirement is read out, followed by the entire password requirements section. Example after typing the first uppcase letter: "Bullet Uppercase letter met. Your password must contain at least...."
Chrome 101
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, that requirement is read out, followed by the entire password requirements section. Example after typing the first uppcase letter: "Bullet Uppercase letter met. Your password must contain at least...."
Internet Explorer 11
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, that requirement is read out, but the statuses of all requirements are read out in their initial state. Example after typing the first uppcase letter: "bullet 1 Uppercase letter (unmet)". Then if I delete that: "bullet 1 Uppercase letter (met)."
JAWS 2021
Firefox 100
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, the entire set of password requirements are read out again! (I'm guessing it has something to do with aria-describedby.
Edge 102
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, the entire set of password requirements are read out again followed by the requirement whose status had changed.
Chrome 101
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, the entire set of password requirements are read out again followed by the requirement whose status had changed.
Internet Explorer 11
When focus lands on the password field, all requirements are read as they should be. Then as I type a password when a met/unmet changes, the entire set of password requirements are read out again followed by the requirement whose status had changed.
Narrator
Firefox 100
Does not read out the requirements when focus lands on the password input. It should. Then it doesn't read out any of the criteria as they become met or unmet. Total failure.
Edge 102
Does not read out the requirements when focus lands on the password input. It should. Then it gets funny. As I type in a password, starting with a capital letter I hear "End of line selected" (at this point the blue focus indicator moves to the label of "Confirm password".) then it continues "1 uppercase letter met 3 of 6 level 1."
Chrome 101
Does not read out the requirements when focus lands on the password input. It should. Then it only reads out the changed part, ignoring aria-atomic. Example: when you type the first capital letter it reads "met closing parenthesis"
Internet Explorer 11
Does not read out the requirements when focus lands on the password input. It should. Then as you type, it reads out the criteria as they're met/unmet. Example: when you type the first capital letter it reads "1 uppercase letter met, 3 of 6 1 uppercase letter met closing parenthesis".
NVDA 2017.4
Firefox 55
Reads the criteria as they're met/unmet, as it should be.
Firefox 60
Reads the criteria as they're met/unmet, as it should be.
Firefox 63
Reads the criteria as they're met/unmet, as it should be.
Internet Explorer 11
Reads out the criteria as they're met/unmet, but reads out "met" or "unmet" as it was before the change. Example: when you type the first capital letter it reads "Bullet 1 uppercase letter unmet". If you hit backspace to delete that character, the "met" changes to "unmet", and NVDA reads "Bullet 1 uppercase letter met".
JAWS 18
Firefox 55
It just says "star". Nothing about the requirements.
Firefox 60
Reads the characters as you enter them. Nothing about the requirements. Note that aria-describedby isn't being read.
Firefox 63
Reads the characters as you enter them. Nothing about the requirements. Note that aria-describedby isn't being read.
Opera 51
JAWS does not read the aria-describedby text but tells you to press JAWS Key+Alt+R to hear descriptive text. Insert+Alt+R does not work. However, once you start typing in a password, once there's a change in the list (ie: a requirement changing from "unmet" to "met") the whole list is read out again. Except when you type the same password into the second field. Then when the "Passwords must match" changes from "unmet" to "met", JAWS doesn't read out any of the list.
Internet Explorer 11
Reads out the whole list when field recieves focus, as desired. When you put the first character in, it re-reads the whole
list, then reads out the one thing that's changed. For example if you type "P" it will read the whole list and "1 Uppercase letter met". Then if you type "a" it will just read "1 lowercase letter met".
iOS with VoiceOver
iOS v14
Sarafi, Firefox, and Chrome
When focusing on the Password field, VO reads "Your password must contain at least" but doesn't read the rest. As a password is
being typed, the met criteria are being read, as it should be. Example: after typing the first uppercase letter I hear "Bullet one uppercase letter met"
Opera Mini
VoiceOver does not work with Opera Mini
iOS v10
Sarafi, Firefox, and Chrome
When focusing on the Password field, VO reads "Your password must contain at least" but doesn't read the rest. As a password is
being typed, the met criteria are being read, as it should be.
Opera Mini
VoiceOver does not work with Opera Mini
Mac OS X with VoiceOver
Mac OS X 10.15.7 (Catalina)
Sarafi
VO only reads "Your password must contain at least". It does not read the list. As requirements are met/unmet, VO reads out the change as it should, followed by "Your password must contain at least".
Firefox 101
VO reads the password requirements as it should. As requirements are met VO reads "bullet" twice followed by the new status. Then, sometimes, it reads the entire requirements section again. Example after typing the first uppercase letter it reads "Bullet bullet one uppercase letter met. Your massword must contain at least....". Then if I type a lowercase letter it reads "Bullet bullet one lowercase letter met."
Chrome
VO reads the password requirements as it should. As requirements are met VO reads "bullet" twice followed by the new status. Then, sometimes, it reads the entire requirements section again. Example after typing the first uppercase letter it reads "Bullet bullet one uppercase letter met. Your massword must contain at least....". Then if I type a lowercase letter it reads "Bullet bullet one lowercase letter met."
Mac OS X 10.9.5
Sarafi
VO only reads "Your password must contain at least". It does not read the list. As requirements are met/unmet, VO reads out the change as it should.
Firefox 57
VO reads the password requirements as it should. But as you type in a password, VO reads nothing.
Firefox 61
VO does not read anything on this page, no the contents, not the labels. Nothing.
Firefox 62, and 63
When I try to run Firefox (Dev edition or Nightly) at the same time as VoiceOver, Firefox crashes.
Chrome
VO reads the password requirements as it should. Whenever a character is typed, VO reads it as "bullet". If you have 5 characters typed in, it reads "bullet" 5 times. Then, when one of the requirements becomes met, it does read that as it should. When you delete a character and a requirement becomes unmet, it reads that too, as it should.
Opera
VO reads the password requirements as it should. Whenever a character is typed, VO reads it as "bullet". If you have 5 characters typed in, it reads "bullet" 5 times. Then, when one of the requirements becomes met, it does read that as it should. When you delete a character and a requirement becomes unmet, it reads that too, as it should.
Conclusion
NVDA+Firefox or JAWS+Internet Explorer 11 work best. NVDA+Opera and JAWS+Firefox don't work at all. Works well enough on iOS. VoiceOver of Mac OS X 10.9.5 really only works as it should in Chrome and Opera, and almost in Firefox. Perhaps I need to upgrade my Mac OS.
UPDATED: : It seems that when an input is aria-describedby a section that updates dynamically, most stacks will read out the entire described region. Perhaps, instead of a live region, each item was separately descrbed, like with Example 2? Nope, turns out that's not ideal either.
In Windows it seems that whenever one thing changes that describes an input, all of that input's descriptors are read out again. And on Apple systems, it's not the case. This could be a nightmare. The only good way I can think of doing this is having a live region that only lists what's changed, and after 1 keystroke, remove the aria-describedby from the input, then re-attach it on blur.


INFO 01/05/2020 19:24:25
Settings file not found. Loading defaults.
INFO 01/05/2020 19:24:25
Connected to database.
INFO 01/05/2020 19:24:26
Application loaded.
INFO 01/05/2020 19:24:42
Application state saved.
INFO 01/05/2020 19:27:47
Settings file not found. Loading defaults.
INFO 01/05/2020 19:27:47
Connected to database.
INFO 01/05/2020 19:27:48
Application loaded.
INFO 01/05/2020 19:28:56
Settings file not found. Loading defaults.
INFO 01/05/2020 19:28:57
Connected to database.
INFO 01/05/2020 19:28:58
Application loaded.
INFO 01/05/2020 19:29:07
Application state saved.
INFO 01/05/2020 19:29:36
Settings file not found. Loading defaults.
INFO 01/05/2020 19:29:37
Connected to database.
INFO 01/05/2020 19:29:38
Application loaded.
INFO 01/05/2020 19:30:10
Application state saved.
INFO 01/05/2020 19:30:12
Application state saved.
INFO 01/05/2020 19:30:24
Settings file not found. Loading defaults.
INFO 01/05/2020 19:30:25
Connected to database.
INFO 01/05/2020 19:30:26
Application loaded.
INFO 01/05/2020 19:30:44
Application state saved.
INFO 01/05/2020 19:35:57
Settings file not found. Loading defaults.
INFO 01/05/2020 19:35:58
Connected to database.
INFO 01/05/2020 19:35:59
Application loaded.
INFO 01/05/2020 19:36:02
Application state saved.
INFO 01/05/2020 19:37:36
Settings file not found. Loading defaults.
INFO 01/05/2020 19:37:37
Connected to database.
INFO 01/05/2020 19:37:38
Application loaded.
INFO 01/05/2020 19:37:45
Application state saved.
INFO 01/05/2020 19:38:45
Settings file not found. Loading defaults.
INFO 01/05/2020 19:38:46
Connected to database.
INFO 01/05/2020 19:38:47
Application loaded.
INFO 01/05/2020 19:38:52
Application state saved.
INFO 01/05/2020 19:39:24
Settings file not found. Loading defaults.
INFO 01/05/2020 19:39:24
Connected to database.
INFO 01/05/2020 19:39:25
Application loaded.
INFO 01/05/2020 19:39:28
Application state saved.
INFO 01/05/2020 19:40:17
Settings file not found. Loading defaults.
INFO 01/05/2020 19:40:17
Connected to database.
INFO 01/05/2020 19:40:18
Application loaded.
INFO 01/05/2020 19:40:26
Application state saved.
INFO 01/05/2020 19:40:58
Settings file not found. Loading defaults.
INFO 01/05/2020 19:40:59
Connected to database.
INFO 01/05/2020 19:41:00
Application loaded.
INFO 01/05/2020 19:41:11
Application state saved.
INFO 01/05/2020 19:54:40
Settings file not found. Loading defaults.
INFO 01/05/2020 19:54:40
Connected to database.
INFO 01/05/2020 19:54:41
Application loaded.
INFO 01/05/2020 19:55:06
Application state saved.
INFO 01/05/2020 20:10:11
Settings file not found. Loading defaults.
INFO 01/05/2020 20:10:12
Connected to database.
INFO 01/05/2020 20:10:13
Application loaded.
INFO 01/05/2020 20:10:33
Application state saved.
INFO 01/05/2020 20:15:10
Settings file not found. Loading defaults.
INFO 01/05/2020 20:15:11
Connected to database.
INFO 01/05/2020 20:15:11
Application loaded.
INFO 01/05/2020 20:15:24
Application state saved.
INFO 01/05/2020 20:22:33
Settings file not found. Loading defaults.
INFO 01/05/2020 20:22:34
Connected to database.
INFO 01/05/2020 20:22:35
Application loaded.
INFO 01/05/2020 20:23:01
Application state saved.
INFO 01/05/2020 20:23:11
Settings file not found. Loading defaults.
INFO 01/05/2020 20:23:12
Connected to database.
INFO 01/05/2020 20:23:13
Application loaded.
INFO 01/05/2020 20:24:34
Application state saved.


Keyed collections
This chapter introduces collections of data which are ordered by a key; Map and Set objects contain elements which are iterable in the order of insertion.
Maps
Map object
ECMAScript 6 introduces a new data structure to map values to values. A Map object is a simple key/value map and can iterate its elements in insertion order
The following code shows some basic operations with a Map. See also the Map reference page for more examples and the complete API. You can use a for...of loop to return an array of [key, value] for each iteration.
var sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow");
sayings.set("elephant", "toot");
sayings.size; // 3
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
sayings.has("dog"); // false
for (var [key, value] of sayings) {
console.log(key + " goes " + value);
}
// "cat goes meow"
// "elephant goes toot"
sayings.clear();
sayings.size; // 0
Object and Map compared
Traditionally, objects have been used to map strings to values. Objects allow you to set keys to values, retrieve those values, delete keys, and detect whether something is stored at a key. Map objects, however, have a few more advantages that make them better maps.
The keys of an Object are Strings, where they can be of any value for a Map.
You can get the size of a Map easily while you have to manually keep track of size for an Object.
The iteration of maps is in insertion order of the elements.
An Object has a prototype, so there are default keys in the map. (this can be bypassed using map = Object.create(null)).
These three tips can help you to decide whether to use a Map or an Object:
Use maps over objects when keys are unknown until run time, and when all keys are the same type and all values are the same type.
Use maps in case if there is a need to store primitive values as keys because object treats each key as a string whether it's a number value, boolean value or any other primitive value.
Use objects when there is logic that operates on individual elements.
WeakMap object
The WeakMap object is a collection of key/value pairs in which the keys are objects only and the values can be arbitrary values. The object references in the keys are held weakly meaning that they are target of garbage collection (GC) if there is no other reference to the object anymore. The WeakMap API is the same as the Map API.
One difference to Map objects is that WeakMap keys are not enumerable (i.e. there is no method giving you a list of the keys). If they were, the list would depend on the state of garbage collection, introducing non-determinism.
For more information and example code, see also "Why WeakMap?" on the WeakMap reference page.
One use case of WeakMap objects is to store private data for an object or to hide implementation details. The following example is from Nick Fitzgerald blog post "Hiding Implementation Details with ECMAScript 6 WeakMaps". The private data and methods belong inside the object and are stored in the privates WeakMap object. Everything exposed on the instance and prototype is public; everything else is inaccessible from the outside world because privates is not exported from the module
const privates = new WeakMap();
function Public() {
const me = {
// Private data goes here
};
privates.set(this, me);
}
Public.prototype.method = function () {
const me = privates.get(this);
// Do stuff with private data in `me`...
};
module.exports = Public;
v
Set object
Set objects are collections of values. You can iterate its elements in insertion order. A value in a Set may only occur once; it is unique in the Set's collection.
The following code shows some basic operations with a Set. See also the Set reference page for more examples and the complete API.
var mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");
mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2
for (let item of mySet) console.log(item);
// 1
// "some text"
Converting between Array and Set
You can create an Array from a Set using Array.from or the spread operator. Also, the Set constructor accepts an Array to convert in the other direction. Note again that Set objects store unique values, so any duplicate elements from an Array are deleted when converting.
Array.from(mySet);
[...mySet2];
mySet2 = new Set([1,2,3,4]);
Array and Set compared
Traditionally, a set of elements has been stored in arrays in JavaScript in a lot of situations. The new Set object, however, has some advantages:
Checking whether an element exists in an collection using indexOf for arrays is slow.
Set objects let you delete elements by their value. With an array you would have to splice based on a element's index.
The value NaN cannot be found with indexOf in array.
Set objects store unique values, you don't have to keep track of duplicates by yourself.
WeakSet object
WeakSet objects are collections of objects. An object in the WeakSet may only occur once; it is unique in the WeakSet's collection and objects are not enumerable.
The main differences to the Set object are:
In contrast to Sets, WeakSets are collections of objects only and not of arbitrary values of any type.
The WeakSet is weak: References to objects in the collection are held weakly. If there is no other reference to an object stored in the WeakSet, they can be garbage collected. That also means that there is no list of current objects stored in the collection. WeakSets are not enumerable.
The use cases of WeakSet objects are limited. They will not leak memory so it can be safe to use DOM elements as a key and mark them for tracking purposes, for example.
Key and value equality of Map and Set
Both, the key equality of Map objects and the value equality of Set objects, are based on the "same-value-zero algorithm":
Equality works like the identity comparison operator ===.
-0 and +0 are considered equal.
NaN is considered equal to itself (contrary to ===).


Riding a wave is like the “Perfect Storm”. A simultaneous occurrence of events that provide an opportunity to become “One with Nature” while experiencing the magical feeling of “flying” we imagined as kids along with the sense of achievement that we crave as adults. Total fulfillment on all levels; hence the addiction.


--- layout: page title: About header-img: "img/about-bg.png" ---
I am from Seattle, Washington and i am going through a career change. My current job is through Expert Air Control as a residential HVAC installer and i am less than content with my current situation. Its time to turn this ship around and go from a construction worker to a professional developer! I hope you can learn from my mistakes and take in information along the way that will help you on your journey!


Undo
Redo
Insert Text
Circle
Rectangle
Insert Shape
Arrange
Send Backward
Bring Forward
Arrange Objects
10
12
14
Font Size
Tahoma
Arial
Font
Bold
Italics
Underline
Fill Color
You can put anything
you want in here.
Effects
Toggle Bold


Preston murder trial: case of man accused of killing Steven May is delayed until 2020
by Stef HallThe trial of a 44 year-old man accused of murdering a Preston man has been adjourned until next year.
Darren Taylor, of no fixed address, was arrested on Saturday, May 25 and charged with the murder of 50-year-old Steven May.
Mr May was found at a home in Raven Street, Deepdale on Monday, May 20.
READ MORE: Neighbours are 'shocked and saddened' over death of 50-year-old man
Lancashire Police said a post mortem examination revealed a number of injuries to Mr May’s body including multiple fractures.
It is believed he died as a result of these injuries.
Taylor is facing a trial, which was due to take place this week, but the case has been adjourned.
It will now take place at Preston Crown Court on January 29.
It is understood Mr May, described by neighbours as ‘vulnerable’ had lived with his mother until she passed away last year.
(proceeding)


The graph interface API¶
The core class of this toolbox is the GraphInterface
. It wraps around the The graph class data structure and provides functionality for its creation, parsing and editing.
Provided methods¶
The main functionality of this class is:
Model creation¶
readModel(model)
Graph search¶
getEquations(ids)
getVariables(ids)
getVariablesKnown(id)
getVariablesUnknown(id)
getVarIdByAlias(alias)
getEdges(ids)
getEdgeWeight(ids)
getEdgeIdByVertices(equIds,varIds)
getAliasById(ids)
getMatchedEqus()
getMatchedVars()
getMathedEdges()
Logical tests¶
isEquation(ids)
isVariable(ids)
isEdge(ids)
isMatched(ids)
isKnown(ids)
isIntegral(ids)
isDerivative(ids)
isNonSolvable(ids)
Graph element editing¶
setEdgeWeight(ids, weights)
setMathed(ids)
setKnown(ids)
Graph manipulation¶
applyMatching(M)
Adjacency matrices¶
Traditionally, structural methods used adjacency matrices for model representation. GraphInterface
creates such a matrix based on its graph with createAdjacency()
and adds it to its members, as an Adjacency
class.
This class provides the bidirectional (BD
), equation-to-variable (E2V
) and variable-to-equations (V2E
) matrices as its members, with weighted entries.


moved_columns_in_project
by Trey Pendragon at 2020-11-30 17:52:37.assigned
by Trey Pendragon at 2020-11-30 17:52:39.closed
by Trey Pendragon at 2020-11-30 18:29:02.moved_columns_in_project
by Trey Pendragon at 2020-11-30 18:29:03.base_ref_changed
by None at 2020-11-30 16:33:45.referenced
by James R. Griffin III at 2020-11-30 16:37:37.merged
by James R. Griffin III at 2020-11-30 16:37:37.closed
by James R. Griffin III at 2020-11-30 16:37:37.head_ref_deleted
by James R. Griffin III at 2020-11-30 16:37:41.base_ref_changed
by James R. Griffin III at 2020-11-30 16:38:05.base_ref_changed
by James R. Griffin III at 2020-11-30 16:38:40.referenced
by Trey Pendragon at 2020-11-30 18:30:51.merged
by Trey Pendragon at 2020-11-30 18:30:51.closed
by Trey Pendragon at 2020-11-30 18:30:51.head_ref_deleted
by Trey Pendragon at 2020-11-30 18:30:52.head_ref_force_pushed
by None at 2020-11-30 16:23:45.Coverage decreased (-0.2%) to 81.846% when pulling 701c23af5e1d7ba0c458e1d6a9ae50e5173bf60c on 871-api-estimate-hits into 0509eddc2f2830c25a683cb2082d66c36a3e3694 on main.
head_ref_force_pushed
by Christina Chortaria at 2020-11-30 15:43:02.assigned
by Christina Chortaria at 2020-11-30 19:52:58.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:25.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:26.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:28.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:29.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:30.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:32.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:33.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:34.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:35.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:36.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:37.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:38.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:39.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:46.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:47.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:49.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:49.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:55.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:56.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:57.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:26:58.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:00.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:01.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:07.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:08.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:08.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:13.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:15.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:16.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:26.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:28.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:30.head_ref_deleted
by Christina Chortaria at 2020-11-30 14:27:43.referenced
by None at 2020-11-30 14:29:54.merged
by None at 2020-11-30 14:29:54.closed
by None at 2020-11-30 14:29:54.head_ref_deleted
by None at 2020-11-30 14:29:55.referenced
by Francis Kayiwa at 2020-11-30 14:45:57.merged
by Francis Kayiwa at 2020-11-30 14:45:57.closed
by Francis Kayiwa at 2020-11-30 14:45:58.head_ref_deleted
by Francis Kayiwa at 2020-11-30 14:45:58.closed
by Francis Kayiwa at 2020-11-30 14:46:24.head_ref_deleted
by Francis Kayiwa at 2020-11-30 14:46:29.referenced
by Eliot Jordan at 2020-11-30 18:03:54.merged
by Eliot Jordan at 2020-11-30 18:03:55.closed
by Eliot Jordan at 2020-11-30 18:03:55.head_ref_deleted
by Eliot Jordan at 2020-11-30 18:03:56.referenced
by Christina Chortaria at 2020-11-30 18:36:31.merged
by Christina Chortaria at 2020-11-30 18:36:32.closed
by Christina Chortaria at 2020-11-30 18:36:32.head_ref_deleted
by Christina Chortaria at 2020-11-30 18:36:33.referenced
by Kevin Reiss at 2020-11-30 15:19:18.merged
by Kevin Reiss at 2020-11-30 15:19:18.closed
by Kevin Reiss at 2020-11-30 15:19:18.head_ref_deleted
by Kevin Reiss at 2020-11-30 15:19:25.Two pieces of feedback from coms:
@kevinreiss Dropdown would make sense if they are sending these texts via email and we were associating the carrier domains, e.g., @vtext.com for verizon. If we want the wireless carriers to be a dropdown, then they need to supply those values. We can't be certain that all staff use the major wireless carriers. IMO we can be more inclusive with the field as free text.
mentioned
by Kevin Reiss at 2020-11-30 18:01:25.subscribed
by Kevin Reiss at 2020-11-30 18:01:25.Based on error messages from parsing... https://library.princeton.edu/import/pul_library_staff_importer/log
Complete list of names not in the finance database:
rg9732
eg3321
jb0737
cj0577
brj2
cvansant
kavitak
psayer
boatman
Person with bad email address: gissood has a pren in their email
Form is now for authenticated users only
closed
by Axa Mei Liauw at 2020-11-30 20:53:03.referenced
by Eliot Jordan at 2020-11-30 18:03:22.merged
by Eliot Jordan at 2020-11-30 18:03:22.closed
by Eliot Jordan at 2020-11-30 18:03:22.head_ref_deleted
by Eliot Jordan at 2020-11-30 18:03:25.deployed
by Trey Pendragon at 2020-11-30 15:27:49.deployed
by Trey Pendragon at 2020-11-30 15:49:14.head_ref_force_pushed
by None at 2020-11-30 15:51:31.deployed
by Trey Pendragon at 2020-11-30 15:51:49.deployed
by Trey Pendragon at 2020-11-30 15:57:10.head_ref_force_pushed
by None at 2020-11-30 15:59:07.deployed
by Trey Pendragon at 2020-11-30 15:59:16.head_ref_force_pushed
by None at 2020-11-30 16:01:01.deployed
by Trey Pendragon at 2020-11-30 16:01:06.deployed
by Trey Pendragon at 2020-11-30 16:04:33.deployed
by Trey Pendragon at 2020-11-30 16:09:36.deployed
by Trey Pendragon at 2020-11-30 16:13:47.deployed
by Trey Pendragon at 2020-11-30 16:15:59.deployed
by Trey Pendragon at 2020-11-30 16:17:59.deployed
by Trey Pendragon at 2020-11-30 16:43:06.head_ref_force_pushed
by None at 2020-11-30 16:48:11.head_ref_force_pushed
by None at 2020-11-30 17:02:50.head_ref_force_pushed
by None at 2020-11-30 17:04:31.head_ref_force_pushed
by None at 2020-11-30 17:45:12.head_ref_force_pushed
by None at 2020-11-30 18:28:15.I am not sure, @faithc do you remember what Mandy meant?
I think this was just us noting that we liked this feature, so I think it can be closed. :)
mentioned
by None at 2020-11-30 13:50:15.subscribed
by None at 2020-11-30 13:50:15.closed
by Trey Pendragon at 2020-11-30 16:06:01.I don't see the dead link? Both redirect to our newer combined Digitization guidelines. I have also asked that this FAQ be editied to be more uniform.
@ccleeton https://faq.library.princeton.edu/rbsc/faq/64876 works for you?
Oh interesting, i searched it on the SC site and found this which is linked to libanswers https://library.princeton.edu/special-collections/faqs/how-can-i-purchase-copies-rare-books-special-collections
mentioned
by Christa Cleeton at 2020-11-30 16:07:04.subscribed
by Christa Cleeton at 2020-11-30 16:07:04.referenced
by Kevin Reiss at 2020-11-30 15:22:31.merged
by Kevin Reiss at 2020-11-30 15:22:31.closed
by Kevin Reiss at 2020-11-30 15:22:31.head_ref_deleted
by Kevin Reiss at 2020-11-30 15:22:35.referenced
by Kevin Reiss at 2020-11-30 15:23:00.merged
by Kevin Reiss at 2020-11-30 15:23:00.closed
by Kevin Reiss at 2020-11-30 15:23:01.head_ref_deleted
by Kevin Reiss at 2020-11-30 15:23:05.referenced
by Kevin Reiss at 2020-11-30 15:21:59.merged
by Kevin Reiss at 2020-11-30 15:21:59.closed
by Kevin Reiss at 2020-11-30 15:21:59.head_ref_deleted
by Kevin Reiss at 2020-11-30 15:22:03.referenced
by Kevin Reiss at 2020-11-30 15:20:04.merged
by Kevin Reiss at 2020-11-30 15:20:04.closed
by Kevin Reiss at 2020-11-30 15:20:05.head_ref_deleted
by Kevin Reiss at 2020-11-30 15:20:08.Resolved: Confluence is back up in 25246b5
.
labeled
by Francis Kayiwa at 2020-11-30 03:21:49.labeled
by Francis Kayiwa at 2020-11-30 03:21:49.locked
by Francis Kayiwa at 2020-11-30 03:21:50.closed
by Francis Kayiwa at 2020-11-30 03:31:51.Resolved: Confluence is back up in 8cbe2cb
.
labeled
by Francis Kayiwa at 2020-11-30 03:55:06.labeled
by Francis Kayiwa at 2020-11-30 03:55:06.locked
by Francis Kayiwa at 2020-11-30 03:55:06.closed
by Francis Kayiwa at 2020-11-30 04:25:37.


Mobile Hack Days
© Copyright 2011 #MobileHackDays LA | LA's First Mobile Hackathon - iPhone, Android, HTML5, PhoneGap, Flex, BlackBerry, Windows Mobile
MobileHackDays™ and MobileHackDays logo are trademarks of GlassCode. All rights reserved.
Visit LA Mobile Hackathon online