BATMAN AND ROBIN A film review by Michael John Legeros Copyright 1997 Michael John Legeros
(WB) Directed by Joel Schumacher Written by Akiva Goldsman, based on the DC Comics Cast George Clooney, Arnold Schwarzenegger, Chris O'Donnell, Uma Thurman, Alicia Silverstone, Michael Gough, Pat Hingle, Elle Macpherson, John Glover, Jeep Swenson MPAA Rating "PG-13" Running Time 130 minutes Reviewed at Mission Valley and Carmike 7 Cinemas, Raleigh, NC (18JUN97, 20JUN97, 25JUN97)
==
A colorfully clunky costumed romp, BATMAN AND ROBIN is the most lighthearted of the Batflicks. Though not nearly the camp classic that director Joel Schumacher (A TIME TO KILL, BATMAN FOREVER) obviously intended, the movie that Frank Miller fans love to hate delivers many a hearty Batlaugh, from the first scene's fetishistic close-ups (butt, codpiece, etc.) to Uma Thurman's wonderfully punny innuendo. (Address- ing Arnold Schwarzenegger's diamond-stealing Mr. Freeze, her Poison Ivy purrs "I'll help you grab your rocks.") Subtle in ain't, but at least the tone (or lack thereof) is consistent from the beginning. (If, say, Schwarz's chilling puns don't warm your blood, you'll know to make tracks.) And, while said villains once again steal the show, we actually get to spend a little quiet time around Stately Wayne Manor. (Subplots include a bratty Boy Wonder, an illness for Alfred, and the arrival of Barbara Wilson, Mr. Pennyworth's niece, a student at Oxbridge By The Beach.)
Of the primary players, Chris O'Donnell is, again, the most engaging. George Clooney certainly *looks* good as Bruce Wayne, but, well, he smiles too much. (Even during death scenes!) And he keeps nodding, for some reason. (All that rooftop-induced vertigo, I guess.) Alicia Silverstone doesn't add much to the movie as Batgirl, but, hey, she looks good in a costume! (No nipples on the Batboobs, though. Sigh.) Uma's Ivy is absolutely fabulous, despite a weak origin sequence. Arnie is also in on the joke, though his huge costume seems to stiffen his line-readings. (He's much more fun at home, at his ice lair, wear- ing his fuzzy polar bear slippers.) On the supporting front, both Michael Gough and Pat Hingle have returned for a fourth go-around, as Alfred and Commissioner "Don't Ask Why I'm Dressed Like Chief O'Hara" Gordon. Also packaged among the action figures: a wildly coifed John Glover (as Dr. Jason Woodrue, evil scientist), a masked and body- painted Jeep Swanson (as Bane, bane of all Batfans), and a trio of supermodels, Elle Macpherson, Vivica Fox, and Vendela K. Thommesen, as assorted dolls, molls, and frozen wives.
The big surprise-- well, other than the distressing realization that yet a *third* actor can wear the rubber suit and not make much of a difference-- is the surplus of action, surely a first for the franchise. Neither of the title characters does much detective work in this movie, but they do have a high time playing hockey and racing their vehicles down the arms of giant statues and escaping airborne rocket ships without the use of parachutes. Or oxygen masks. (And you thought the Batmobile driving up the side of a building was a stretch!) Other treats: O'Donnell and Clooney's casual chemistry, a playful assortment of in-jokes and self-references, and the most accomplished art direction of the Batseries. Finally, we experience Gotham City from enough angles, heights, and perspectives to appreciate the visions inspired by Anton Furst (BATMAN) and Bo Welch (BATMAN RETURNS), and, now, fully realized by production designer Barbara Ling.
Like all the Batfeatures before it, the film's great failing is in the editing. The pacing is horrid. The action sequences are often confusing. Character introductions are abrupt. Prickly plot points are ignored. (For the nit-picker, though, it's pure gold. How did they know to bring ice skates? Where does Batman have his credit card bill sent? Why is a computer-science major reduced to guessing passwords, and on a computer that actually displays the characters as she types them? Holy Hollywood!) BATMAN AND ROBIN badly needs another trip (or two) through the editing booth. And, given that Schumacher has re- portedly recut BATMAN FOREVER, for an as-of-yet unreleased DVD release, there may be hope for the camped crusaders yet. There's a decent movie in here, arguably the most audience-friendly of the franchise. It just needs a few more passes with the Batscissors.
Grade: C+
--
Mike Legeros - Movie Hell http://www.nonvirtual.com/hell/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Namespace GameJolt.Services
Classes
Datastore
A cloud-based data storage system. It's completely up to you what you use this for. The more inventive the better! Caution: GameJolt has a hard limit of 16MB per key-value pair and a soft limit of 1MB per post-request.
Friends
A namespace to get information about users friends on Game Jolt.
Scores
Game Jolt supports multiple online score tables, or scoreboards, per game. You are able to, for example, have a score table for each level in your game, or a table for different scoring metrics. Gamers will keep coming back to try to achieve the highest scores for your game. With multiple formatting and sorting options, the system is quite flexible. You are also able to include extra data with each score. If there is other data associated with the score such as time played, coins collected, etc., you should definitely include it. It will be helpful in cases where you believe a gamer has illegitimately achieved a high score.
Service
Base class for all GameJolt services.
Sessions
Sessions are used to tell Game Jolt when a user is playing a game, and what state they are in while playing (active or idle).
Time
A namespace to obtain time information from the Game Jolt server.
Trophies
Game Jolt allows you to add trophies to your games!
Trophies come in four materials: bronze, silver, gold, and platinum. This is to reflect how difficult it is to achieve a trophy. A bronze trophy should be easy to achieve, whereas a platinum trophy should be very hard to achieve.
On Game Jolt, trophies are always listed in order from easiest to most difficult to achieve. You can also tag trophies on the site as "secret". A sercet trophy's image and description is not visible until a gamer has achieved it.Users
Your games will not authenticate users by using their username and password. Instead, users have a token to verify themselves along with their username.
Enums
DatastoreOperation
DataStore operations.


Package com.google.rpc.context
Interface AttributeContext.AuthOrBuilder
- All Superinterfaces:
com.google.protobuf.MessageLiteOrBuilder
,com.google.protobuf.MessageOrBuilder
- All Known Implementing Classes:
AttributeContext.Auth
,AttributeContext.Auth.Builder
- Enclosing class:
- AttributeContext
public static interface AttributeContext.AuthOrBuilder
extends com.google.protobuf.MessageOrBuilder
-
Method Summary
Modifier and TypeMethodDescriptiongetAccessLevels
(int index) A list of access level resource names that allow resources to be accessed by authenticated requester.com.google.protobuf.ByteString
getAccessLevelsBytes
(int index) A list of access level resource names that allow resources to be accessed by authenticated requester.int
A list of access level resource names that allow resources to be accessed by authenticated requester.A list of access level resource names that allow resources to be accessed by authenticated requester.getAudiences
(int index) The intended audience(s) for this authentication information.com.google.protobuf.ByteString
getAudiencesBytes
(int index) The intended audience(s) for this authentication information.int
The intended audience(s) for this authentication information.The intended audience(s) for this authentication information.Structured claims presented with the credential.Structured claims presented with the credential.The authorized presenter of the credential.com.google.protobuf.ByteString
The authorized presenter of the credential.The authenticated principal.com.google.protobuf.ByteString
The authenticated principal.boolean
Structured claims presented with the credential.Methods inherited from interface com.google.protobuf.MessageLiteOrBuilder
isInitialized
Methods inherited from interface com.google.protobuf.MessageOrBuilder
findInitializationErrors, getAllFields, getDefaultInstanceForType, getDescriptorForType, getField, getInitializationErrorString, getOneofFieldDescriptor, getRepeatedField, getRepeatedFieldCount, getUnknownFields, hasField, hasOneof
-
Method Details
-
getPrincipal
String getPrincipal()The authenticated principal. Reflects the issuer (`iss`) and subject (`sub`) claims within a JWT. The issuer and subject should be `/` delimited, with `/` percent-encoded within the subject fragment. For Google accounts, the principal format is: "https://accounts.google.com/{id}"
string principal = 1;
- Returns:
- The principal.
-
getPrincipalBytes
com.google.protobuf.ByteString getPrincipalBytes()The authenticated principal. Reflects the issuer (`iss`) and subject (`sub`) claims within a JWT. The issuer and subject should be `/` delimited, with `/` percent-encoded within the subject fragment. For Google accounts, the principal format is: "https://accounts.google.com/{id}"
string principal = 1;
- Returns:
- The bytes for principal.
-
getAudiencesList
The intended audience(s) for this authentication information. Reflects the audience (`aud`) claim within a JWT. The audience value(s) depends on the `issuer`, but typically include one or more of the following pieces of information: * The services intended to receive the credential. For example, ["https://pubsub.googleapis.com/", "https://storage.googleapis.com/"]. * A set of service-based scopes. For example, ["https://www.googleapis.com/auth/cloud-platform"]. * The client id of an app, such as the Firebase project id for JWTs from Firebase Auth. Consult the documentation for the credential issuer to determine the information provided.
repeated string audiences = 2;
- Returns:
- A list containing the audiences.
-
getAudiencesCount
int getAudiencesCount()The intended audience(s) for this authentication information. Reflects the audience (`aud`) claim within a JWT. The audience value(s) depends on the `issuer`, but typically include one or more of the following pieces of information: * The services intended to receive the credential. For example, ["https://pubsub.googleapis.com/", "https://storage.googleapis.com/"]. * A set of service-based scopes. For example, ["https://www.googleapis.com/auth/cloud-platform"]. * The client id of an app, such as the Firebase project id for JWTs from Firebase Auth. Consult the documentation for the credential issuer to determine the information provided.
repeated string audiences = 2;
- Returns:
- The count of audiences.
-
getAudiences
The intended audience(s) for this authentication information. Reflects the audience (`aud`) claim within a JWT. The audience value(s) depends on the `issuer`, but typically include one or more of the following pieces of information: * The services intended to receive the credential. For example, ["https://pubsub.googleapis.com/", "https://storage.googleapis.com/"]. * A set of service-based scopes. For example, ["https://www.googleapis.com/auth/cloud-platform"]. * The client id of an app, such as the Firebase project id for JWTs from Firebase Auth. Consult the documentation for the credential issuer to determine the information provided.
repeated string audiences = 2;
- Parameters:
index
- The index of the element to return.- Returns:
- The audiences at the given index.
-
getAudiencesBytes
com.google.protobuf.ByteString getAudiencesBytes(int index) The intended audience(s) for this authentication information. Reflects the audience (`aud`) claim within a JWT. The audience value(s) depends on the `issuer`, but typically include one or more of the following pieces of information: * The services intended to receive the credential. For example, ["https://pubsub.googleapis.com/", "https://storage.googleapis.com/"]. * A set of service-based scopes. For example, ["https://www.googleapis.com/auth/cloud-platform"]. * The client id of an app, such as the Firebase project id for JWTs from Firebase Auth. Consult the documentation for the credential issuer to determine the information provided.
repeated string audiences = 2;
- Parameters:
index
- The index of the value to return.- Returns:
- The bytes of the audiences at the given index.
-
getPresenter
String getPresenter()The authorized presenter of the credential. Reflects the optional Authorized Presenter (`azp`) claim within a JWT or the OAuth client id. For example, a Google Cloud Platform client id looks as follows: "123456789012.apps.googleusercontent.com".
string presenter = 3;
- Returns:
- The presenter.
-
getPresenterBytes
com.google.protobuf.ByteString getPresenterBytes()The authorized presenter of the credential. Reflects the optional Authorized Presenter (`azp`) claim within a JWT or the OAuth client id. For example, a Google Cloud Platform client id looks as follows: "123456789012.apps.googleusercontent.com".
string presenter = 3;
- Returns:
- The bytes for presenter.
-
hasClaims
boolean hasClaims()Structured claims presented with the credential. JWTs include `{key: value}` pairs for standard and private claims. The following is a subset of the standard required and optional claims that would typically be presented for a Google-based JWT: {'iss': 'accounts.google.com', 'sub': '113289723416554971153', 'aud': ['123456789012', 'pubsub.googleapis.com'], 'azp': '123456789012.apps.googleusercontent.com', 'email'<EMAIL_ADDRESS>'iat':<PHONE_NUMBER>, 'exp':<PHONE_NUMBER>} SAML assertions are similarly specified, but with an identity provider dependent structure.
.google.protobuf.Struct claims = 4;
- Returns:
- Whether the claims field is set.
-
getClaims
Struct getClaims()Structured claims presented with the credential. JWTs include `{key: value}` pairs for standard and private claims. The following is a subset of the standard required and optional claims that would typically be presented for a Google-based JWT: {'iss': 'accounts.google.com', 'sub': '113289723416554971153', 'aud': ['123456789012', 'pubsub.googleapis.com'], 'azp': '123456789012.apps.googleusercontent.com', 'email'<EMAIL_ADDRESS>'iat':<PHONE_NUMBER>, 'exp':<PHONE_NUMBER>} SAML assertions are similarly specified, but with an identity provider dependent structure.
.google.protobuf.Struct claims = 4;
- Returns:
- The claims.
-
getClaimsOrBuilder
StructOrBuilder getClaimsOrBuilder()Structured claims presented with the credential. JWTs include `{key: value}` pairs for standard and private claims. The following is a subset of the standard required and optional claims that would typically be presented for a Google-based JWT: {'iss': 'accounts.google.com', 'sub': '113289723416554971153', 'aud': ['123456789012', 'pubsub.googleapis.com'], 'azp': '123456789012.apps.googleusercontent.com', 'email'<EMAIL_ADDRESS>'iat':<PHONE_NUMBER>, 'exp':<PHONE_NUMBER>} SAML assertions are similarly specified, but with an identity provider dependent structure.
.google.protobuf.Struct claims = 4;
-
getAccessLevelsList
A list of access level resource names that allow resources to be accessed by authenticated requester. It is part of Secure GCP processing for the incoming request. An access level string has the format: "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}" Example: "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
repeated string access_levels = 5;
- Returns:
- A list containing the accessLevels.
-
getAccessLevelsCount
int getAccessLevelsCount()A list of access level resource names that allow resources to be accessed by authenticated requester. It is part of Secure GCP processing for the incoming request. An access level string has the format: "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}" Example: "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
repeated string access_levels = 5;
- Returns:
- The count of accessLevels.
-
getAccessLevels
A list of access level resource names that allow resources to be accessed by authenticated requester. It is part of Secure GCP processing for the incoming request. An access level string has the format: "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}" Example: "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
repeated string access_levels = 5;
- Parameters:
index
- The index of the element to return.- Returns:
- The accessLevels at the given index.
-
getAccessLevelsBytes
com.google.protobuf.ByteString getAccessLevelsBytes(int index) A list of access level resource names that allow resources to be accessed by authenticated requester. It is part of Secure GCP processing for the incoming request. An access level string has the format: "//{api_service_name}/accessPolicies/{policy_id}/accessLevels/{short_name}" Example: "//accesscontextmanager.googleapis.com/accessPolicies/MY_POLICY_ID/accessLevels/MY_LEVEL"
repeated string access_levels = 5;
- Parameters:
index
- The index of the value to return.- Returns:
- The bytes of the accessLevels at the given index.
-


--- layout: default title: ICBES'17 - Symposium meta: Organize a symposim under the umbrella of the conference keyword: biomedical engineering conference, biomedical conference, biosystems conference, biomaterials conference, biomechanics conference, biomechatronics conference, biosensors conference, telemedicine conference, robotics conference, biomedical engineering, biomedical, biosystems, biomaterials, biomechanics, biomechatronics, biosensors, telemedicine, robotics ---
The 4th International Conference on Biomedical Engineering and Systems (ICBES'17) invites you to propose a symposium.
The proposed symposium, if accepted, will be co-located with and under the umbrella of the conference.
Proposals by prospective chairs should be submitted to<EMAIL_ADDRESS>and will be evaluated by the Organizing and Scientific Committees. Upon approval, the Organizing Committee will disseminate the news through the conference website and call for papers. To obtain a high attendance, we kindly ask that the prospective chairs also publicize the event and personally contact researchers who they think will be interested to contribute. The minimum number of registered presenters for the event to take place is 7. Should attendance reach this minimum requirement, registration fees for the Chair will be waived.
If you have any questions, please do not hesitate to contact us at info@icbes.net.


Roadmap
These are the major features we're planning to implement on the road to
the Torsion 2 release. Note that these plans can change and are not a guarantee
of future releases and features.
- Editor position tracking.
- Split editor windows.
- Refactoring tools.
- New docking window system.
- Additional syntax highlighting customization.
- More improvements to Torque's TelnetDebugger.
- Opening of non-script files in editor.
- Unicode support.
- Live project tree icons.
- Further TorqueScript language enhancements.
If you have any other feature requests or suggestions please post them to our bug tracking system for consideration.
Copyright © Sickhead Games, LLC. All rights reserved.


Results Controller
Collection views are a data driven UI element. Managing data is hard enough, making sure changes to that data are relfected in your app can add a lot of complexity quickly; Especially with highly dynamic data.
Resultscontroller
is designed to bridge the gap between data and a collection view. While its inspiration, NSFetchedResultsController only works with CoreData and its NSManagedObject, this implementation uses native Swift KeyPaths and a generic SortDescriptor type making usable any object type.
A Mutable Results Controller?
Traditionally, the beauty of NSFetchedResutls controller is that it listens to your Core Data store and tells you when changes are made. This is great, and you can do that here too (see below) but one of the other helpful aspects of a results controller is translating changes in your data to changes in a collection view. As mentioned in the Content Manipulation guide, tracking those changes can complicated with highly dynamic data.
MutableResultsController is designed manage your data, respond to changes in that data, and translate those changes into updates a collection view can understand. The only difference from a core data backed controller that recieves changes by monitoring the store is that you provide the changes. Let’s take a look
A very basic example of a mutable results controller setup:
let mrc = MutableResultsController<NoSectionType, Child>()
let child1 = Child()
let child2 = Child()
mrc.setContents([child1, child2])
mrc.numberOfSections() // 1
mrc.numberOfObjects(in: 0) // 2
In this simple example we it may not seem clear why using a controller is better than a simple array. One nice benefit is that you can maintain a consistent api for powering your data source. But the real power comes when we start set up a more complex controller.
Let’s add a section key path and ordering. Defining a name and age property on our Child object we can then use those properties to group and sort a set of chilren. Let’s group them by age and then sort by name within each group. And finally we also went each group to line up from youngest to oldes.
struct Child {
let name : String
let age : String
}
let mrc = MutableResultsController<Int, Child>(sectionKeyPath: \Child.rank,
sortDescriptors: [SortDescriptor(\Child.name)],
sectionSortDescriptors: [SortDescriptor<Int>.ascending])
mrc.setContents([
Child((name: "Geoff", age: 9),
Child((name: "Sarah", age: 8),
Child((name: "Steve", age: 10)
Child((name: "Amy", age: 8),
])
// Sections
8 : [Child((name: "Amy", age: 8), Child((name: "Sarah", age: 8)]
9 : [Child((name: "Geoff", age: 9)]
10: [Child((name: "Steve", age: 10)]
mrc.numberOfSections() // 3
mrc.numberOfObjects(in: 0) // 2
mrc.numberOfObjects(in: 1) // 1
mrc.numberOfObjects(in: 2) // 1
mrc.object(at: IndexPath.for(item: 0, section: 0)) // name:Amy age:8)
Using results controller now provides a bit more usfullness. Setting the contents handles a lot of data processing both grouping the items then sorting everything, that data is then exposed in a consistent API that aligns with the collection view API. When implementing collections views in various places results controller can help make more of your collection view implmentations reusable.
Updating Data
Of course as a mutable
results controller, data can be mutated when working with elements of a reference type.
To insert or delete items just call insert(object:)
or delete(object:)
. To update objects that already exist, make the changes to your object then call didUpdate(object:
. For a controller with a sectionKeyPath and/or sort descriptors, notifying it of the change will alert the controller to process that change and update its internal storage.
Delegate
So far results controller has provided a simple consistent interface and helpful sorting and grouping, why is this in a collection view library you ask? Typically when you insert, remove, or update data in your data set you first need to determine how that updates our data set. Then you need to translate that into terms the collection view understands to reflect those changes on the screen. By letting results controller manage your data, it will make those translations and provide them to its delegate which conforms to ResultsControllerDelegate
.
The delegate will recieve every change that needs to occur in your collection view to keep it up to date with your data set.
Collection View Provider
CollectionViewProvider
is a helper object that automatically handles the connection between your results controller and a collection view. It holds a references to both objects, becomes the results controllers delegate and automatically pushes changes to the collection view.
After setting up a provider the only steps left up to you are:
- load and set your data
- Make a change in your data
- Tell the results controller
The provider will coordinate the everything else.
Compare that to the steps in a traditional:
- Design a data structure
- Load your data
- Sort and group the data as needed
- Reload data
- Change and object
- Resort and regroup the data
- Translate the change into collection view updates
- Dispatch those updates
Core Data Results Controllers
Mentioned above, Results Controller is inspired by NSFetchedResultsController and originally started as a CoreData only controller. As of v2 of CollectionView though the core data implementation is a simple subclass of MutableResultsController.
FetchedResultsController
and RelationalResultsController
monitor the provided NSManagedObjectContext for changes and process those changes, updating their data as needed.
See the docs for these controllers for more information.


We all know what it is to be around the campus and to have some trouble to find a room, to find a place to eat or anything else.
Indeed, KTH Main Campus or KTH Kista Campus are gigantic campus where it is quite easy to get lost.
This web application wants you to be able to find whatever you might be looking for on the campus, a place to eat, a room to book, a lecture room, the list price/meal of every restaurants, and all of this in the easier way possible.


Help Page
Hello and welcom to the Eng Soc Forum Help page, here are awnsers to many many commonly asked qustions, as well direct you to resources that will help you if you cannnot find an awsner here.
To begin what is the Eng Forum? – Well the Eng Forum is a website that is dedicated to Queen’s engineering students. It serves the purpose of a local knowledge bank for engineering students. Here students, given they sign in with their student ID will have access to a hopefully one day vast bank of knowledge.
These resources are available through a finely tuned search algorithm that allows students to search for any pieces of information, from any subject at any level. The search function is the sites greatest strength, it is the first thing that greats you once you visit the website. All the information however does not come from nowhere. The knowledge and information comes from students asking questions related to school, and other students answering the question if they know it. (more on this later).
Users/ students will post questions related to a topic/ class, and other students will answer the question to the best of their ability. Answers that are “quality” will be “upvoted” by other students. This will indicate the quality of the answer to other students, as well as make the answer more visible.
These are the basics to the website, more details on the website can be seen below.
Search:
Who is this website available too?
In it’s current form the forum is dedicated to Queen’s engineering students only. No further plans have been made at this point and time.
How do I ask a question?
One you have accessed our website you should be prompted with either login page on the main search page, the difference should be noticeable. Once you are logged in you will be greeted with our main landing page. Here you will find the main search bar that encompasses a large portion of the page. Click on the search bar and type in your question to ask your question.
You can refine your search by selecting options such as tags, relevance, and submission date. One you are happy with your question simply click the search button or press the enter key.
What are tags?
Tags are classifiers attached to post and pages that assign what subject that question is relate to. So, for example if you were to ask or search for a question related to physics - 111. That question should be tagged with a tag labeled “APSC-111”. These tags assist in both organising and structuring the post and search of questions.
How to I post a question?
To ask or post or ask a question you must …
Do other people know who I am based on my username?
No who you are is completely confidential. Your username is randomly generated; there is no way of other people knowing your identity unless you tell them.
How do I answer posts?
Post can be answered by viewing posts and clicking on them. Once you on the question page there should be a button below the question. Pressing this button will open a penel which will allow you to comment.
What are these numbers I see next to posts?
The number next to posts and comments indicate “upvotes” these upvotes are there to indicate the quality of a post or question. A bigger number indicates that more people upvoted these comments, thus also indicating how good the question is, or how well the answer to the question is. To upvote the comment / post yourself simply click the arrow next to the number. If you see a negative number this indicates that the question was of poor quality, or the answer was unrelated / unhelpful. More upvoted posts will be shown closer to the top of the page, to allow for greater visibility.
What are the buttons below comments used for?
The buttons bellow posts and comments are used exactly as their labels suggest. Reply allows a user to respond to a comment with their own question. Report allows a user to report the question if the post / comment is hurtful / condescending or violating. Save allows a user to save a post for later. This allows for easy access to the question at a later time. Edit – this only appears to peoples own comments or posts. This allows them to edit a post or comment after they have posted them; to either clear up their question or fix grammatical errors.


|
|
boolean | ActiveWakeupBitEnabled |
| |
|
boolean | AllNmMessagesKeepAwake |
| |
|
boolean | BusLoadReductionActive |
| |
|
uint8 | CarWakeUpBitPosition |
| |
|
boolean | CarWakeUpFilterEnabled |
| |
|
uint8 | CarWakeUpFilterNodeId |
| |
|
boolean | CarWakeUpRxEnabled |
| |
|
float32 | ImmediateNmCycleTime |
| |
|
uint8 | ImmediateNmTransmissions |
| |
|
float32 | MsgCycleOffset |
| |
|
float32 | MsgCycleTime |
| |
|
float32 | MsgReducedTime |
| |
|
float32 | MsgTimeoutTime |
| |
|
boolean | NodeDetectionEnabled |
| |
|
uint8 | NodeId |
| |
|
boolean | NodeIdEnabled |
| |
|
CanNm_PduBytePositionType | PduCbvPosition |
| |
|
CanNm_PduBytePositionType | PduNidPosition |
| |
|
boolean | PnEnabled |
| |
|
boolean | PnEraCalcEnabled |
| |
|
boolean | PnHandleMultipleNetworkRequests |
| |
|
float32 | RemoteSleepIndTime |
| |
|
float32 | RepeatMessageTime |
| |
|
boolean | RepeatMsgIndEnabled |
| |
|
CanNm_RxPdu * | RxPdu [CANNM_RXPDU_MAX_COUNT] |
| |
|
float32 | TimeoutTime |
| |
|
CanNm_TxPdu * | TxPdu |
| |
|
CanNm_UserDataTxPdu * | UserDataTxPdu |
| |
|
float32 | WaitBusSleepTime |
| |
|
NetworkHandleType | ComMNetworkHandleRef |
| |
|
PduInfoType | PnEraRxNSduRef |
| |
The documentation for this struct was generated from the following file:


I took some inspiration from an existing Pelican docker image, except I found that the Dockerfile was a bit too bulky for my liking - I would also need to modify the Makefile to get the docker container be recognised and used by traefik as the reverse proxy.
For the Dockerfile I have tried to trim the image down as much as possible by using Python's alpine image. This leaves us with a compact Dockerfile of minimal size:
FROM python:alpine3.8
RUN apk add --no-cache --update make \
bash && \
pip install --upgrade pelican Markdown ghp-import shovel
WORKDIR /srv/pelican-website
CMD PORT=80 make devserver
Using a MakeFile, we can add some aliases to make building and running the container easy. For example:
docker-build:
docker build -t j0nn/pelican .
docker-kill:
docker stop pelican
docker rm pelican
And to get this running with traefik we add an additional "docker-run" argument to the Makefile:
docker-run:
docker run --name="pelican" --network="network" -d -v $(CURDIR)/website:/srv/pelican-website -l traefik.frontend.rule=Host:hostname.com,www.hostname.com -l traefik.port=80 -l traefik.docker.network=network -l traefik.enable=true j0nn/pelican
we have successfully dockerized pelican!


--- layout: post title: that short goodbye date: '2012-10-27T14:13:00-04:00' tags: - poetry tumblr_url: http://poetry.liabogoev.com/post/54953964514/that-short-goodbye ---
there’s more feeling
in that short goodbye
than all the other goodbyes in my life
a distilled goodbye, you could call it
when I know in my gut that I’ll see you again
when I know in my heart that you’ll be there
Goodbye is a menial thing
a fold in time
a skip in the disk of our lives together
I’ll see you again
I’ll hear your voice again
we both know
and that’s why there’s no sorrow
in our short goodbye.


Meghan 'most powerful' - Entertainment News
by WENNMeghan, Duchess of Sussex has beaten Kylie Jenner to top a list of the 10 most powerful celebrity fashion influencers of 2019.
The former Suits actress, who married Britain's Prince Harry last year, topped the list compiled by online retail shopping tool Lyst, based on data including sales, page views, global media coverage and social media mentions to generate findings on this year's biggest trends.
After releasing her debut fashion collection in association with Smart Works, an organization which helps unemployed women regain the confidence they need to succeed at job interviews, and guest editing the September issue of British Vogue, Meghan toppled make-up mogul Kylie from the top spot down to fourth place.
 In fourth was teenage pop music sensation Billie Eilish, with Cardi B slipping from fourth place last year to round out the top five.


Simple Crowdfund Dapp
Loading Web3 from Metamask... Please make sure your metamask is unlocked
Get Rate
Buy Tokens
Amount:
Get Balance
Address:
Transfer tokens
To Address:
Amount:


Location: Northampton Marriot Hotel
Date: 1st February 2018
Time: 9:00 - 15:00
Price: £75
Duration: 2 Days (8 hours per day)
Location: Northampton Marriot Hotel
Date: 1st February 2018
Time: 9:00 - 15:00
Price: £75
Duration: 2 Days (8 hours per day)
Location: Northampton Marriot Hotel
Date: 1st February 2018
Time: 9:00 - 15:00
Price: £75
Duration: 2 Days (8 hours per day)
Location: Northampton Marriot Hotel
Date: 1st February 2018
Time: 9:00 - 15:00
Price: £75
Duration: 2 Days (8 hours per day)
Location: Northampton Marriot Hotel
Date: 1st February 2018
Time: 9:00 - 15:00
Price: £75
Duration: 2 Days (8 hours per day)


Snackbars
Snackbars provide brief messages about app processes at the bottom of the screen.
References
Import
Design & API Documentation
| Methods |
Description |
| show(message: string) |
Show snackbar message. |
| show(message: string, action: string) |
Show snackbar message and action. |
|
| afterDismiss |
Gets an observable that is notified when the snackbar is finished closing. |
| Config |
| timeout: number (Default 2750) |
The amount of time in milliseconds to show the snackbar. |
| actionHandler: Function |
The function to execute when the action is clicked. |
| multiline: boolean |
Whether to show the snackbar with space for multiple lines of text. |
| actionOnBottom: boolean |
Whether to show the action below the multiple lines of text. |
| align: string |
Alignment of the snackbar on screen. Valid values - 'start' | 'center' | 'end' |
| dismissOnAction: boolean |
Dismisses snackbar when action button is clicked. |
| focusAction: boolean |
Sets focus to the action button. |
Basic Usage
EDIT IN STACKBLITZ


Supported Engines
HyperScript
Minthril
Fastn
preact
inferno
vhtml
Unsupported Engines
React
(reason: React changes events to be camelCased and changes props like class to className)
Demo


Retire.js
This add-on includes a passive scan rule which implements checks provided by Retire.js
in order to identify vulnerable or out-dated JavaScript packages.
Latest code: Retire.js Add-on
Note: This add-on is based on original work by Nikita Mundhad.


Pat's Salmon Cookies
Home
Sales
Merchandise
Locations
New store location info
Store name:
Minimum Customer in an hour:
Maximum Customer in an hour:
Average Cookie Sales each Hour
Add New Store Info
I hope sales are good!
Staff Needs
How is our staffing?


Our Vision
- To become leaders in the Indian Dairy Industry, while retaining our Indian traditions and family values.
- Be the first choice for consumers.
- Give our customers value for money. This will be through improvement in technologies used in our Dairy, thus enhancing the quality of our raw material, our internal processes, and the competency of our people.
- Provide our customers with the cleanest and healthiest milk, thus leading to more nutritional milk and milk products.
- Be a preferred employer in our field, and provide an environment that challenges our employees to learn, grow and prosper in an atmosphere of respect and recognition.
Our Mission
- Inspire sustained growth for our entire workforce and farmers who have engaged in long term partnerships with us
- Understanding customer needs and protecting their interests to build lifelong relationships and brand loyalty
Quality & Food Safety Objectives
- To increase customer satisfaction by reducing the instances of pilferages in Liquid Milk pouches.
- To modify & enhance processes as per customer expectation and market trends at least one per year for improving Quality & Safety of product.


|
Connected Home over IP
672cf7684
|
Defines state of a pairing established by an admin. More...
#include <transport/AdminPairingTable.h>
Public Member Functions | |
| AdminPairingInfo () | |
| NodeId | GetNodeId () const |
| void | SetNodeId (NodeId nodeId) |
| AdminId | GetAdminId () const |
| void | SetAdminId (AdminId adminId) |
| const OperationalCredentials & | GetOperationalCreds () const |
| OperationalCredentials & | GetOperationalCreds () |
| void | SetOperationalCreds (const OperationalCredentials &creds) |
| const AccessControlList & | GetACL () const |
| AccessControlList & | GetACL () |
| void | SetACL (const AccessControlList &acl) |
| bool | IsInitialized () const |
| void | Reset () |
| Reset the state to a completely uninitialized status. More... | |
| CHIP_ERROR | StoreIntoKVS (PersistentStorageDelegate &kvs) |
| CHIP_ERROR | FetchFromKVS (PersistentStorageDelegate &kvs) |
Static Public Member Functions | |
| static CHIP_ERROR | DeleteFromKVS (PersistentStorageDelegate &kvs, AdminId id) |
Defines state of a pairing established by an admin.
ACL data can be mutated throughout the lifetime of the admin pairing. Node ID is only settable using the device operational credentials.
Information contained within the state:
|
inline |
|
static |
| CHIP_ERROR chip::Transport::AdminPairingInfo::FetchFromKVS | ( | PersistentStorageDelegate & | kvs | ) |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Reset the state to a completely uninitialized status.
|
inline |
|
inline |
|
inline |
|
inline |
| CHIP_ERROR chip::Transport::AdminPairingInfo::StoreIntoKVS | ( | PersistentStorageDelegate & | kvs | ) |


|
"Consultant
of
Choice
for
improving
the
competitive
market
position
of
software
organizations."
Site
Map
Consulting
Training
Facilitation
Hotlist
Articles
Job
Aids
Bulletin
Board
Specialty
Store
Profile
Alliances
Home
Contact
Tantara
Guestbook
Webmaster |
Hotlist:
ISO 9001 for Software Industry
-- updated quarterly (ISO 9000-3, TickIT,...) --
|
Tantara offers easy access to ISO 9001 information
(ISO
9000-3, TickIT,...)
that is specific to improving a software organization's
process effectiveness and product/service potential.
See Tantara's main hotlist for
other information.
When reading information on the internet, take note of
the standard/model's edition being discussed/compared.
Click here for a list
depicting the current edition of key standards/models.
Click here for a quick
view of the world's maturity regarding software quality and software process
capability.
Resources:
Articles:
Documents and Reports:
Registered Software Organizations and their Registrars:
Governing agents for ISO 9001 and related software industry
schemes:
|
|
If you found this hotlist helpful,
imagine what Tantara can do "in person" (consulting / training).
Why consider Tantara's consulting/training?
Tantara is one of the few firms that has
proven experience in both
software process improvement
and
ISO 9001 (ISO 9000-3, TickIT, AS 3563).
Testimonials:
-
"Tantara has contributed a 'business improvement',
-
not just an 'ISO 9001 improvement'."
-
-
-- John Bergsten, Unit Manager of "fx Manager" Business --
-
Total Control
Products (Canada) Inc., 1999
|
-
"Tantara helped us take our current business processes and
-
focus them into a workable document structure
-
that we are confident will result in our ISO 9001 registration."
-
-
-- Kim Sturgess, President & CEO --
-
Revolve Magnetic Bearings
Inc., 1999
-
( Note: This testimonial was
provided after only 5 months of implementation effort. )
|
top
of pagehome
page
[ hotlist
] [
training ] [ facilitation
] [ consulting ] [ profile
] [ bulletin ] [ store
] [ contact ]
( Revised: August 14, 2001 )
|


{% extends "base.html" %} {% set active_page = "compare" %} {% block content %}
Compare recorded walks by selecting two recordings in the following dropdown menus:


11 comments
Are you sure you have no duplicates? Seems that the activities might be duplicates per student? The lookup by id for the relationships only work for unique values (actually we could make them work for non-unique values by creating relationships for the cross product - would that be really what you wanted?).
So you might be needed to introduce a synthentic property for the activity to be indexed uniquely right now.
Are the snippets you shared enough to create the issue?
Please check the activity uniqueness, if they are unique, please try to create a dataset that fails and share it with me.
Thanks
I checked the uniqueness. I made a test by placing only one activity and one student with one relation between and it fails the same way.
Files:
https://dl.dropboxusercontent.com/u/11823021/test/activities.csv
https://dl.dropboxusercontent.com/u/11823021/test/students.csv
https://dl.dropboxusercontent.com/u/11823021/test/rels.csv
jexp closed the issue
Same Problem here:
Exception in thread "main" java.util.NoSuchElementException: More than one element in org.mapdb.Bind$5$1@1717d968. First element is '26802' and the second element is '27151'
at org.neo4j.helpers.collection.IteratorUtil.singleOrNull(IteratorUtil.java:122)
at org.neo4j.helpers.collection.IteratorUtil.singleOrNull(IteratorUtil.java:289)
at org.neo4j.batchimport.index.LongIterableIndexHits.getSingle(LongIterableIndexHits.java:33)
at org.neo4j.batchimport.index.LongIterableIndexHits.getSingle(LongIterableIndexHits.java:12)
at org.neo4j.batchimport.Importer.lookup(Importer.java:100)
at org.neo4j.batchimport.Importer.id(Importer.java:154)
at org.neo4j.batchimport.Importer.importRelationships(Importer.java:119)
at org.neo4j.batchimport.Importer.doImport(Importer.java:203)
at org.neo4j.batchimport.Importer.main(Importer.java:74)
But I do have duplicates for example:
identifier:string:TokenNode identifier:string:TokenNode occurence
a b OCCURENCE
a a OCCURENCE
a b OCCURENCE
According to the tip above, I tried to add a synthetic property to the relationthip called "id" and initialized with uuid4. Results in following like:
identifier:string:TokenNode identifier:string:TokenNode occurence id
a a OCCURENCE 515cfbe7-53ab-46a8-9eaa-acaa0d99ce49
But still the same Error. What am I doing wrong? Regards.
I cloned and compiled the repository two days ago. I'm sure my node file hasn't any duplicates. I created it with a map reduce on the count of words. You can see my files here:
https://www.dropbox.com/s/rv2lqgcfti0361a/nodes.csv
https://www.dropbox.com/s/cu2bc37w66xgs2b/relation.csv
Regards.
Update:
Figured the problem out. "spd\" is imported as "spd" and so a duplicate entry in the node file exists. Don't know if it is a expected behaviour of the batch-importer. Thanks for help.
Update2:
Same problem. "\o" is equal to "o"
I experience the same issue with the 2.0 importer.
I have no duplicates in my csv files, but during creation of relationships, I get the error regarding duplicate nodes.
Was this fixed for the master branch only? Or it was also fixed for the 2.0 branch and I'm doing something else wrong?
Thank you very much.
Hi,
I'm trying to import nodes and I've got following error:
I've got in batch.properties:
batch_import.node_index.nodetype=exact
batch_import.node_index.activity_id=exact
batch_import.node_index.student_id=exact
I'm importing nodes from two files. students.csv:
and main.csv:
my relations file:
Any advice what I'm doing wrong?;)


How to edit Pixel 4’s astrophotography pictures to get even better results
by Ben SchoonThe Pixel 4’s camera is pretty outstanding, but its best feature by far is its ability to capture pictures of the stars. If you get the chance to take some astrophotography shots with your Pixel 4, here’s how to edit those pictures to make them look even better.
Taking astrophotography images on the Pixel 4 is already significantly easier than it would be from a traditional camera. In fact, I’d argue that the vast majority of the time, the Pixel will have better unedited results than a DSLR. However, with just a few tweaks, you can make these shots look even better than they did straight out of the camera app.
How to edit astrophotography photos on Pixel 4
- Capture images using Night Sight
- Choose an editing app
- Make adjustments
Capture the stars with your Pixel
To get started, we’ll first need to capture some shots using the Pixel 4’s astrophotography mode. For that, you’ll need a clear night away from light pollution, a tripod — this one on Amazon includes a remote — and the Pixel’s Night Sight mode. Combine them all with a quick read of our tutorial on the topic, and within just a few minutes you’ll have a stunning result.
Choose an editing app and import photos
After you’ve got your shots, you’ll need an editing program. You could, of course, process your images in a desktop program, but for this, we’re going to stick on the phone itself. Some of the best photo-editing apps on Android include Snapseed and Lightroom and I’ll be using the latter for this tutorial, but either will work. Notably, Lightroom is free on mobile and only requires a paid subscription for its advanced features (which won’t be used here).
In Lightroom, you’ll import photos after signing in by tapping the gallery import option at the bottom of the screen. In Snapseed, tapping anywhere once first opening the app will open up a gallery of photos to choose from.
Make adjustments
Once you’ve got your shots and an editing app, it’s time to start editing. In this case, we’ll be using the example of a shot I took near Pilot Mountain, North Carolina. This astrophotography shot from the Pixel 4 is already pretty stunning untouched, but with a few tweaks, you can make the stars stand out and eliminate lighting from other subjects.
The original, unedited image
First, let’s eliminate the extra light from the street lamp that was at the bottom of the frame. We can use Lightroom’s powerful healing tool to do this. Once the tool is selected, drawing over the tree masks it in black. Obviously, this won’t work in all scenarios, but in cases similar to this, Lightroom can take out extra lights such as this fairly easily.
Next, we’ll use the “Light” tab to adjust the exposure and contrast of the photo. In this case, I want to make the mountain more of a silhouette while brightening the stars a bit. To do that, we’ll boost the exposure slightly while boosting the contrast all the way. Lowering the shadows to hide some of the mountain’s rocky areas and lowering the blacks a bit to darken the sky finishes off the dramatic look.
Switching over to the colors tab, we want to make this image a bit more blue. To do that, we’ll lower the color temperature slightly and raise both the tint and vibrance of the image. Of course, all of this will be based on your personal preferences. In many cases, you’ll end up adjusting these sliders in a completely different way.
At this point, we’re done with our example shot and the result, if I do say so myself, is quite stunning.
Original shot (left) and edited (right)
However, these settings will have to be adjusted based on the shot you’re taking. In the example below, I also raised the contrast, but also the highlights and whites to achieve the final result while barely touching any of the color settings. Much of editing these shots will be based on how you want the image to look.
Original shot (left) and edited (right)
More on Google Pixel 4:
- Google Pixel 4 Review: A truly stellar Android experience… while it lasts
- First Pixel 4 update adds camera and Smooth Display improvements
- How to use the Astrophotography mode on the Pixel 4 [Video]
FTC: We use income earning auto affiliate links. More.


{% set is_remote=theme_announcement.startswith("http") %} {# If we are remote, add a script to make an HTTP request for the value on page load #} {%- if is_remote %} {#- if announcement text is not remote, populate announcement w/ local content -#} {%- else %}


Getting started¶
This page shows how to get started with PyMDE for four common tasks:
visualizing datasets in two or three dimensions;
generating feature vectors for supervised learning;
computing classical embeddings, like PCA and spectral embedding;
drawing graphs in 2 or 3 dimensions;
Note
To learn how to create custom embeddings (with custom objective functions and constraints), sanity check embeddings, identify possible outliers in the original data, embed new data, and more, see the MDE guide. (We recommend reading the getting started guide first.)
What is an embedding?¶
An embedding of a finite set of items (such as biological cells, images, words, nodes in a graph, or any other abstract object) is an assignment of each item to a vector of fixed length; the original items are embedded or mapped into a real vector space. The length of the vectors is called the embedding dimension. An embedding is represented concretely by a matrix, in which each row is the embedding vector of an item.
Embeddings provide concrete numerical representations of abstract items, for use in downstream computational tasks. For example, when the embedding dimension is 2 or 3, embeddings can be used to create a sort of chart or atlas of the items. In such a chart, each point corresponds to an item, and its coordinates in space are given by the embedding vector. These visualizations can help scientists and analysts identify patterns or anomalies in the original data, and more generally make it easier to explore large collections of data. PyMDE can embed into 2 or 3 dimensions, but it can also be used to embed into many more dimensions, which is useful when generating features for machine learning tasks.
For an embedding to be useful, it must be faithful to the original data (the items) in some way. To make it easy to get started, PyMDE provides two high-level functions for creating embeddings, based on related but different notions of faithfulness. These functions handle the common case in which each item is associated with either an original high-dimensional vector or a node in a graph. The functions are
The first creates embeddings that focus on the local structure of the data, putting similar items near each other and dissimilar items not near each other. The second focuses more on the global structure, choosing embedding vectors to respect some notion of original distance or dissimilarity between items.
We’ll see how to use these functions below.
Visualizing data¶
When the embedding dimension is 2 (or 3), embeddings can be used to visualize large collections of items. These visualizations can sometimes lead to new insights into the data.
Preserving neighbors¶
Let’s create an embedding that preserves the local structure
of some data, using the pymde.preserve_neighbors
function. This function
is based on on preserving the k
-nearest neighbors of each original vector
(where k
is a parameter that by default is chosen on your behalf).
We’ll use the MNIST dataset, which contains images of handwritten digits, as an example. The original items are the images, and each item (image) is represented by an original vector containing the pixel values.
import pymde
mnist = pymde.datasets.MNIST()
Next, we embed.
mde = pymde.preserve_neighbors(mnist.data, verbose=True)
embedding = mde.embed(verbose=True)
The first argument to preserve_neighbors
is the data matrix: there are
70,000 images, each represented by a vector of length 784 , so mnist.data
is a torch.Tensor
of shape (70,000, 784)
. The optional keyword argument
verbose=True
flag turns on helpful messages about what the function is
doing. The embedding dimension is 2 by default.
The function returns a pymde.MDE
object, which can be thought of as
describing the kind of embedding we would like. To compute the embedding, we
call the embed
method of the mde
object. This returns a
torch.Tensor
of shape (70,000, 2)
, in which embedding[k]
is
the embedding vector assigned to the image mnist.data[k]
.
We can visualize the embedding with a scatter plot. In the scatter plot, we’ll color each point by the digit represented by the underlying image.
pymde.plot(embedding, color_by=mnist.attributes['digits'])
We can see that similar images are near each other in the embedding, while dissimilar images are not.
It is also possible to embed into three or more dimensions. Here is an example with three dimensions.
mde = pymde.preserve_neighbors(mnist.data, embedding_dim=3, verbose=True)
embedding = mde.embed(verbose=True)
pymde.plot(embedding, color_by=mnist.attributes['digits'])
Customizing embeddings¶
The pymde.preserve_neighbors
function takes a few keyword arguments
that can be used to customize the embedding. For example, you
can impose a pymde.Standardized
constraint: this
causes the embedding to have uncorrelated columns, and prevents it from
spreading out too much.
embedding = pymde.preserve_neighbors(mnist.data, constraint=pymde.Standardized()).embed()
pymde.plot(embedding, color_by=mnist.attributes['digits'])
To learn about the other keyword arguments, read the tutorial on MDE, then consult the API documentation.
For more in-depth examples of creating neighborhood-based visualizations, including 3D embeddings, see the MNIST and single-cell genomics example notebooks.
Accessing the underlying graph¶
You can access the graph underlying the MDE problem returned by
pymde.preserve_neighbors
, using the following code.
edges = mde.edges
weights = mde.distortion_function.weights
The value weights[i]
is the weight for the edge edges[i]
.
Preserving distances¶
Next, we’ll create an embedding that roughly preserves the global structure of some original data, by preserving some known original distances between some pairs of items. We will embed the nodes of an unweighted graph. For the original distance between two nodes, we’ll use the length of the shortest path connecting them.
The specific graph we’ll use is an academic coauthorship graph, from Google Scholar: the nodes are authors (with h-index at least 50), and two authors have an edge between them if either has listed the author as a coauthor.
import pymde
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
google_scholar = pymde.datasets.google_scholar()
mde = pymde.preserve_distances(google_scholar.data, device=device, verbose=True)
embedding = mde.embed()
The data
attribute of the google_scholar
dataset is a
pymde.Graph
object, which encodes the coauthorship network.
The pymde.preserve_distances
function returns a pymde.MDE
object, and calling the embed
method computes the embedding.
Notice that we passed in a device
to pymde.preserve_distances
;
this embedding approximately preserves over 80 million distances, so using a
GPU can speed things up.
Next we plot the embedding, coloring each point by how many coauthors the author has in the network (normalized to be a percentile).
pymde.plot(embedding, color_by=google_scholar.attributes['coauthors'])
The most collaborative authors are near the embedding, and less collaborative ones are on the fringe. It also turns out that the diameter of the embedding is close to the true diameter of the graph.
For a more in-depth study of this example, see the notebook on Google Scholar.
Customizing embeddings¶
The pymde.preserve_distances
function takes a few keyword arguments
that can be used to customize the embedding.
To learn about the keyword arguments, read the tutorial on MDE, then consult the API documentation.
Accessing the underlying graph¶
You can access the graph underlying the MDE problem returned by
pymde.preserve_distances
, using the following code.
edges = mde.edges
distances = mde.distortion_function.deviations
The value distances[i]
is the weight (which should be interpreted as a
distance) for the edge edges[i]
.
Plotting¶
Scatter plots¶
The pymde.plot
function can be used to plot embeddings with dimension
at most 3. It takes an embedding as the argument, as well a number of optional
keyword arguments. For example, to plot an embedding and color each point
by some attribute, use:
pymde.plot(embedding, color_by=attribute)
The attribute
variable is a NumPy array of length embedding.shape[0]
,
in which attribute[k]
is a tag or numerical value associated with item k
.
For example, in the MNIST data, each entry in attribute
is an int
between 0
and 9
representing the digit depicted in the image;
for single-cell data, each entry might be a string describing the type of
cell. Typically the attribute is not used to create the embedding, so coloring
by it is a sanity-check that the embedding has preserved prior knowledge about
the original data.
This function can be configured with a number of keyword arguments, which can
be seen in the API documentation
.
Movies¶
The pymde.MDE.play
method can be used to create an animated GIF of the
embedding process. To create a GIF, first call pymde.MDE.embed
with
the snapshot_every
keyword argument, then call play
:
mde.embed(snapshot_every=1)
mde.play(savepath='/path/to/file.gif')
The snapshot_every=1
keyword argument instructs the MDE
object to
take a snapshot of the embedding during every iteration of the solution
algorithm. The play
method generates the GIF, and saves it to savepath
.
This method can be configured with a number of keyword arguments,
which can be seen in the API documentation
.
Generating feature vectors¶
The embeddings made via pymde.preserve_neighbors
and
pymde.preserve_distances
can be used as feature vectors for supervised
learning tasks. You can choose the dimension of the vectors by specifying the
embedding_dim
keyword argument, e.g.,
embedding = pymde.preserve_neighbors(data, embedding_dim=50).embed()
Classical embeddings¶
PyMDE provides a few implementations of classical embeddings, for convenience.
To produce a PCA embedding of a data matrix, use the pymde.pca
method, which returns an embedding:
embedding = pymde.pca(data_matrix, embedding_dim)
To create a Laplacian embedding based on the nearest neighbors of each row in a
data matrix or each node in a graph, use the pymde.laplacian_embedding
method, which returns an MDE problem:
mde = pymde.laplacian_embedding(data, embedding_dim, verbose=True)
embedding = mde.embed()
To create a spectral embedding based on a sequence of edges (a torch.Tensor
of shape (n_edges, 2)
) and weights, use pymde.quadratic.spectral
.
(These embeddings are called “quadratic embeddings” in the MDE monograph.)
Drawing graphs¶
PyMDE can be used to draw graphs in 2 or 3 dimensions. Here is a very simple example that draws a cycle graph on 3 nodes.
edges = torch.tensor([
[0, 1],
[0, 2],
[1, 2]
])
triangle = pymde.Graph.from_edges(edges)
triangle.draw()
Here is a more interesting example, which embeds a ternary tree. The tree is created using the NetworkX package.
import networkx
ternary_tree = networkx.balanced_tree(3, 6)
graph = pymde.Graph(networkx.adjacency_matrix(ternary_tree))
embedding = graph.draw()
On a standard CPU, it takes PyMDE just 2 seconds to compute this layout; for comparison, it takes NetworkX 30 seconds to compute a similar layout.
You can embed into 3 dimensions by passing embedding_dim=3
to the draw
method.
For more in-depth examples, see the notebook on drawing graphs,
and the API documentation of pymde.Graph
.
Using a GPU¶
If you have a CUDA-enabled GPU, you can use it to speed up the optimization routine which computes the embedding.
The functions pymde.preserve_neighbors
and
pymde.preserve_distances
, as well as the method Graph.draw
, all take a
keyword argument, called device
, which controls whether or not a GPU is
used. Pass device='cuda'
to use your GPU. (PyMDE computes embeddings on CPU
by default.)
For example, the below code shows how to create a neighbor-preserving embedding of MNIST using a GPU.
import pymde
mnist = pymde.datasets.MNIST()
mde = pymde.preserve_neighbors(mnist.data, device='cuda', verbose=True)
embedding = mde.embed(verbose=True)
On an NVIDIA GeForce GTX 1070, the embed
method took just 5 seconds.


As an experienced Computer Science student, I aim to work with tools and technologies that will provide benefit to my employer and advance my passion for this field.
Java | Python | SQl | C++ | C | Bash | HTML | CSS | Rally | SharePoint | Microsoft Office | Application Testing | Business Analysis | Adminstrative Work
New Jersey Institute of Technology
B.S. Computer Science | GPA: 3.477
Barclays | Whippany, NJ
Travelers | Hartford, CT
NJIT Pre-College Programs | Newark, NJ
Kumon | North Brunswick, NJ
Women in Computing Society | President
Girl Hacks | Head of Logistics
Ying Wu College of Computing Sciences | Co-Founder
Alpha Phi Omega | Brother
Association of Computing Machinery | Member


show dragging into sub grid
Drag me in into the dashboard!
This nested grid accepts new widget with class "newWidget"
The parent grid also accepts new widget but with a different class 'otherWidgetType'


Visualizing an Electric Field With HTML5 and WebGL, Part 6: More Examples
A Spherical Charge Distribution
The newest addition is spherical charge distributions. As always start with a canvas. Usually I enclose the canvas in a figure and attach a caption.
The Canvas
As always start with a canvas. Usually I enclose the canvas in a figure and attach a caption.

  <canvas id="drawingSurfaceI" width="300" height="300"></canvas>
A spherical charge distribution of radius 30.

The Charge Distribution
A spherical charge distribution of charge Q inner radius a and outer radius b at centered at (x,y,z) with rho field lines per unit charge is defined with:
new chargedSphere(Q, rho, x, y, z, a, b);Additional shapes will be added over time.
Here we setup a charge of -1 statC distributed in a sphere of radius 50 cm centered around the origin.
var chargeDistribution; chargeDistribution = new chargedSphere( -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0);
Field Lines
Remember from the previous examples that field lines are specified by providing an (x,y,z) seed point, and sgn as an indicator whether the field line should be traced in the direction of the field line. In this case, we provide a sgn of -1 as we are beginning near a negative charge. These field lines are all started near the center of the charge distribution, following Another option is to start some of the field lines further out from the center of the charge distribution reflecting the increasing field strength as you progress through the charge. This will likely be the case later when the field lines are generated automatically.
/* * Start a set of field lines near the origin. */ function placeStartPoints(fieldRenderer) { fieldRenderer.addStartPoint( 0.0, 1.0, 0.0, -1.0) .addStartPoint( 0.0, -1.0, 0.0, -1.0) .addStartPoint( 1.0, 0.0, 0.0, -1.0) .addStartPoint(-1.0, 0.0, 0.0, -1.0) .addStartPoint( 0.5, 0.5, 0.7071, -1.0) .addStartPoint( 0.5, 0.5, -0.7071, -1.0) .addStartPoint( 0.5, -0.5, 0.7071, -1.0) .addStartPoint( 0.5, -0.5, -0.7071, -1.0) .addStartPoint(-0.5, 0.5, 0.7071, -1.0) .addStartPoint(-0.5, 0.5, -0.7071, -1.0) .addStartPoint(-0.5, -0.5, 0.7071, -1.0) .addStartPoint(-0.5, -0.5, -0.7071, -1.0); return fieldRenderer; }
The fieldRenderer
The fieldRenderer
now accepts a spherical charge distribution,
a chargedSphere
. Remember renderer.start()
to begin rendering to the screen.
var chargeDistribution; var drawingSurface; var renderer; drawingSurface = document.getElementById('drawingSurfaceI'); renderer = new fieldRenderer(drawingSurface); renderer = placeStartPoints(renderer); chargeDistribution = new chargedSphere( -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0); renderer = renderer.addChargeDistribution(chargeDistribution); renderer.start();
Adding a Gaussian Surface
Combining these building blocks in innovative ways can generate sophisticated examples. For example, we can place a Gaussian surface within a hollow spherical charge distribution. Zooming in allows you to see that the Gaussian surface is within the inner radius of the charge distribution, and that the field lines begin within the charge distribution, and so do not impinge on the Gaussian surface.
Another Canvas
Define another drawing surface, being careful to give it a unique id.

  <canvas id="drawingSurfaceII" width="300" height="300"></canvas>
A charge distribution surrounding a Gaussian surface.

A Hollow Charged Sphere
This time we specify an inner radius so the charge is spread out between an inner radius a=20 and an outer radius b=50.
var chargeDistribution; chargeDistribution = new chargedSphere( -1.0, 0.0, 0.0, 0.0, 0.0, 20.0, 50.0);
The Gaussian Surface
We choose to place the Gaussian surface within the inner radius of the charge distribution so that there will be no net charge within it.
var gaussianSurface; gaussianSurface = new gaussianSphere(0.0, 0.0, 0.0, 10.0);
More Field Lines
The start point for each field line lies on a sphere of radius 21. They will start just inside of the charge distribution, and well outside of the Gaussian sphere.
function placeMoreStartPoints(fieldRenderer) { fieldRenderer.addStartPoint( 0.0, 21.0, 0.0, -1.0) .addStartPoint( 0.0, -21.0, 0.0, -1.0) .addStartPoint( 21.0, 0.0, 0.0, -1.0) .addStartPoint(-21.0, 0.0, 0.0, -1.0) .addStartPoint( 10.5, 10.5, 14.849, -1.0) .addStartPoint( 10.5, 10.5, -14.849, -1.0) .addStartPoint( 10.5, -10.5, 14.849, -1.0) .addStartPoint( 10.5, -10.5, -14.849, -1.0) .addStartPoint(-10.5, 10.5, 14.849, -1.0) .addStartPoint(-10.5, 10.5, -14.849, -1.0) .addStartPoint(-10.5, -10.5, 14.849, -1.0) .addStartPoint(-10.5, -10.5, -14.849, -1.0); return fieldRenderer; }
Another fieldRenderer
This fieldRenderer
works with a charge distribution, a Gaussian surface,
and field lines.
drawingSurface = document.getElementById('drawingSurfaceII'); renderer = new fieldRenderer(drawingSurface); renderer = placeMoreStartPoints(renderer); gaussianSurface = new gaussianSphere(0.0, 0.0, 0.0, 10.0); renderer = renderer.addGaussianSurface(gaussianSurface); chargeDistribution = new chargedSphere( -1.0, 0.0, 0.0, 0.0, 0.0, 20.0, 50.0); renderer = renderer.addChargeDistribution(chargeDistribution); renderer.start();
Other interesting examples include cases where the Gaussian surface completely surrounds the charge distribution and the case where it is embedded within the charge distribution with radius r and a<r<b.
Previous: Examples Next: Charged Plane Examples


|
ActiveTcl User Guide
|
||
cursors - mouse cursors available in Tk
The -cursor widget option allows a Tk programmer to change the mouse cursor for a particular widget. The cursor names recognized by Tk on all platforms are:
X_cursor arrow based_arrow_down based_arrow_up boat bogosity bottom_left_corner bottom_right_corner bottom_side bottom_tee box_spiral center_ptr circle clock coffee_mug cross cross_reverse crosshair diamond_cross dot dotbox double_arrow draft_large draft_small draped_box exchange fleur gobbler gumby hand1 hand2 heart icon iron_cross left_ptr left_side left_tee leftbutton ll_angle lr_angle man middlebutton mouse pencil pirate plus question_arrow right_ptr right_side right_tee rightbutton rtl_logo sailboat sb_down_arrow sb_h_double_arrow sb_left_arrow sb_right_arrow sb_up_arrow sb_v_double_arrow shuttle sizing spider spraycan star target tcross top_left_arrow top_left_corner top_right_corner top_side top_tee trek ul_angle umbrella ur_angle watch xterm
arrow center_ptr crosshair fleur ibeam icon sb_h_double_arrow sb_v_double_arrow watch xterm
And the following additional cursors are available:
no starting size size_ne_sw size_ns size_nw_se size_we uparrow wait
The no cursor can be specified to eliminate the cursor.
arrow cross crosshair ibeam plus watch xterm
And the following additional cursors are available:
text cross-hair
Copyright © 1998-2000 by Scriptics Corporation. Copyright © 1995-1997 Roger E. Critchlow Jr.


Home
About
Team
Schedule
Contact Us
Pages
Elements
Events
Departmental
Technical
Gaming
Photography
E-cell
Contact
Departmental Events: ECE Team
Head
Parakhee Choudhury
Rohit Kumar
Coordinators
Rajoo Gautam
Co-Coordinators
Rohit Raj
Sourav Paul
Wanchi Dora M Sangma


Home
About
Black Paper
Anote
Beginner's Guide
Mining Tutorial
Purchasing Tutorial
AnoteRobot Tutorial
AnonShout Tutorial
Comparison to PI
Anote Quests
AINT
Projects
Kriptokuna
AnonTaxi
Contact
Contact
Home
Contact
Let's keep in touch!
Telegram
t.me/anonutopia
Facebook
Anonutopia
GitHub
github.com/anonutopia


Welcome to the Growth Leasing investor relations website.
Here you will find updates on our progress to date and plans for the upcoming year.
Please enter your user name and password below to login and find out what we are up to.
Here you will find updates on our progress to date and plans for the upcoming year.
Please enter your user name and password below to login and find out what we are up to.


In order to make the best use of mobile CPUs, which now have up to 8 cores, some time ago I switched my engine to using a fiber-based job system.
I won’t go into the details or benefits of this today, but if you want to learn more, definitely watch Naughty Dog’s GDC presentation on the topic. My system is very much inspired by the one presented by ND, but customized for mobile hardware and my particular needs.
Implementing this job system on Windows was pretty straightforward, since there is a fiber API in Win32 that does everything I need. Unfortunately Android doesn’t have this, which means I had to implement fibers myself for Android/Linux.
Since this was quite a bit of work to research all the information needed, I’m writing it all down here, both for the benefit of others implementing it, and because I’ll forget this myself eventually. Implementing fibers on Android is mostly a matter of having all the information; the actual code is straightforward.
The trouble is Android doesn’t implement the makecontext/swapcontext
family of functions from Linux. From what I’ve read, they had a good reason, but either way this API does not fit fibers well. You should avoid these functions as they involve two system calls (switching into kernel mode) to swap out the signal mask every time you want to switch a fiber, which is very slow.
Let’s get started. Keep in mind there are multiple ways to go about this, there’s no one correct way to do it. I’ve made choices according to what I need, but also to what’s easy for me. I wanted to avoid as much assembly code as possible, since I’ve never written any before.
Fibers are CPU architecture and OS specific. Here I’m documenting only Android, and only ARMv7. I know for sure iOS has at least one crucial difference, but maybe iOS has a fiber API like Windows, I haven’t checked. If it doesn’t, don’t blindly copy my code! I also haven’t implemented ARMv8 or x86, which Android also supports, but ARMv8 is just a minor variation in assembly, and the process is the same for x86.
First, a recap: a fiber is just some stack space, and a bit of space to save the CPU registers (the context). There is no thread, in fact the OS doesn’t know anything about our fibers. Creating a fiber is basically just an malloc call. A fiber is just state, it cannot be running unless you explicitly swap a thread’s context to a fiber’s context. The top-most function executing in a fiber cannot return, since there’s no return address! Instead, a fiber always switches to another fiber. You can then either delete it or reinitialize it so it can be reused.
There are 4 major problems we need to solve:
- Creating and initializing fibers
- Keeping track of which fiber is currently bound to a given thread
- Swapping from one fiber to another
- Switching into a fiber for the first time, from a running thread
There’s also the problem of switching from a fiber back to a thread’s normal context, but I use worker threads that only exist to host fibers, so I never have to deal with this situation.
Part 1: Creating and initializing fibers
What we need: the amount of stack space to allocate, the function we want the fiber to execute and an argument to pass to that function.
First, we allocate the stack space. This can be an malloc
call, but I don’t recommend this. Fibers will likely have small stacks (I use 64kb) which can overflow easily, and you want to know when this happens. To catch that, mmap
(anonymously) page aligned space for the stack, with an extra page on both ends of the stack. Commit the space for the stack, but leave the two guard pages uncommitted. As soon as your game tries to read or write from these guard memory pages, you’ll get a memory access violation, which you can then debug. You don’t want to silently overflow your stack, that will be much harder to debug!
The stack pointer (sp register) needs to be 8 bytes aligned at the point of any public interface, according to the AAPCS. That is, every time just before you call a function or return from one.
Next, we allocate space for the fiber’s context, ie: the CPU registers we need to save. We could just store these on the stack, but I prefer to store it separately. Either way works.
We need to know which registers to save. For this we need to know the ABI calling convention - we don’t actually have to save every single register like when the OS does a context switch! The AAPCS provides most of this information, but unfortunately not all, since it defines a “family” of ABIs that can be customized. The rest of the information comes directly from Linux, which uses gnueabi on ARM. We also take advantage of the fact we only deal with C/C++ code, which is generally forced to follow a given ABI.
The registers to save are: r4-r14, q4-q7 and the floating point control register. We don’t need to save the status registers since they are not preserved across public interface (ie function calls). We don’t need to save r0-r3 since they are used for passing arguments into a function and as return values; the other Q (NEON) registers are either used for arguments/return value, or are simply caller saved. r15 is the program counter, which we don’t restore, instead we simply branch to our return address. The r registers are 4 bytes wide and should be stored with 4 byte alignment. Q registers are 16 byte wide and should be stored with 16 byte alignment.
struct alignas(16) ARM32_NEON_REGISTER
{
U32 data[4];
};
// The layout of this struct is referenced by assembly code.
// 64 byte alignment is to minimize the number of cache lines touched.
struct alignas(64) ARM32_FIBER_CONTEXT
{
// Context data at the top. To maintain the memory layout for the
// assembly code, add all other data members at the bottom.

// All other data goes here. Assembly code doesn't care after this point.
FIBER* fiber;
void* stack;
int stackSize;
};
The reason we can skip all these registers is because our fiber switching functions follow the same calling conventions (ABI) as the rest of the C++ code. In my engine it looks something like this:
void SwitchToFiber(FIBER_CONTEXT* next)
{
AArch32_SwitchToFiber(GetCurrentFiberContext(), next);
}
Where AArch32_SwitchToFiber
is implemented in hand written assembly and takes two arguments: a pointer to the context to save the current registers, and a pointer to the context from where to load the registers of the next fiber. Again, there are other ways to do this, but I found this the easiest.
Next, initializing our fiber. You can ignore the stack, it doesn’t have to be zeroed out. The registers should all be memset to 0 unless otherwise noted.
The rules for the floating point control register I’ve read suggest to me that you shouldn’t touch some bits at all, so what I do is copy the contents of this register from the currently running thread at the time the fiber is being created. I use a very simple assembly function that just returns this register, it has the following signature:
extern "C" U32 AArch32_ReadFPSCR();
U32
is just uint32_t
, which represents a general purpose register here.
Also keep in mind that stacks grow backwards, so the SP register must point to one byte past the end of our allocated stack memory region. (Explanation: What this means is that the highest memory address of the stack space is used first, then it works its way to lower memory addresses with each function call. This is opposite of how you normally use memory, ex filling an array from the lowest memory address first, with further items added at higher memory addresses.)
My code for allocating stack memory with guard pages and setting the SP register properly is in the following redacted snippet:
// Get the system page size
int pageSize = sysconf(_SC_PAGE_SIZE);
// Round up stackSize (in bytes) to multiple of pageSize
int numPages = (stackSize + pageSize - 1) / pageSize;
// Allocate uncommited virtual memory
U8* guardedStack = (U8*)mmap(nullptr, (numPages + 2) * pageSize, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
Assert(guardedStack != MAP_FAILED);
// Commit all pages except the first and last one
int result = mprotect(guardedStack + pageSize, numPages * pageSize, PROT_READ | PROT_WRITE);
Assert(result == 0);
// Set the stack pointer to one byte past the stack memory range
// The +1 below is to account for the first guard page (at the lowest memory address)
ctx->sp = (U32)(guardedStack + (numPages + 1) * pageSize);
Lastly, we need to figure out how will our fiber context “know” to call the function we want to start the first time we switch to this fiber.
To avoid having a special case in my fiber switching code, I initialize my context so that it jumps to a special bit of assembly that’s not a normal function. This code fixes up the registers and calls the function we want the fiber to run.
What I do is I place the function address into the r5 register of the context, and the argument to the function in r4. When a fiber switches, what it really does after swapping registers is to jump (branch, in ARM terminology) to the address in r14, also called LR, the link register. That’s how you typically return from a function in ARM. So, when initializing the fiber, I also set r14 to the address of the special code I mentioned above.
When this fiber is first switched to, it will branch to my special initialization code, which copies r4 to r0 (the correct register for the first function argument), clears r14/LR to 0 so there is no return address, and branches to r5. We’re now executing the function we wanted this fiber to run. Done!
Part 2: Keeping track of which fiber is currently bound to a given thread
We need to know which fiber we’re currently using on a given thread in order to switch to another fiber, because when we save the current registers we need to know which fiber context we’re saving to.
This tracking is done automatically so that only the fiber code has to worry about it.
I’ve found it easiest to do this in the C++ code using thread_local/TLS.
static thread_local FIBER* tlsCurrentFiber;
FIBER* FiberGetCurrent()
{
return tlsCurrentFiber;
}
void FiberUpdateCurrent(FIBER* fiber)
{
tlsCurrentFiber = fiber;
}
The only trick to this is to put these functions by themselves in a separate .cpp file to avoid TLS caching issues in compilers other than Microsoft’s.
Putting all the code together, the function that switches fibers is just 3 lines of code:
// We put the ARM implementation here because of compiler TLS caching issues.
// Any function calling FiberGetCurrent()/FiberUpdateCurrent() must NOT be defined
// in the same source file those two functions are defined in.
#if BUILD_OS == BUILD_OS_ANDROID
extern "C" void AArch32_SwitchToFiber(void* currentHandle, void* nextHandle);
void FiberSwitch(FIBER_HANDLE nextHandle)
{
FIBER* self = FiberGetCurrent();
AArch32_SwitchToFiber(self->handle.handle, nextHandle.handle);
FiberUpdateCurrent(self);
}
#endif
Note: AArch32_SwitchToFiber()
does not return until execution has switched back to the context of the fiber executing the above function, so a lot of time can pass between AArch32_SwitchToFiber
and FiberUpdateCurrent
.
You should notice that the first line is reading the current fiber context pointer, this means it must be initialized somewhere else! And it is, in the FiberMain() function. This is the first function (the startup function) called in all my fibers:
static void FiberMain(void* p)
{
FIBER* fiber = (FIBER*)p;
FiberUpdateCurrent(fiber);
// the rest of the function here
}
This basically means the “user code” is responsible, which if fine for me. If you were creating a public fiber library, you’d want to initialize this pointer using the startup assembly code, for example by passing in &tlsCurrentFiber
(the address of tlsCurrentFiber) using one of the registers in the context.
Part 3: Swapping from one fiber to another
This has mostly already been covered. Switching is done by FiberSwitch()
, which calls the following function:
extern "C" void AArch32_SwitchToFiber(void* currentHandle, void* nextHandle);
This function actually takes ARM32_FIBER_CONTEXT*
as parameters (defined above), and is implemented in assembly. ARMv7 code follows:
.globl AArch32_SwitchToFiber
.align 2
.type AArch32_SwitchToFiber,%function
// r0 = current fiber context
// r1 = next fiber context
// use r2/r3 for scratch
AArch32_SwitchToFiber:
// Store the current fiber context
add r2, r0, #64
stmia r2, {r4-r12,sp,lr}
vstmia r0, {q4-q7}
vmrs r3, fpscr
str r3, [r0, #108]
// Load the next fiber context
add r2, r1, #64
ldmia r2, {r4-r12,sp,lr}
vldmia r1, {q4-q7}
ldr r3, [r1, #108]
vmsr fpscr, r3
bx lr
Pretty simple, only 11 instructions. No messy kernel calls required, and we’re only saving/restoring the fewest registers possible, unlike a full context switch the OS does whenever it switches a thread or program.
Part 4: Switching into a fiber for the first time, from a running thread
Already mostly covered. When initializing a fiber, LR (the register we return to in the assembly code above for AArch32_SwitchToFiber
) is set to the address of a special assembly function called AArch32_FiberEntryPoint
. ARMv7 code:
.globl AArch32_FiberEntryPoint
.align 2
.type AArch32_FiberEntryPoint,%function
AArch32_FiberEntryPoint:
mov r0, r4
mov r1, r5
mov r4, #0
mov r5, #0
mov lr, #0
bx r1
The explanation is at the end of Part 1.
And that’s basically it. Not complicated, but took a considerable amount of time to do, for two main reasons:
- the information needed is quite a bit scattered, and
- triple-checking everything and testing is a huge time sink.
But it’s better to spend the time checking and testing this kind of code than dealing with unexplained bugs months down the line that cannot be debugged without stepping through assembly. So much code depends on this service that it would be irresponsible not to thoroughly check everything.
I hope this is useful information. For questions or feedback, contact me. I’m also available for consulting.
References and helpful links:
http://www.gdcvault.com/play/1022186/Parallelizing-the-Naughty-Dog-Engine
http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042f/IHI0042F_aapcs.pdf
http://www.crystalclearsoftware.com/soc/coroutine/coroutine/fibers.html
https://code.google.com/p/android/issues/detail?id=34784
http://maisonikkoku.com/jaystation2/chapter_08.html
There are other references I’ve used, some quite important, that unfortunately I can no longer recall.
Changelog
31/10/2016 - Added notes on stacks growing backwards in memory, and example code for allocating guard pages and calculating the initial stack pointer correctly


Looks like you have Javascript disabled.
wallet.ether1.org needs Javascript to work properly.
Please enable Javascript to get the best out of Ether-1's Web Wallet.
Thank you!


Gateway
BOT
20-Sep-19 12:58 PM
[dscrd-hush] <dukeleto> Don't worry people, i have not forgot about AtomicDEX swap bounties!!! Going to try to process some now
[dscrd-hush] <AkiraX> Thanks
[dscrd-hush] <dukeleto> just been a weird few days, lol
[dscrd-hush] <dukeleto> Since the tipbot changed, i must change my setup for sending funds from the FR wallet
[dscrd-hush] <dukeleto> it's all much more complicated than it should be
"I’m sure there’s a feasible attack" - @fluffypony
I respect that you believe us, thank you. We believe Bad People are using this in secret against all of us. The whole point of this company is to raise the privacy level of all coins by showing the lack of privacy di...
[dscrd-hush] <dukeleto> I fucking love quoting fluffypony
Since it applies to almost every coin, we can't just talk to each one individually. An anon dropped this in our lap, we are running with it.
Our goal is the opposite of @chainalysis , i.e. show everybody the lack of privacy, to push the world forward. Their #1 goal is prof...
[dscrd-hush] <dukeleto> !tip @AkiraX 25 hush
[dscrd-hush] <tip.cc> :HUSH: @dukeleto sent @AkiraX 25.00 HUSH (≈ $1.30).
[dscrd-hush] <dukeleto> !tip @Aron“XuanLeeeeee“Goldberg 25 hush
[dscrd-hush] <tip.cc> :HUSH: @dukeleto sent @Aron“XuanLeeeeee“Goldberg 25.00 HUSH (≈ $1.30).
[dscrd-hush] <dukeleto> !tip @Werxadler 25 hush
[dscrd-hush] <tip.cc> :HUSH: @dukeleto sent @Werxadler 25.00 HUSH (≈ $1.30).
[dscrd-hush] <dukeleto> !tip @saturday 25 hush
[dscrd-hush] <tip.cc> :HUSH: @dukeleto sent @saturday 25.00 HUSH (≈ $1.30).
[dscrd-hush] <dukeleto> sorry for the spam, people, but these atomicdex bounties are raining down
[dscrd-hush] <dukeleto> !tip @t0sma 25 hush
[dscrd-hush] <tip.cc> :HUSH: @dukeleto sent @t0sma 25.00 HUSH (≈ $1.30).
[dscrd-hush] <dukeleto> If I missed anybody, please DM me again
[dscrd-hush] <dukeleto> I guess I will use #topbot_general to send out tips in the future, to not gunk up general
[dscrd-hush] <dukeleto> !tip 11 random people 275 hush
[dscrd-hush] <tip.cc> :HUSH: @dukeleto sent @evich, @Graal, @Izomorph, @kk79, @kp, @manugarc, @Nataraja, @RicMX3, @RunningMantheCoin, @Sir Seven and @Teekuppi233 25.00 HUSH (≈ $1.30) each :cloud_rain:.

Use !tip nomention to stop being pinged by tips.
[dscrd-hush] <dukeleto> I can feel the
[dscrd-hush] <evich> many thanks @dukeleto
[dscrd-hush] <dukeleto> @evich thanks for all the awesome graphics and stuff!!!


inspired by Assembly 2004 invitation (Moppi Productions) and Masagin (farbrausch & neuro)
this project uses JavaScript, WebGL and PixiJS and was developed in Visual Studio Code, GIMP and Inkscape
tap/click on the canvas to change mode; source on GitHub


Passenger vehicle retail sales jump 11% in October on festive demand: FADA
by PTIHighlights
- According to Federation of Automobile Dealers Associations (FADA), passenger vehicles (PV) sales stood at 2,23,498 units in October 2018
- Two-wheeler sales increased 5 per cent to 13,34,941 units last month as compared with 12,70,261 units in the year-ago period
NEW DELHI: Automobile dealers' body FADA on Tuesday said retail sales of passenger vehicles in October increased 11 per cent to 2,48,036 units against the same period last year, driven by festive demand during the month.
According to Federation of Automobile Dealers Associations (FADA), passenger vehicles (PV) sales stood at 2,23,498 units in October 2018.
Two-wheeler sales increased 5 per cent to 13,34,941 units last month as compared with 12,70,261 units in the year-ago period.
Commercial vehicle sales, however, declined 23 per cent to 67,060 units as compared to 87,618 units in October last year.
Three-wheeler sales saw an increase of 4 per cent to 59,573 units last month.
Total sales across categories rose 4 per cent to 17,09,610 units in October, as against 16,38,832 units in the same month last year.
"October retails were in the positive, giving a much-needed respite to the auto industry - especially to our dealer community - after months of de-growth," FADA President Ashish Harsharaj Kale said.
The festival season saw very good footfalls at dealerships across most of the geographies, the consumer sentiment was positive, and purchase decisions were concluded as used to be during the growth years, he added.
Kale said two-wheeler inventory has reduced from an alarming level while PV inventory is also at reasonable levels.
"CV inventory has also reduced, although with retail continuing to be weak further wholesale regulation is required to reach FADA's 21 days recommended levels," he added.
With the auto industry heading into the unknown territory of BSVI transition, more needs to be done towards inventory reduction to avoid dealer losses, Kale noted.


4
A Father's Wise Instruction
1 Hear, O sons, a father's instruction, and be attentive, that you may gain insight,
2 for I give you good precepts;
do not forsake my teaching.
3 When I was a son with my father,
tender, the only one in the sight of my mother,
4 he taught me and said to me,
“Let your heart hold fast my words;
keep my commandments, and live.
5 Get wisdom; get insight;
do not forget, and do not turn away from the words of my mouth.
6 Do not forsake her, and she will keep you;
love her, and she will guard you.
7 The beginning of wisdom is this: Get wisdom,
and whatever you get, get insight.
8 Prize her highly, and she will exalt you;
she will honor you if you embrace her.
9 She will place on your head a graceful garland;
she will bestow on you a beautiful crown.”
10 Hear, my son, and accept my words,
that the years of your life may be many.
11 I have taught you the way of wisdom;
I have led you in the paths of uprightness.
12 When you walk, your step will not be hampered,
and if you run, you will not stumble.
13 Keep hold of instruction; do not let go;
guard her, for she is your life.
14 Do not enter the path of the wicked,
and do not walk in the way of the evil.
15 Avoid it; do not go on it;
turn away from it and pass on.
16 For they cannot sleep unless they have done wrong;
they are robbed of sleep unless they have made someone stumble.
17 For they eat the bread of wickedness
and drink the wine of violence.
18 But the path of the righteous is like the light of dawn,
which shines brighter and brighter until full day.
19 The way of the wicked is like deep darkness;
they do not know over what they stumble.
20 My son, be attentive to my words;
incline your ear to my sayings.
21 Let them not escape from your sight;
keep them within your heart.
22 For they are life to those who find them,
and healing to all their flesh.
23 Keep your heart with all vigilance,
for from it flow the springs of life.
24 Put away from you crooked speech,
and put devious talk far from you.
25 Let your eyes look directly forward,
and your gaze be straight before you.
26 Ponder the path of your feet;
then all your ways will be sure.
27 Do not swerve to the right or to the left;
turn your foot away from evil.


#include <vj.h>
Definition at line 138 of file vj.h.
Definition at line 136 of file vj.h.
Definition at line 133 of file vj.h.
Definition at line 134 of file vj.h.
Definition at line 135 of file vj.h.
Definition at line 137 of file vj.h.
Definition at line 143 of file vj.h.
Definition at line 142 of file vj.h.


The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
The column-count property specifies the number of columns an element should be divided into. The following example will divide the text in theelement into 3 columns:
End


解放思想-解放数据 Supporting tagline
There is an interesting and short editorial in this weeks Nature about the closure of Google Research Datasets (formally part of Googles Palimpsest project which I learnt about in SciFoo2007 and later in SciFoo2008). Despite the collapse, Amazon is getting into the business of hosting large research data sets for free, which (according to Nature) should inspire greater use of its S3 cloud computing network. For those who can't access Nature you don't need to read their editorial as their tag line says it all:
"Initiatives for digital research infrastructure should focus more on making standardized data openly available, and less on developing new portals."
This is a salient lesson for biodiversity initiatives such as EDIT, EOL, and (less so) BHL. Set free the data and stop building data silos.
blog comments powered by Disqus
Published
04 April 2009


Gary Francis Geraci
Dog
My Favorite Foods
Salmon
Teriyaki Chicken
Foie Gras
Flamin' Hot Cheetos
Leather Sandals
My Favorite Toys
Return Home


Products
Home
Products
Muddy Paws Adventure Dog Harness
$24.99
★★★★☆
Muddy Paws Adventure Cat Harness
$22.99
★★★★★
Muddy Paws Water Storage Container
$18.99
★★★★☆
Link GPS Collar
$249.99
★★★★★