FAITHLESS A film review by Steve Rhodes Copyright 2001 Steve Rhodes RATING (0 TO ****): *** 1/2
FAITHLESS (TROLÖSA), a 2-1/2 hour angst-filled drama in Swedish about the everlasting trauma caused by infidelity, might sound like something you would look forward to about as much as getting your teeth drilled. But this film, based on a script by Ingmar Bergman and lovingly directed by his long-time collaborator Liv Ullmann is absolutely mesmerizing. With an astonishing central performance by Lena Endre as Marianne, the woman who strays, the film relies on long, talking-head shots of her relating her story. Watching it on television, you might be inclined to flip the channel, but, in a movie theater, the experience becomes so engrossing that your eyelids may stop blinking.
The screenplay's structure is quite imaginative. We meet an older writer named Bergman (Erland Josephson) who is preparing a script in his study. For material he calls upon an actress, Marianne, with whom he has worked extensively. Like someone relating one of the turning points in her life, Marianne begins to create the story from scratch. Although most of the story is told in flashback, Ullman keeps cutting back to the study for Marianne to talk directly to the camera. Since these long narrative scenes are just as memorable as the flashbacks, it is hard to pick a favorite, as both are so exquisite and hauntingly composed.
Marianne's story, which Ullman in the press notes says is based on an incident in Ingmar Bergman's life, stars Marianne as an attractive, 40-year-old woman torn between two men. Like the unusual structure of the script, the love affair doesn't follow the conventional cinematic formula.  Indeed, were it not for a couple of scenes with explicit sexual discussions, the film might have gotten a PG-13 rating. Don't be confused, however, for this is a serious adult film.
The story-within-the-story, which, of course, is the real story, concerns an actress, Marianne, who is married to an internationally known conductor, Markus (Thomas Hanzon).  In short, he is not the type of guy who inspires his wife to go looking for greener pastures.
David (Krister Henriksson), on the other hand, is the solid looking type who wouldn't turn any heads but is ruggedly handsome. He is a stage director with whom Marianne has worked closely for years. She tells us that he is like her brother. One night when Markus is gone, David and Marianne enjoy a late night dinner at her house.  He is emotionally troubled so he'd like her to hold his hand. After much giggling and awkwardness, she agrees, insisting to us that this will not be incest. And she is right -- for a time -- since nothing happens that night.
Their decision that fateful evening sets them on a trajectory which is as certain as a rocket's. They will eventually come crashing down to earth, and it won't be pretty. Bergman's script is so full of grace and subtlety that the picture almost completely avoids incendiary polemics. The few times when emotions do run out of control are the picture's low points.
As the tragedy heightens, Markus and Marianne's 8-year-old daughter, Isabelle (Michelle Gylemo), moves more to the foreground. She becomes a victim of the actions of the adults in her life. No KRAMER VS. KRAMER tale, the movie keeps the focus on the adults even if it is the child who most deserves our sympathy.
"Our affinity lay in our memory," Marianne, towards the end, says to Bergman about David. "We grieved for what we had lost." Deeply touching, the movie will stay long in your memory, especially Lena Endre's absolutely unforgettable work in it. It is Oscar worthy acting and certainly light-years better than Juliette Binoche's Oscar nominated part in CHOCOLAT.
FAITHLESS runs 2:25. The film is in Swedish with English subtitles. It is rated R for sexual content, some nudity and language and would be acceptable for older teenagers.
Web: http://www.InternetReviews.com Email<EMAIL_ADDRESS>Want free reviews and weekly movie and video recommendations via Email? Just send me a letter with the word "subscribe" in the subject line.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


---
layout: post
title: Dancing feet Storyboards end
date: '2017-07-02T10:30:24+02:00'
categories:
- Storyboards
- Sketches
picture_url: https://film-Storyboards.tumblr.com/post/162512795264/dancing-feet-Storyboards-end
---
Zoom in...
Zoom in...
The End
Dancing Feet Storyboards’s end.
Concept: Daniel Cloud Campos
Production: QUAD


Package flare.query
Classes
AggregateExpression
And
Arithmetic
Average
BinaryExpression
Comparison
CompositeExpression
Count
DateUtil
Distinct
Expression
ExpressionIterator
Fn
If
IsA
Literal
Match
Maximum
Minimum
Not
NullOnAggregate
Or
Query
Range
StringUtil
Sum
Variable
Variance
WeightedAverage
Xor


Intertexti is an initiative I'm undertaking to implement something similar to Apple's HyperCard application. The name is based on the Latin word for "intertwined", since the notecards in the system can be linked any-which-way to other cards.
In this application, I take advantage of the following third party components:
as well as:The problem I'm trying to solve is this - in most everything that I do either for work or personal projects, I find a lot of useful information spread across web pages. I need to organize those pages in better ways than just bookmarking -- I want to be able to add tags, create an index from those tags, see what pages I want to associate with other pages (which often enough the page itself doesn't link to directly), and so forth.
Furthermore, I want to be able to associate my own notes, todo lists, commentary, etc., and reference back to relevant pages. Again, this kind of note taking and cross-referencing is not something a browser supports. Furthermore, and especially with regards to my own notes, I want to be able to organize them relationally, which can often be expressed visually as a table of contents -- something that shows the structure and organization of my own notes as well as providing links to sources, further reading, and so forth.
A Word document is simply to linear for me -- it's one dimensional, like the vertical scrollbar. The second dimension, the cross-referencing of documents, is what Intertexti achieves, at least in prototype form.
As usual, the goal is to design something that is flexible, almost immediately useable, and is implemented with minimal amount of code. You will note my heavy reliance on my standard operating practice of using XML for everything declarative. You will also note that, as a result of the MVC architecture, methods are very small -- some only a line or two. Lastly, the underlying application organization should be support the idea of extensibility -- for example, if you don't want to use WebKit is the browser engine, you should be able to replace it with something else with a minimal amount of fuss.
I tend to write articles as I'm doing the coding, so what you will encounter here is a log, if you will, of the development process. The final source code has slight differences from the code presented here--for example, the final version of the NotecardRecord class uses a factory pattern rather than a publicly exposed constructor. But the idea is that the reader will get a sense of how the application was developed and the problems I encountered (like handling right-click mouse events on the WebKit browser).
My initial features are not too ambitious:
As might be surmised by the description above of references, I view references as being unidirectional, essentially drilling down (or at least horizontally) whereas the links for "referenced by" are popping up the tree.
There are four forms of navigation, but these should be intuitive to the user:
For example, given 5 notecards:
The four navigable components are:
The above pieces can be quickly put together in a scaffold--no content, just the layout of the views:
Getting this scaffolding up and running takes about 200 lines of code, leveraging Weifen Luo's DockPanelSuite and my recent article on Decoupling Content from Container, A basic MVC model is used.
Here we simply instantiate the application's main form:
static class Program { [STAThread] public static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form form = Instantiate<Form>("mainform.xml", null); Application.Run(form); } public static T Instantiate<T>(string filename, Action<MycroParser> AddInstances) { MycroParser mp = new MycroParser(); if (AddInstances != null) { AddInstances(mp); } XmlDocument doc = new XmlDocument(); doc.Load(filename); mp.Load(doc, "Form", null); T obj = (T)mp.Process(); return obj; } }
The application's view is simply a placeholder for the DockPanel instance, as this is referenced by the controller to respond to menu events:
public class ApplicationFormView : Form { public DockPanel DockPanel { get; protected set; } public ApplicationFormView() { } }
The controller handles all of the application's main form events. Most of this is boilerplate for working with DockPanelSuite. The only noteworthy thing here is to observe that the controller is derived from the abstract class ViewController, which requires defining the concrete view type to which the controller is associated. This makes it easier in the controller to work with the specific view properties -- we can avoid all the casting that would otherwise be required.
public class ApplicationFormController : ViewController<ApplicationFormView> { public ApplicationFormController() { } protected void Exit(object sender, EventArgs args) { View.Close(); } protected void Closing(object sender, CancelEventArgs args) { SaveLayout(); } protected void RestoreLayout(object sender, EventArgs args) { CloseAllDockContent(); LoadTheLayout("defaultLayout.xml"); } protected void LoadLayout(object sender, EventArgs args) { if (File.Exists("layout.xml")) { LoadTheLayout("layout.xml"); } else { RestoreLayout(sender, args); } } protected void LoadTheLayout(string layoutFilename) { View.DockPanel.LoadFromXml(layoutFilename, ((string persistString)=> { string typeName = persistString.LeftOf(',').Trim(); string contentMetadata = persistString.RightOf(',').Trim(); IDockContent container = InstantiateContainer(typeName, contentMetadata); InstantiateContent(container, contentMetadata); return container; })); } protected void SaveLayout() { View.DockPanel.SaveAsXml("layout.xml"); } protected IDockContent InstantiateContainer(string typeName, string metadata) { IDockContent container = null; if (typeName == typeof(GenericPane).ToString()) { container = new GenericPane(metadata); } else if (typeName == typeof(GenericDocument).ToString()) { container = new GenericDocument(metadata); } return container; } protected void InstantiateContent(object container, string filename) { Program.Instantiate<object>(filename, ((MycroParser mp) => { mp.AddInstance("Container", container); })); } protected void NewDocument(string filename) { GenericDocument doc = new GenericDocument(filename); InstantiateContent(doc, filename); doc.Show(View.DockPanel); } protected void NewPane(string filename) { GenericPane pane = new GenericPane(filename); InstantiateContent(pane, filename); pane.Show(View.DockPanel); } protected void CloseAllDockContent() { if (View.DockPanel.DocumentStyle == DocumentStyle.SystemMdi) { foreach (Form form in View.MdiChildren) { form.Close(); } } else { for (int index = View.DockPanel.Contents.Count - 1; index >= 0; index--) { if (View.DockPanel.Contents[index] is IDockContent) { IDockContent content = (IDockContent)View.DockPanel.Contents[index]; content.DockHandler.Close(); } } } } }
All controllers associated with views are derived from ViewController, which simply provides a typed instance of the underlying view, accessible in the derived controller class:
public abstract class ViewController<T> : ISupportInitialize { public T View { get; set; } public ViewController() { } public virtual void BeginInit() { } public virtual void EndInit() { } }
We will see later where the EndInit() virtual method is used, but for now, just keep in mind that the instantiation engine calls this method when the object has been completely instantiated, which we can take advantage of to do some application-specific initialization in the controller.
The definition of the layout and initial settings is handled by the declarative code, instantiated using MycroXaml (with some modifcations).
This defines the layout of the application. Note here how various assemblies are being pulled in and the view and controller is being instantiated with final property and event wire-up done last.
<MycroXaml Name="Form" xmlns:wf="System.Windows.Forms, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:ixc="Intertexti.Controllers, Intertexti" xmlns:ixv="Intertexti.Views, Intertexti" xmlns:wfui="WeifenLuo.WinFormsUI.Docking, WeifenLuo.WinFormsUI.Docking" xmlns:def="def" xmlns:ref="ref"> <ixv:ApplicationFormView def:Name="applicationFormView" Text="Intertexti" Size="800, 600" IsMdiContainer="true"> <ixc:ApplicationFormController def:Name="controller" View="{applicationFormView}"/> <ixv:Controls> <wfui:DockPanel def:Name="dockPanel" Dock="Fill"/> <wf:MenuStrip> <wf:Items> <wf:ToolStripMenuItem Text="&File"> <wf:DropDownItems> <wf:ToolStripMenuItem Text="E&xit" Click="{controller.Exit}"/> </wf:DropDownItems> </wf:ToolStripMenuItem> <wf:ToolStripMenuItem Text="&Window"> <wf:DropDownItems> <wf:ToolStripMenuItem Text="Restore &Layout" Click="{controller.RestoreLayout}"/> </wf:DropDownItems> </wf:ToolStripMenuItem> </wf:Items> </wf:MenuStrip> </ixv:Controls> <!-- Forward references --> <!-- Form events requiring the controller must be wired after the controller and form have been instantiated. --> <ixv:ApplicationFormView ref:Name="applicationFormView" DockPanel="{dockPanel}" Load="{controller.LoadLayout}" Closing="{controller.Closing}"/> </ixv:ApplicationFormView> </MycroXaml>
There are four initial panes defined in:
and they all are very similar, so I'll show the markup for only one of them, indexPane.xml:
<?xml version="1.0" encoding="utf-8" ?> <MycroXaml Name="Form" xmlns:wf="System.Windows.Forms, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:ix="Intertexti, Intertexti" xmlns:ref="ref"> <ix:GenericPane ref:Name="Container" TabText="Index" ClientSize="400, 190" BackColor="White" ShowHint="DockLeft"> <ix:Controls> <wf:TreeView Dock="Fill"> <wf:Nodes> <wf:TreeNode Text="Index"> </wf:TreeNode> </wf:Nodes> </wf:TreeView> </ix:Controls> </ix:GenericPane> </MycroXaml>
The only thing at the moment that differs between the panes is the text and the ShowHint property value assignment.
It seemed most reasonable to leverage web browser technology as a means for rendering notecards. This also has the future possibility of embedding scripts or other control logic to create more sophisticated and dynamic notecards. Rather than use the browser that is embedded in .NET, I decided to use WebKit, specifically the WebKit.NET implementation. You should be aware however that this implementation does not look like it's actively supported (the last update was August 2010) and is a wrapper for WebKit, Readers should consider looking at open-webkit-sharp instead. For the moment, the stalled WebKit.NET project is sufficient for this article for two reasons: I'm using VS2008 and open-webkit-sharp's binaries are built with VS2010/12, and I also can't get the a simple browser application to work and I don't want to spend the time fussing with it right now.
The imperative code is simply stubs to get something basic working.
There is no implementation:
public class NotecardController :ViewController<NotecardView> { }
The only implementation here is to load something into the browser window:
public class NotecardView : UserControl { protected WebKitBrowser browser; public WebKitBrowser Browser { get { return browser; } set { browser = value; browser.Navigate("http://www.codeproject.com"); } } public NotecardView() { } }
A method has been added to handle the menu event to add a new notecard:
protected void NewNotecard(object sender, EventArgs args) { NewDocument("notecard.xml"); }
The notecard shown in the screenshot above is instantiated by notecard.xml.
<?xml version="1.0" encoding="utf-8" ?> <MycroXaml Name="Form" xmlns:ixc="Intertexti.Controllers, Intertexti" xmlns:ixv="Intertexti.Views, Intertexti" xmlns:ix="Intertexti, Intertexti" xmlns:wk="WebKit, WebKitBrowser" xmlns:def="def" xmlns:ref="ref"> <ix:GenericDocument ref:Name="Container" Text="Notecard"> <ix:Controls> <ixv:NotecardView def:Name="notecardView" Dock="Fill"> <ixv:Controls> <wk:WebKitBrowser def:Name="browser" Dock="Fill"/> </ixv:Controls> </ixv:NotecardView> </ix:Controls> <ixv:NotecardView ref:Name="notecardView" Browser="{browser}"/> <ixc:NotecardController def:Name="notecardController" View="{notecardView}"/> </ix:GenericDocument> </MycroXaml>
A new menu item has been added:
<wf:ToolStripMenuItem Text="&Notecard"> <wf:DropDownItems> <wf:ToolStripMenuItem Text="&New" Click="{controller.NewNotecard}"/> </wf:DropDownItems> </wf:ToolStripMenuItem>
A lot of things that I want to organize are actually URL's, so I'm going to stick with the basic concept of navigating and linking together URL's. Some of this will end up being a bit hokey because I'm putting off actually editing notecards until later in this article, but we can get the entire application behavior regarding linkages just by working with URL's. And yes, this will end up creating a tabbed browser application with the ability to organize and associate web pages. Amusing, isn't it?
What we need first is the ability to associate four things with a notecard:
The first three items above (URL, TOC, and Keywords) are a standard part of each notecard. The question becomes, should this information be associated with each notecard or in a location that is context-specific to the selected notecard? I've opted for the second option, as this allows us to remove some of the clutter that we don't need to be looking at when simply navigating the data. Ideally, this should be another DockPanel pane, giving the user the flexibility to move it around where they want:
<?xml version="1.0" encoding="utf-8" ?> <MycroXaml Name="Form" xmlns:ix="Intertexti, Intertexti" xmlns:ixctrl="Intertexti.Controls, Intertexti" xmlns:ixc="Intertexti.Controllers, Intertexti" xmlns:def="def" xmlns:ref="ref"> <ix:GenericPane ref:Name="Container" TabText="Notecard Info" ClientSize="400, 190" BackColor="White" ShowHint="DockTop"> <ixc:MetadataController def:Name="controller" AppController="{ApplicationFormController}"/> <ix:Controls> <ixctrl:LabeledTextBox LabelText="URL:" Location="5, 5" TextDataChanged="controller.NavigateToURL"/> <ixctrl:LabeledTextBox LabelText="TOC:" Location="5, 30"/> <ixctrl:LabeledTextBox LabelText="Tags:" Location="5, 55"/> </ix:Controls> </ix:GenericPane> </MycroXaml>
In the notecard XML, I've added the line:
<ixa:RegisterDocumentController App="{ApplicationFormController}" Container="{Container}" Controller="{controller}"/>
Note the markup element RegisterDocumentController. This is a serious "cheat" on my part, providing the capability to add "actions" through the instantiation and post-initialization of instances. The following diagram illustrates why we need this:
The question is, how do we get the MetadataController to tell the NotecardController to navigate to a particular URL? Furthermore, there can be multiple notecards displayed at the same time, so we need a way to track the active notecard. DockPanelSuite provides an event for keeping track of the active notecard, which we wire up in the mainForm markup, as this is an event provided by DockPanel:
<wfui:DockPanel def:Name="dockPanel" Dock="Fill" ActiveDocumentChanged="{controller.ActiveDocumentChanged}"/>
Implemented in the ApplicationFormController as:
public IDocumentController ActiveDocumentController { get; protected set; } protected void ActiveDocumentChanged(object sender, EventArgs args) { DockPanel dockPanel = (DockPanel)sender; IDockContent content = dockPanel.ActiveDocument; ActiveDocumentController = documentControllerMap[content]; }
However, we still need to register the controller associated with the dock content, which is what the "action" RegisterDocumentController does:
public class RegisterDocumentController : DeclarativeAction { public ApplicationFormController App { get; protected set; } public IDockContent Container { get; protected set; } public IDocumentController Controller { get; protected set; } public override void EndInit() { App.RegisterDocumentController(Container, Controller); } }
And in the application controller:
public void RegisterDocumentController(IDockContent content, IDocumentController controller) { documentControllerMap[content] = controller; }
Now, the metadata controller can get the active notecard controller from the application controller -- three controllers are involved!
public class MetadataController { public ApplicationFormController AppController { get; set; } public void NavigateToURL(string url) { ((INotecardController)AppController.ActiveDocumentController).NavigateToURL(url); } }
Since we only have one kind of document, implemented as an INotecardController, we can safely cast the controller. The above diagram now looks like this:
Of course, we also need the ability to remove the entries in the content-controller map. This is done by wiring up the DockPanel event:
<wfui:DockPanel def:Name="dockPanel" Dock="Fill" ActiveDocumentChanged="{controller.ActiveDocumentChanged}" ContentRemoved="{controller.ContentRemoved}"/>
and providing the implementation in the application controller:
protected void ContentRemoved(object sender, DockContentEventArgs e) { documentControllerMap.Remove(e.Content); }
One last little nuance -- by capturing the DocumentTitledChanged event of the Browser control:
<wk:WebKitBrowser def:Name="browser" Dock="Fill" DocumentTitleChanged="{controller.DocumentTitleChanged}"/>
We can set the title of the tab:
protected void DocumentTitleChanged(object sender, EventArgs args) { ((GenericDocument)View.Parent).Text = View.Browser.DocumentTitle; }
We now have a non-persisting multi-tab browser:
It would behoove us to create and wire-up the model. As you probably tell, I am not a model-driven-developer -- models tend to change a lot as the UI is being developed, so I like to get some of the UI aspects in place before constructing the model. Then again, this approach works well when implementing on the fly with only a thin paper design. If I were working with a fully storyboarded application, then yes, probably the model would be a good place to start, but still, it's less instant-gratifying.
In another radical approach, I'm not going to implement persistence with a third party database; a .NET DataSet is perfectly adequate for the job at hand -- persistable and relational. Also, keep in mind that the layout of the UI (a model in its own right) is being handled completely by DockPanelSuite, so we don't need to worry about that.
The model that we need at this point looks like this:
See Appendix A for how the schema is declared and instantiated.
See Appendix B for the model persistence methods.
See Appendix C for the NotecardRecord implementation.
Appendices A-C are just boilerplate schema and data management code. The more interesting model code is in the application specific features. The model, in addition to maintaining the DataSet instance, also provides a property allowing a controller to get or set the active notecard record:
public NotecardRecord ActiveNotecardRecord { get; set; }
The active record is initialized when a new notecard is created:
public NotecardRecord NewNotecard() { DataRow row = NewRow("Notecards"); ActiveNotecardRecord = new NotecardRecord(row); return ActiveNotecardRecord; } protected DataRow NewRow(string tableName) { DataRow row = dataSet.Tables["Notecards"].NewRow(); dataSet.Tables["Notecards"].Rows.Add(row); return row; }
This occurs in the application's controller when a new notecard request (from the menu) is made:
protected void NewNotecard(object sender, EventArgs args) { NewDocument("notecard.xml"); NotecardRecord notecard = ApplicationModel.NewNotecard(); notecard.IsOpen = true; ((NotecardController)ActiveDocumentController).SetNotecardRecord(notecard); }
Furthermore, each controller maintains the notecard record instance to which it is associated. Therefore, when the notecard in selected, the controller can update the metadata panel controls as well as the active record:
public void IsActive() { // We may not have a record associated with the document! // This happens because DockPanelSuite opens documents as persisted in the layout. // TODO: Fix this, so documents are not persisted in the layout! We should always open with no documents! if (notecardRecord != null) { ApplicationModel.ActiveNotecardRecord = notecardRecord; ApplicationController.MetadataController.UpdateURL(notecardRecord.URL); ApplicationController.MetadataController.UpdateTOC(notecardRecord.TableOfContents); ApplicationController.MetadataController.UpdateTags(notecardRecord.Tags); } }
When the metadata is updated, the metadata controller can update the active notecard record (the record's URL is updated actually in the notecard controller):
public void SetTableOfContents(string toc) { ApplicationModel.ActiveNotecardRecord.TableOfContents = toc; } public void SetTags(string tags) { ApplicationModel.ActiveNotecardRecord.Tags = tags; }
Lastly, when a DataSet is loaded, a query is executed for all the notecards that were designated as "open" in the session associated with the DataSet:
public class ApplicationModel { ... public List<NotecardRecord> GetOpenNotecards() { List<NotecardRecord> openNotecards = new List<NotecardRecord>(); dataSet.Tables["Notecards"].AsEnumerable(). Where(t => t.Field<bool>("IsOpen")). ForEach(t => openNotecards.Add(new NotecardRecord(t))); return openNotecards; } ... }
The notecards that were open in the last session when the DataSet was saved are opened and directed to the appropriate URL's:
public class ApplicationFormController { ... protected void OpenNotecardDocuments(List<NotecardRecord> notecards) { notecards.ForEach(t => { NewDocument("notecard.xml"); ((NotecardController)ActiveDocumentController).SetNotecardRecord(t); ((NotecardController)ActiveDocumentController).NavigateToURL(t.URL); }); } ... }
Again, because we only have one kind of document controller, we can safely cast the active document controller to the NotecardController type.
All of these events and interactions can be illustrated by the following diagram:
For this prototype, I'm only going to implement linkages between notecards that are currently open (handling potentially thousands of notecards in the dataset is not exactly feasible at the moment.) Wanting to implement this is a right-click operation on a notecard, I discovered that WebKit (the version I'm using, apparently this is fixed in SharpWebKit) doesn't allow me to set the ContextMenuStrip of the WebKitBrowser object, therefore I needed to implement the workaround described in Appendix D: Capturing Application-Wide Mouse Events.
Now that we have the right-click feature working correctly, we can create the context menu dynamically based on the open notecards (currently the text is set to the URL, we'll fix that later):
public class NotecardView : UserControl { ... protected void CreateDynamicReferences() { ReferencesMenu.DropDownItems.Clear(); ReferencedByMenu.DropDownItems.Clear(); List<NotecardController> activeNotecardControllers = ApplicationController.ActiveNotecardControllers; activeNotecardControllers.ForEach(t => { ToolStripMenuItem item1 = new ToolStripMenuItem(t.NotecardRecord.URL); item1.Tag = t; item1.Click += Controller.LinkReferences; ReferencesMenu.DropDownItems.Add(item1); ToolStripMenuItem item2 = new ToolStripMenuItem(t.NotecardRecord.URL); item2.Tag = t; item2.Click += Controller.LinkReferencedFrom; ReferencedByMenu.DropDownItems.Add(item2); }); } ... }
and the controller associated with the view handles the call to the model depending on the direction of the link:
public class NotecardController : ViewController<NotecardView>, IDocumentController, INotecardController { ... public void LinkReferences(object sender, EventArgs e) { ToolStripMenuItem item = (ToolStripMenuItem)sender; NotecardController refController = (NotecardController)item.Tag; // Create an association between this controller, as the parent, and the refController, as the child. ApplicationModel.Associate(NotecardRecord, refController.NotecardRecord); } public void LinkReferencedFrom(object sender, EventArgs e) { ToolStripMenuItem item = (ToolStripMenuItem)sender; NotecardController refController = (NotecardController)item.Tag; // Create an association between this controller, as the child, and the refController, as the parent. ApplicationModel.Associate(refController.NotecardRecord, NotecardRecord); } ... }
and finally the model handles the actual manipulation of the DataSet:
public class ApplicationModel { ... public void Associate(NotecardRecord parent, NotecardRecord child) { DataRow row = dataSet.Tables["NotecardReferences"].NewRow(); row["NotecardParentID"] = parent.ID;
row["NotecardChildID"] = child.ID; dataSet.Tables["NotecardReferences"].Rows.Add(row); } ... }
We also need to query the "references" and "referenced from" notecards, also implemented in the model. Some of this code relies on Juan Francisco Morales Larios' excellent article on Linq Extended Joins.
public List<NotecardRecord> GetReferences() { List<NotecardRecord> references = this["Notecards"].Join(this["NotecardReferences"].Where(t => t.Field<int>("NotecardParentID") == ActiveNotecardRecord.ID), pk => pk.Field<int>("ID"), fk => fk.Field<int>("NotecardChildID"), (pk, fk) => new NotecardRecord(pk)).ToList(); return references; } public List<NotecardRecord> GetReferencedFrom() { List<NotecardRecord> references = this["Notecards"].Join(this["NotecardReferences"].Where(t => t.Field<int>("NotecardChildID") == ActiveNotecardRecord.ID), pk => pk.Field<int>("ID"), fk => fk.Field<int>("NotecardParentID"), (pk, fk) => new NotecardRecord(pk)).ToList(); return references; }
For the table of contents, we also need the ability to get root notecards (those that aren't referenced by other notecards):
public List<NotecardRecord> GetRootNotecards() { List<NotecardRecord> rootRecs = this["Notecards"].LeftExcludingJoin( this["NotecardReferences"], pk => pk.Field<int>("ID"), fk => fk.Field<int>("NotecardChildID"), (pk, fk) => pk).Select(t => new NotecardRecord(t)).ToList(); return rootRecs; }
We now have all the pieces to fill in the data in the TOC, indices, references, and referenced by panels. Note that some of the markup illustrated earlier has changed -- I have now implemented controller and view classes for each of the panes.
The "links to" (aka references) and "referenced by" (aka referenced from) implementations are quite trivial. Both views derive from:
public class ReferenceView : UserControl { public ApplicationModel Model { get; protected set; } public TreeView TreeView { get; protected set; } public void UpdateTree(List<NotecardRecord> refs) { TreeView.Nodes.Clear(); refs.ForEach(r => { TreeNode node = new TreeNode(r.URL); node.Tag = r; TreeView.Nodes.Add(node); }); } }
where ReferencesView gets the references of the active record:
public class ReferencesView : ReferenceView { public void UpdateView() { List<NotecardRecord> refs = Model.GetReferences(); UpdateTree(refs); } }
as compared to ReferencesFromView, which gets the "references from" other notecards to the active record:
public class ReferencedFromView : ReferenceView { public void UpdateView() { List<NotecardRecord> refs = Model.GetReferencedFrom(); UpdateTree(refs); } }
This view accumulates and indexes the tags for each notecard and has the most code of any of the views:
public class IndexView : UserControl { public ApplicationModel Model { get; protected set; } public TreeView TreeView { get; protected set; } public void RefreshView() { Dictionary<string, List<NotecardRecord>> tagRecordMap; TreeView.Nodes.Clear(); tagRecordMap = BuildTagRecordMap(); // Sort the list by tag value. var orderedIndexList = tagRecordMap.OrderBy((item)=>item.Key); BuildTree(orderedIndexList); } protected Dictionary<string, List<NotecardRecord>> BuildTagRecordMap() { Dictionary<string, List<NotecardRecord>> tagRecordMap = new Dictionary<string, List<NotecardRecord>>(); // Build the view model, which is a list of references for tag item. Model.ForEachNotecard(rec => { Model.GetTags(rec).Where(t=>!String.IsNullOrEmpty(t)).ForEach(t => { List<NotecardRecord> records; if (!tagRecordMap.TryGetValue(t, out records)) { records = new List<NotecardRecord>(); tagRecordMap[t] = records; } records.Add(rec); }); }); return tagRecordMap; } protected void BuildTree(IOrderedEnumerable<KeyValuePair<string, List<NotecardRecord>>> orderedIndexList) { orderedIndexList.ForEach(item => { TreeNode tn = new TreeNode(item.Key); TreeView.Nodes.Add(tn); if (item.Value.Count == 1) { // Only one notecard for this index item, so set the node's tag to the notecard record. tn.Tag = item.Value[0]; } else if (item.Value.Count > 1) { // Multiple notecards for this index item, so create child nodes and set the node's tag to the associated notecard record. item.Value.ForEach(rec => { TreeNode tn2 = new TreeNode(rec.URL); tn2.Tag = rec; tn.Nodes.Add(tn2); }); } }); } }
The table of contents is built from root notecards (those that aren't referenced anywhere) and excludes any references that do not have a TOC entry, as well as ensuring we don't get into an infinite recursion state if there are circular references:
public class TableOfContentsView : UserControl { public ApplicationModel Model { get; protected set; } public TreeView TreeView { get; protected set; } protected List<int> encounteredRecords; public void RefreshView() { encounteredRecords = new List<int>(); List<NotecardRecord> rootRecs = Model.GetRootNotecards(); TreeView.Nodes.Clear(); PopulateTree(rootRecs); } protected void PopulateTree(List<NotecardRecord> rootRecs) { rootRecs.Where(r=>!String.IsNullOrEmpty(r.TableOfContents)).ForEach(r => { encounteredRecords.Add(r.ID); TreeNode tn = new TreeNode(r.TableOfContents); tn.Tag = r; TreeView.Nodes.Add(tn); PopulateChildren(tn, r); }); } protected void PopulateChildren(TreeNode node, NotecardRecord rec) { List<NotecardRecord> childRecs = Model.GetReferences(rec); childRecs.Where(r=>(!String.IsNullOrEmpty(r.TableOfContents)) && (!encounteredRecords.Contains(r.ID))).ForEach(r => { encounteredRecords.Add(r.ID); TreeNode tn = new TreeNode(r.TableOfContents); tn.Tag = r; node.Nodes.Add(tn); // Recurse into grandchildren, etc. PopulateChildren(tn, r); }); } }
At this point, let's take a small breather and, using just URL's (both from the web and local files), put together some recipe notecards. I want to organize my recipes by breakfast, lunch, and dinner, and I want the tags to be the ingredients so if I'm interested in a recipe that contains broccoli, I can find all those recipes.
First off, I created by hand some basic files (we'll implement a content editor later), that all look similar to this:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Recipes</title> </head> <body> <p>Recipes</p> </body> </html>
These are going to be placeholders for my table of contents. I add new notecards for each of my placeholders, generate the TOC, and we get a flat TOC:
This isn't what we want - we want Recipes to references Breakfast, Lunch, and Dinner, so we select the Recipes notecard, and for each mealtime, right click and create the association:
We now get a properly organized TOC and also note that the "Links To" pane shows what notecards the Recipes notecard references:
Now we can add some recipes from the Internet, and after making the appropriate associations of a recipe to a mealtime, as well as populating the tags, we have the beginnings of a recipe book:
The things to note here are:
Of course, we want to be able to click on a TOC, index, or reference node and have it open the URL. The event is wired up in the markup, for example:
<wf:TreeView def:Name="treeView" Dock="Fill" NodeMouseClick="{ApplicationFormController.OpenNotecard}">
and is routed to the application controller:
protected void OpenNotecard(object sender, TreeNodeMouseClickEventArgs args) { NotecardRecord rec = args.Node.Tag as NotecardRecord; if (rec != null) { if (!rec.IsOpen) { NewDocument("notecard.xml"); ((NotecardController)ActiveDocumentController).SetNotecardRecord(rec); ((NotecardController)ActiveDocumentController).NavigateToURL(rec.URL); ((NotecardController)ActiveDocumentController).IsActive(); rec.IsOpen = true; } else { // Don't open a new document, select the one that is already open. IDockContent content = documentControllerMap.Single(t=>((NotecardController)t.Value).NotecardRecord==rec).Key; content.DockHandler.Show(); } } }
Lastly (at least for this prototype implementation) we want the user to be able to add actual content. Since the notecard is based on a web browser, it would certainly make sense to use an HTML editor, and I found a decent one here. Note that this is not intended to edit existing web pages - this for creating your own simple content (you do not want to use this for editing web pages from the Internet, among other things, all of the stylesheet information is lost.)
The HTML editor is added as a hidden control in the notepad view markup:
<editor:HtmlEditorControl def:Name="htmlEditor" Dock="Fill" Visible="false"/> <wk:WebKitBrowser def:Name="browser" Dock="Fill" .../>
and a right-click context menu option is added:
<wf:ToolStripMenuItem def:Name="editHtml" Text="&Edit Document" Click="{controller.EditHtml}"/>
which the notepad controller handles (this is a bit kludgy right now):
protected void EditHtml(object sender, EventArgs args) { if (!editing) { editing = true; View.BeginHtmlEditing(); } else { editing = false; View.EndHtmlEditing(); // Must get the new text from the HtmlEditor, as the WebKit Browser control // won't have updated the return value of the Browser.DocumentText property! NotecardRecord.HTML = View.HtmlEditor.InnerHtml; } }
and the view does the rest:
public void BeginHtmlEditing() { HtmlEditor.InnerHtml = Browser.DocumentText; Browser.Visible = false; HtmlEditor.Visible = true; EditHtml.Text = "&Save Html"; } public void EndHtmlEditing() { Browser.DocumentText = HtmlEditor.InnerHtml; HtmlEditor.Visible = false; Browser.Visible = true; EditHtml.Text = "&Edit Html"; }
Now the custom content simply needs to be handled correctly when we open a record, which means, instead of calling NavigateToURL, we're going to add the method ShowDocument and let the controller determine whether to use a URL or the custom HTML:
public void ShowDocument() { if (!(String.IsNullOrEmpty(NotecardRecord.HTML))) { View.Browser.DocumentText = NotecardRecord.HTML; } else { NavigateToURL(NotecardRecord.URL); } }
So, now by right-clicking on Edit Notecard:
I can create my own notecards using a snazzy HTML editor:
and I can now cross reference my custom notecards in the same why as with HTML files or URL's:
At the end of the day (or the week, in this case, as it took about a week to put this all together) we end up with a usable prototype of my vision of resurrecting Apple's HyperCard concept. Maybe I'll be sued! In any case, while this is a sufficiently usable application at this point, there are still a lot of rough edges--usability issues that need to be addressed (for example, you have to tell the program to regenerate the TOC and index from the View / Refresh menu) and probably lots of strange bugs. But that work will be left for another day. Also, there's some useful functionality missing, like being able to delete notecards! You will also note that this is an x86 application because WebKit runs only in 32 bit mode.
As usual, if you're interested in contributing to this project, please let me know. Personally, I'm interested in developing this into a viable commercial product, but the code presented here is available to the community.
The schema is represented as an object graph that instantiates a DataSet:
<?xml version="1.0" encoding="utf-8" ?> <MycroXaml Name="Schema" xmlns:d="System.Data, System.Data, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:def="def" xmlns:ref="ref"> <d:DataSet Name="Dataset"> <d:Tables> <d:DataTable Name="Notecards" TableName="Notecards"> <d:Columns> <d:DataColumn Name="NotecardID" ColumnName="ID" AllowDBNull="false" AutoIncrement="true" DataType="System.Int32" /> <d:DataColumn ColumnName="TableOfContents" AllowDBNull="true" DataType="System.String"/> <d:DataColumn ColumnName="URL" AllowDBNull="true" DataType="System.String"/> <d:DataColumn ColumnName="Title" AllowDBNull="true" DataType="System.String"/> <d:DataColumn ColumnName="HTML" AllowDBNull="true" DataType="System.String"/> <d:DataColumn ColumnName="IsOpen" AllowDBNull="true" DataType="System.Boolean"/> </d:Columns> </d:DataTable> <d:DataTable Name="NotecardReferences" TableName="NotecardReferences"> <d:Columns> <d:DataColumn Name="NotecardReferenceID" ColumnName="ID" AllowDBNull="false" AutoIncrement="true" DataType="System.Int32"/> <d:DataColumn Name="NotecardParentID" ColumnName="NotecardParentID" AllowDBNull="false" DataType="System.Int32"/> <d:DataColumn Name="NotecardChildID" ColumnName="NotecardChildID" AllowDBNull="false" DataType="System.Int32"/> </d:Columns> </d:DataTable> <d:DataTable Name="Metadata" TableName="Metadata"> <d:Columns> <d:DataColumn Name="MetadataID" ColumnName="ID" AllowDBNull="false" AutoIncrement="true" DataType="System.Int32"/> <d:DataColumn Name="Metadata_NotecardID" ColumnName="NotecardID" AllowDBNull="false" DataType="System.Int32"/> <d:DataColumn ColumnName="Tag" AllowDBNull="false" DataType="System.String"/> </d:Columns> </d:DataTable> </d:Tables> <d:Relations> <d:DataRelation Name="FK_Metadata_Notecard" ChildColumn="{Metadata_NotecardID}" ParentColumn="{NotecardID}"/> <d:DataRelation Name="FK_NotecardRef_Notecard1" ChildColumn="{NotecardParentID}" ParentColumn="{NotecardID}"/> <d:DataRelation Name="FK_NotecardRef_Notecard2" ChildColumn="{NotecardChildID}" ParentColumn="{NotecardID}"/> </d:Relations> <d:DataTable ref:Name="Notecards" PrimaryKey="{NotecardID}"/> <d:DataTable ref:Name="NotecardReferences" PrimaryKey="{NotecardReferenceID}"/> <d:DataTable ref:Name="Metadata" PrimaryKey="{MetadataID}"/> </d:DataSet> </MycroXaml>
Unfortunately, certain properties (DataType) and classes (DataRelation) are not particularly friendly to declarative instantiation and need some "help":
public static class SchemaHelper { public static DataSet CreateSchema() { MycroParser mp = new MycroParser(); // Instantiation of schemas using .NET classes needs some help. mp.CustomAssignProperty += new CustomAssignPropertyDlgt(CustomAssignProperty); mp.InstantiateClass += new InstantiateClassDlgt(InstantiateClass); mp.UnknownProperty += new UnknownPropertyDlgt(UnknownProperty); XmlDocument doc = new XmlDocument(); doc.Load("schema.xml"); mp.Load(doc, "Schema", null); DataSet dataSet = (DataSet)mp.Process(); return dataSet; } public static void CustomAssignProperty(object sender, CustomPropertyEventArgs pea) { if (pea.PropertyInfo.Name == "DataType") { Type t = Type.GetType(pea.Value.ToString()); pea.PropertyInfo.SetValue(pea.Source, t, null); pea.Handled = true; } else if (pea.PropertyInfo.Name == "PrimaryKey") { pea.PropertyInfo.SetValue(pea.Source, new DataColumn[] { (DataColumn)pea.Value }, null); pea.Handled = true; } } public static void InstantiateClass(object sender, ClassEventArgs cea) { MycroParser mp = (MycroParser)sender; if (cea.Type.Name == "DataRelation") { string name = cea.Node.Attributes["Name"].Value; string childColumnRef = cea.Node.Attributes["ChildColumn"].Value; string parentColumnRef = cea.Node.Attributes["ParentColumn"].Value; DataColumn dcChild = (DataColumn)mp.GetInstance(childColumnRef.Between('{', '}')); DataColumn dcParent = (DataColumn)mp.GetInstance(parentColumnRef.Between('{', '}')); cea.Result = new DataRelation(name, dcParent, dcChild); cea.Handled = true; } } public static void UnknownProperty(object sender, UnknownPropertyEventArgs pea) { // Ignore these attributes. // TODO: add the element name into the args, so we can also test the element for which we want to ignore certain properties. if ((pea.PropertyName == "ChildColumn") || (pea.PropertyName == "ParentColumn")) { pea.Handled = true; } } }
This handles the saving and loading of the DataSet to an XML file:
public class ApplicationModel { protected DataSet dataSet; protected string filename; public ApplicationModel() { dataSet = SchemaHelper.CreateSchema(); } public void NewModel() { dataSet = SchemaHelper.CreateSchema(); filename = String.Empty; } public void LoadModel(string filename) { this.filename = filename; dataSet = SchemaHelper.CreateSchema(); dataSet.ReadXml(filename, XmlReadMode.IgnoreSchema); } public void SaveModel() { dataSet.WriteXml(filename, XmlWriteMode.WriteSchema); } public void SaveModelAs(string filename) { this.filename = filename; dataSet.WriteXml(filename, XmlWriteMode.WriteSchema); } }
This is a thin wrapper for the underlying DataRow associated with a notecard record:
public class NotecardRecord { public string TableOfContents { get { return row.Field<string>("TableOfContents"); } set { row["TableOfContents"] = value; } } public string URL { get { return row.Field<string>("URL"); } set { row["URL"] = value; } } public string HTML { get { return row.Field<string>("HTML"); } set { row["HTML"] = value; } } public string Tags { get { return JoinTags(); } set { ParseTags(value); } } public bool IsOpen { get { return row.Field<bool>("IsOpen"); } set { row["IsOpen"] = value; } } protected DataRow row; public NotecardRecord(DataRow row) { this.row = row; } protected string JoinTags() { return String.Empty; } protected void ParseTags(string tags) { } }
This is a complicated workaround that requires first intercepting the application-wide right-click message and then posting (not sending) a custom message to the application to process the event, which in turn needs to make sure that the right-click is actually occurring on a noteacard. Let's begin:
At startup, we register a custom window message and our custom message filter:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] static extern uint RegisterWindowMessage(string lpString); public static void Main() { RightClickWindowMessage = RegisterWindowMessage("IntertextiRightClick"); IMessageFilter myFilter = new MyMessageFilter(); Application.AddMessageFilter(myFilter); ...
The custom message filter looks for right-click events and posts a message to process the event. The right-click is not filtered, allowing the application to handle it normally. The reason we post the message is that we don't want to process it immediately -- we want to give Windows and the application the opportunity to do whatever it does, which, in our case, it to set focus to the control where the mouse was clicked (this is done for us somewhere). Posting a message adds the message at the end of the Windows message queue, as opposed to SendMessage, which processes the message immediately if the two windows have the same thread. The message filter:
public class MyMessageFilter : IMessageFilter { [return: MarshalAs(UnmanagedType.Bool)] [DllImport("user32.dll", SetLastError = true)] static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); public bool PreFilterMessage(ref Message m) { if (m.Msg == 0x204) //WM_RBUTTONDOWN { PostMessage(Program.MainForm.Handle, Program.RightClickWindowMessage, m.WParam, m.LParam); } return false; // do not filter } }
Next, we look for our custom right-click message in the application's main form and fire an event:
public delegate void RightClickDlgt(int x, int y); public class ApplicationFormView : Form { public event RightClickDlgt RightClick; ... protected override void WndProc(ref Message m) { if (m.Msg == Program.RightClickWindowMessage) { // client area (x,y) int x = (int)(((ulong)m.LParam) & 0xFFFF); int y = (int)(((ulong)m.LParam) >> 16); if (RightClick != null) { RightClick(x, y); } } else { base.WndProc(ref m); } } }
The event is wired up in the markup:
<ixv:ApplicationFormView ref:Name="applicationFormView" DockPanel="{dockPanel}" Load="{controller.LoadLayout}" Closing="{controller.Closing}" RightClick="{controller.RightClick}"/>
and is handled by the application controller, which does nothing more than request that the active document controller show the context menu.
protected void RightClick(int x, int y) { ActiveDocumentController.ShowContextMenu(x, y); }
This request is passed to the controller's view (I don't expose the View property to other classes, so we always have to go through this step, because I don't want controllers to talk to views of other controllers):
public class NotecardController ... { ... public void ShowContextMenu(int x, int y) { View.ShowContextMenu(new Point(x, y)); } ... }
And in the view, the coordinate is tested. This requires converting the client coordinate of the application's active control to a screen coordinate, then comparing the screen coordinate with the screen coordinate of the notecard window, which for the moment is rather kludgy (the Parent.Parent.Parent thing):
public void ShowContextMenu(Point p) { // Determine whether the mouse click occurred on the this control: // The point is relative to the control that currently has focus. ApplicationFormView app = (ApplicationFormView)Parent.Parent.Parent; Control activeCtrl = (Control)((ApplicationFormView)Parent.Parent.Parent).DockPanel.ActiveContent; // app.ActiveControl; // Convert to a screen point relative to the active control where the right-click occurred. Point screenPoint = activeCtrl.PointToScreen(p); // Get the screen location for this view. Point viewUpperLeft = PointToScreen(new Point(0, 0)); Rectangle viewRect = new Rectangle(viewUpperLeft, Size); if (viewRect.Contains(screenPoint)) { BrowserContextMenu.Show(PointToScreen(p)); } }
This is quite a bit of work to get the desired behavior, can probably be all ripped out if I were to use a different browser control, and needs cleanup because of the hard-coded dependency on the UI object graph. However, it works, and that's what matters at the moment.
DockPanelSuite - Decoupling Content From Container


WikiLeaks<EMAIL_ADDRESS>leaked emails, 2009 mail archive
This message is part of a particular mailbox provided at WikiLeaks
and it should be discussed here.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
countering Infiltrators
- To<EMAIL_ADDRESS>- Subject: countering Infiltrators
- From: Aryan Research<EMAIL_ADDRESS>- Date: Wed, 21 Nov 2007 05:23:46 -0800 (PST)
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-ID; b=dxCsItuAy037NTNVJF04hoP3a9jHQ7riGIq70aD7IdDK3+n0cwcpux3C0v83W0ac4Ic9qPdrxHLXXiz19CY8snbidQKo+zGuja+aBZlHsjuxnLSQnjOtYf2RlYAfOABZ7AZDgjJ7k1t2yUGY80GNhcFGC1MTQmOqz0HknTkrtr8=;
TO: Colonel Rich
Greetings!
Pastor Lance has been working with Nate & we had a meeting on Sunday. He's going to have some A/N T-shirts made & is workin on Pamphlets to pass out
Since Colonel Rick is not active at this moment, I'll step up to the plate & concentrate on Counter-infiltration west of the Mississippi...
No doubt the enemy has another Gletty in preperation!
Respectfully,
Bob
Be a better sports nut! Let your teams follow you
with Yahoo Mobile. Try it now.
Entry for this page on WikiLeaks |
Discussion page on WikiLeaks |
wikileaks.org
Date Index |
Thread Index |
Author Index


Mixnode Id:
Test Disconnect from Gateway Reconnect to Gateway Terminate worker
Test a mixnode by entering the mixnode id above and click the Test button


Preparation time
overnight
Cooking time
10 to 30 mins
Serves
Serves 4
Andrew Turner uses the spherification technique made famous by El Bulli chef Ferran Adrià.
For the alginate bath, blend the bottled mineral water and algin powder in a food processor for 5-10 minutes, or until well combined.
Strain the mixture through a fine sieve, then pour the strained liquid into a large baking tray a least 5cm/2in deep. Chill in the fridge for 24 hours (this removes the air from the liquid).
Meanwhile, for the brioche, bring the cream, cinnamon, cloves and star anise to the boil in a pan. Remove from the heat and set aside to cool.
When the cream mixture has cooled, discard the cinnamon, cloves and star anise. Whisk the cream into the beaten egg. Add the sugar and whisk again until well combined. Submerge the brioche discs into the egg mixture to soak, then chill, covered, in the fridge overnight.
For the mango 'egg', add the gluco powder to the mango purée. Blend in a food processor until well combined, then transfer to a clean bowl. Cover and chill in the fridge overnight.
Using a small spoon or teaspoon, scoop four small portions of the chilled mango purée from the mixture and roll into balls, using your hands, or two teaspoons.
When all of the mango balls have been prepared, remove the alginate bath from the fridge. Carefully lower the balls of mango purée into the alginate mixture, leave for 30 seconds, or until a skin forms on the outside of the balls, then remove from the liquid using a slotted spoon and transfer to a bowl of water (this will rinse any remaining alginate off the egg).

Drain the 'yolks' from the water and return them to the alginate mixture, resting one on top of each ball of Greek-style yoghurt, in the centre to resemble a fried egg. Leave for 30 seconds, or until a skin forms on the 'egg'.
Remove from the alginate mixture using a slotted spoon and transfer to a fresh bowl of clean water (this will rinse any remaining alginate off the egg).
When ready to eat, heat the vegetable oil in a non-stick frying pan over a medium heat. Add the soaked brioche discs to the pan and fry for 2-3 minutes on each side, or until golden-brown on both sides. Add the butter and icing sugar to the pan and continue to cook the brioche until the butter has melted, the icing sugar has dissolved and the brioche discs are caramelised.
To serve, paint a smear of mango purée across the centre of each of four serving plates. Place one brioche disc into the centre of each plate. Place a mango 'egg' on top of each brioche disc. Garnish with a sprinkling of crackle crystals, if using.


Home
About Me
Projects
Blog
Contact
Projects
For Github, check out :
List of projects I've worked on:
DevBootcamp Cheat Sheet


Emotesets
Fetching emotesets whenever they are updated can be relatively simple. We might use this if we were listing available emoticons and always want to keep them up to date.
Add a quick extension that watches for a change and fetches the new emotes from get emoticons by set.
twitch.chat.on('USERSTATE', checkEmotesets);
twitch.chat.on('GLOBALUSERSTATE', checkEmotesets);
let lastEmotesets;
async function checkEmotesets (msg) {
// look for new emotesets
if (!Array.isArray(msg.tags.emoteSets)) {
return;
}
const emotesets = msg.tags.emoteSets.join(',');
// emotesets haven't changed
if (lastEmotesets === emotesets) {
return;
}
lastEmotesets = emotesets;
// fetch
const result = await twitch.api.kraken('/chat/emoticon_images', {
data: { emotesets }
});
// emit result
handleEmotesets(result.emoticonSets);
}
function handleEmotesets (emoticonSets) {
// updated emotes arrived!
}
Tip: Emote urls are https://static-cdn.jtvnw.net/emoticons/v1/${id}/1.0
where ${id}
is your character code id.


|
qml-ar
|
In this file different compile options are defined. More...
Go to the source code of this file.
Macros | |
| #define | ENABLE_DEBUG_OUTPUT |
| Enables TimeLogger. | |
| #define | TimeLoggerThroughput(...) {} |
| printf-like syntax, enabled only if PROFILE_PIPELINE_THROUGHPUT is defined More... | |
| #define | TimeLoggerLatency(...) {} |
| printf-like syntax, enabled only if PROFILE_PIPELINE_LATENCY is defined More... | |
In this file different compile options are defined.
| #define TimeLoggerLatency | ( | ... | ) | {} |
printf-like syntax, enabled only if PROFILE_PIPELINE_LATENCY is defined
| #define TimeLoggerThroughput | ( | ... | ) | {} |
printf-like syntax, enabled only if PROFILE_PIPELINE_THROUGHPUT is defined


syndaemon - a program that monitors keyboard activity and disables the touchpad when the keyboard is being used.
syndaemon [-i idle-time] [-m poll-inverval] [-d] [-p pid-file] [-t] [-k] [-K] [-R]
Disabling the touchpad while typing avoids unwanted movements of the pointer that could lead to giving focus to the wrong window.
-i <idle-time> How many seconds to wait after the last key press before enabling the touchpad.
(default is 2.0s).
-m <poll-interval> How many milliseconds to wait between two polling intervals. If this value is too low, it will cause unnecessary wake-ups. If this value is too high, some key presses (press and release happen between two intervals) may not be noticed. This switch has no effect when running with -R.
Default is 200ms.
-d Start as a daemon, ie in the background.
-p <pid-file> Create a pid file with the specified filename.
A pid file will only be created if the program is started in daemon mode.
-t Only disable tapping and scrolling, not mouse movements, in response to keyboard activity.
-k Ignore modifier keys when monitoring keyboard activity.
-K Like -k but also ignore Modifier+Key combos.
-R Use the XRecord extension for detecting keyboard activity instead of polling the keyboard state.
DISPLAY Specifies the X server to contact.
If syndaemon exists with a return code other than 0, the error encountered is as below.
Exit code 1 Invalid commandline argument.
Exit code 2 The connection to the X sever could not be established or no touchpad device could be found.
Exit code 3 The fork into daemon mode failed or the pid file could not be created.
Exit code 4 XRECORD requested but not available or usable on the server.
It doesn't make much sense to connect to a remote X server, because the daemon will then monitor the remote server for keyboard activity, but will disable the touchpad on the local machine.
Peter Osterlund<EMAIL_ADDRESS>This man page was written by Mattia Dongili<EMAIL_ADDRESS>Xorg(1), synclient(1), synaptics(4) CAVEATS
AUTHORS
SEE ALSO


Buy a Playlist!
To buy a playlist or just donate to your organization of choice please fill out this google form! Every little bit helps.
To buy a playlist or just donate to your organization of choice please fill out this google form! Every little bit helps.


This year at Warped Tour there were a few bands I liked, not many (like usual) but a few. My favorite band, Thursday, to see them sober would have been amazing, but watching them on 2c-i was incredible.
The day began when we woke up at around 8am, grabbed some breakfast, and started driving from the Philly suburbs to Camden, NJ for Warped Tour. I was driving there and back (car packed with a bunch of my friends) and I knew that 2c-i was my best bet since it was short acting, and MDMA would have been fun, but the weather was in the 100's, with high humidity, so obviously MDMA would have been a poor choice.
At around 11:30 I dose around 16mg of 2c-i, as 20mg is a fun dose for me, but would have been way too much stimulation. We grab $4 waters/powerades and start heading around listening to bands. It's around 1pm by now and we're sitting inside relaxing away from the hot sun listening to some bands and I start feeling my eyes dilate like I always do, and that feeling you have smoking a cig when tripping. My first test is spitting, which, whenever I do while tripping, I see the tracer fly right with the spit, almost looking like it splashes with the spit when it hits the ground. I start looking around and notice the vivid green coloring of everything I always see when I do 2c-i, all the rows of chairs are so incredible looking for some reason, I'm very interested in my vision enhancement as well. I feel as if I can see better then 20/20 vision, and it's a great time to start tripping.
At this point I'm sitting in the middle of all my friends, and I get this out of place feeling, like I don't belong, and everyone kind of zones out from me and I feel as if everyone is talking behind my back, but I quickly relinquish these feelings and go back to looking at my surroundings. I notice the rafters are swaying a bit from the wind, and I quickly realize how lucky we are to have a breeze since it was so damn hot out.
I take off my shirt and end up keeping it off all day (bad idea, some sun burn, but I'll live). We walk inside to get some food, and I have a lot of trouble deciding if I want to eat, and what I want to eat if I'm even hungry. We wait in line for what seems like 20 minutes, and then once at the front, it seems to take even longer to be served. I end up getting a slice of domino's pizza for $3.50 (what a bargin!) and a iced tea for $4.00. Money is no object today, I ended up spending around $50 on drinks, but it was worth it to keep myself from passing out.
We finish our food while walking and start heading to see some bands outside playing. We get in line to meet the band Thursday, having nothing to get signed, only wanting a picture. So a friend of mine goes up on the side of the long line and snaps a few pictures of the band and we get out of the line. We're now just standing around, waiting for the next band to play, I would love to tell you what bands were listened to while waiting, but I honestly would have to call someone up and ask them. But 3:00 finally rolls around and it's time to go watch Thursday play (basically the whole reason we went to Warped Tour).
We're really close to the stage, probably 5 feet away from fence seperating the crowd from the stage, and about 10 feet away from the stage itself. It's a half hour until the band comes on, but we're willing to wait. The crowd quickly builds, and a group of people next to us are hitting a bowl, I have a strong urge to ask them for a few hits, since I didn't bring any bud with me, but end up resisting, because well, I know I'd want more then one or two hits.
 Everyone is being hit with plastic bottles, literally every couple seconds BAMB hit in the head with a bottle. They gave out free condoms when you walked in, and of course everyone is messing around with those too. But the damn bottles are the worry of the moment, and for the next half hour we are getting hit in the head repeatidly.
FINALLY the band comes out, and the second the music starts everyone rushes the stage.
CHAOS!!!
What seems like thousands and thousands of people all huddle closely together, I have no shirt on, and I have people just all over me. Mash pitts start on either side of me, and I decide to join in a bit, but quickly realize I can barley move because I'm surrounded by people thinking it's cool to run around and punch people in the face and such.
The pitts quickly subside a bit, and everyone decides to rush the stage again, and once the people in the front hit the fence, they push off, and theres basically a huge rebound effect, and you're squished between tons of people. Somehow I manage to stay near everyone, almost losing them several times. My friends girlfriend is very tiny, and she falls several times, almost (in my mind) losing her life, because if she was trampled on, no one would have noticed sadly.
After the 3rd song, I'm just not even supporting my body anymore, I'm feeling like I'm going to pass out, my hands are extremely white and wrinkled from all the sweat/drinks all over me. My hair is covered in probably 5 different drinks and what seems like hundreds of peoples sweat, but I don't really care. I literally let my body fall into the hands of the surrounding people, and they are the only thing holding me up. One of my friends notices I'm not looking too good and decides it times we head towards the back and grab some drinks. I start to loose him and his girlfriend but his girlfriend quickly grabs my shirt and basically drags me along with them. It's amazing how fast people let you out when theres a hot chick who needs to get out.
We leave the rest of our group since we have been seperated from them, I feel horrible at first thinking that something bad might have happened to them.
I'm sitting down now, still listening to Thursday, I mean I did come mainly to see them, so there was no way I was going to ditch out on watching the rest of the show (even though I felt horrible).
The show was amazing, and the music sounded great. Thursday is one of those bands that sounds great live, basically exactly the same as they do on cd. The show ends and we are trying to figure out where everyone else is. After calling them all several times we decide to go inside and cool off (air conditioning in the one area) and look for them in there. Avenged Sevenfold is playing in the indoor area (the back is open though, like I said earlier the wind just blows right in and it feels great) and we decide if we can't find them soon we're going to sit down and watch the show, since it's pointless to try and look through thousands of people. Low and behold they're all sitting together watching and we regroup and all sit down and talk about the amazing show we just watched. Everyone grabs drinks and we sit down for what seems like an hour, and I'm definitely not feeling too trippy anymore, but I know I had a great time, and this experience will be very hard to match.
We spend the rest of the day relaxing when we can, walking around listeing to some new bands as well as some others we liked. At around 7pm we head home and amazingly we get home very fast. The day had went fast itself, and it was an amazing time, I had hung out with a lot of my old best friends I hadn't seen in a while, watching my favorite band play while on 2c-i 'my visual enhancer', and had survived what seemed to be the impossible - the killer/humid heat. We spent the rest of the night swimming at one of my friends houses, and getting wasted while playing cards. It was an amazing night, no hangovers, easy sleep (probably from the alcohol), and a time I will look back on for a while and not forget.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Either we cannot establish a connection to your computer or our website is experiencing too much traffic. This is totally not your fault, but your best bet is to try loading this page again in a few minutes.


Engineer's Hub is a New Revolutionary Platform that will help Students to Excel in various fields like IT Technology,Coding etc
Students can learn New Trending Courses & can participate in Daily Coding Challenges given by our Professionals.
Join Our Engineer's Hub Community for more Exciting Opportunities & Learnings.


ml in medicine
Contents
some rough notes on ml in medicine
1.8. ml in medicine#
1.8.1. datasets#
-
mimic-iv
mimic-iv-benchmark (xie…liu, 2022)
3 tabular datasets derived from MIMIC-IV ED EHR
hospitalization (versus discharged) - met with an inpatient care site admission immediately following an ED visit
critical - inpatient portality / transfer to an ICU within 12 hours
reattendance - patient’s return visit to ED within 72 hours
preprocessing for outliers / missing values (extended descriptions of variables here)
patient history
past ed visits, hospitalizations, icu admissions, comorbidities
ICD codes give patients comorbidities (CCI charlson comorbitidy index, ECI elixhauser comorbidity index)
info at triage
temp., heart rate, pain scale, ESI, …
Emergency severity index (ESI) - 5-level triage system assigned by nurse based on clinical judgments (1 is highest priority)
top 10 chief complaints
No neurological features (e.g. GCS)
info before discharge
vitalsigns
edstays
medication prescription
NLP
MedNLI - NLI task grounded in patient history (romanov & shivade, 2018)
derived from Mimic, but expertly annotated
i2b2 named entity recognition tasks
i2b2 2006, 2010, 2012, 2014
<IP_ADDRESS>. ucsf de-id data#
black-box
predict postoperative delirium prediction (bishara, …, donovan, 2022)
intrepretable
predict multiple sceloris by incorporating domain knowledge into biomedical knowledge graph (nelson, …, baranzini, 2022)
predict mayo endoscopic subscores from colonoscopy reports (silverman, …, 2022)
3 types
disease and patient categorization (e.g. classification)
fundamental biological study
treatment of patients
philosophy
want to focus on problems doctors can’t do
alternatively, focus on automating problems parents can do to screen people at home in cost-effective way
pathology - branch of medicine where you take some tissue from a patient (e.g. tumor), look at it under a microscope, and make an assesment of what the disease is
websites are often easier than apps for patients
The clinical artificial intelligence department: a prerequisite for success (cosgriff et al. 2020) - we need designated departments for clinical ai so we don’t have to rely on 3rd-party vendors and can test for things like distr. shift
challenges in ai healthcare (news)
adversarial examples
things can’t be de-identified
algorithms / data can be biased
correlation / causation get confused
healthcare is 20% of US GDP
prognosis is a guess as to the outcome of treatment
diagnosis is actually identifying the problem and giving it a name, such as depression or obsessive-compulsive disorder
AI is a technology, but it’s not a product
health economics incentives align with health incentives: catching tumor early is cheaper for hospitals
<IP_ADDRESS>. high-level#
focus on building something you want to deploy
clinically useful - more efficient, cutting costs?
effective - does it improve the current baseline
focused on patient care - what are the unintended consequences
need to think a lot about regulation
USA: FDA
Europe: CE (more convoluted)
intended use
very specific and well-defined
<IP_ADDRESS>. criticisms#
Dissecting racial bias in an algorithm used to manage the health of populations (obermeyer et al. 2019)
1.8.2. medical system#
<IP_ADDRESS>. evaluation#
doctors are evaluated infrequently (and things like personal traits are often included)
US has pretty good care but it is expensive per patient
expensive things (e.g. Da Vinci robot)
even if ml is not perfect, it may still outperform some doctors
The impact of inconsistent human annotations on AI driven clinical decision making (sylolypavan…sim, 2023) - labels / majority vote are often very inconsistent
<IP_ADDRESS>. medical education#
rarely textbooks (often just slides)
1-2% miss rate for diagnosis can be seen as acceptable
-
2 years: memorizing facts about physiology, pharmacology, and pathology
2 years learning practical applications for this knowledge, such as how to decipher an EKG and how to determine the appropriate dose of insulin for a diabetic
little emphasis on metal logic for making a correct diagnosis and avoiding mistakes
see work by pat croskerry
there is limited data on misdiagnosis rates
representativeness error - thinking is overly influenced by what is typically true
availability error - tendency to judge the likelihood of an event by the ease with which relevant examples come to mind
common infections tend to occur in epidemics, afflicting large numbers of people in a single community at the same time
confirmation bias
affective error - decisions based on what we wish were true (e.g. caring too much about patient)
See one, do one, teach one - teaching axiom
<IP_ADDRESS>. political elements#
big pharma
day-to-day
Doctors now face a burnout epidemic: thirty-five per cent of them show signs of high depersonalization
according to one recent report, only thirteen per cent of a physician’s day, on average, is spent on doctor-patient interaction
study during an average, eleven-hour workday, six hours are spent at the keyboard, maintaining electronic health records.
medicare’s r.v.u - changes how doctors are reimbursed, emphasising procedural over cognitive things
ai could help - make simple diagnoses faster, reduce paperwork, help patients manage their own diseases like diabetes
ai could also make things worse - hospitals are mostly run by business people
1.8.3. medical communication#
<IP_ADDRESS>. “how do doctors think?”#
easy to misinterpret things to be causal
often no intuition for even relatively simple engineered features, such as averages
doctors require context for features (e.g. this feature is larger than the average)
often have some rules memorized (otherwise memorize what needs to be looked up)
unclear how well doctors follow rules
some rules are 1-way (e.g. only follow it if it says there is danger, otherwise use your best judgement)
2-way rules are better
without proper education 1-way rules can be dangerously used as 2-way rules
doesn’t make sense to judge 1-way rules on both sepcificity and sensitivity
rules are often ambiguous (e.g. what constitutes vomiting)
doctors adapt to personal experience - may be unfair to evaluate them on larger dataset
sometimes said that doctors know 10 medications by heart
Overconfidence in Clinical Decision Making (croskerry 2008)
most uncertainty: family medicine [FM] and emergency medicine [EM]
some uncertainty: internal medicine
little uncertainty: specialty disciplines
2 systems at work: intuitive (uses context, heuristics) vs analytic (systematic, rule-based)
a combination of both performs best
doctors are often black boxes as well - validated infrequently, unclear how closely they follow rules
doctors adapt to local conditions - should be evaluated only on local dataset
potential liabilities for physicians using ai (price et al. 2019)
What’s the trouble. How doctors think. New Yorker. 2007
[TRIPOD 22 points paper](https://www.tripod-statement.org/Portals/0/Tripod Checklist Prediction Model Development and Validation PDF.pdf)
How to Read Articles That Use Machine Learning: Users’ Guides to the Medical Literature (liu et al. 2019
Carmelli et al. 2018 - primer for CDRs but also a good example of what sort of article I have envisioned creating.
Looking through the retrospectoscope: reducing bias in emergency medicine chart review studies. (kaji et al. 2018)
<IP_ADDRESS>. communicating findings#
internal/external validity = training/testing error
model -> fitted model
retrospective (more confounding, looks back) vs prospective study
internal/external validity = train/test (although external was usually using different patient population, so is stronger)
specificity/sensitivity = precision/recall
1.8.4. examples#
<IP_ADDRESS>. succesful examples of ai in medicine#
ECG (NEJM, 1991)
EKG has a small interpretation on it
there used to be bayesian networks / expert systems but they went away…
<IP_ADDRESS>. icu interpretability example#
goal: explain the model not the patient (that is the doctor’s job)
want to know interactions between features
some features are difficult to understand
e.g. max over this window, might seem high to a doctor unless they think about it
some features don’t really make sense to change (e.g. was this thing measured)
doctors like to see trends - patient health changes over time and must include history
feature importance under intervention
<IP_ADDRESS>. high-performance ai studies#
chest-xray: chexnet
echocardiograms: madani, ali, et al. 2018
skin: esteva, andre, et al. 2017
pathology: campanella, gabriele, et al.. 2019
mammogram: kerlikowske, karla, et al. 2018
1.8.5. medical imaging#
Medical Imaging and Machine Learning
medical images often have multiple channels / are 3d - closer to video than images
1.8.6. improving medical studies#
Machine learning methods for developing precision treatment rules with observational data (Kessler et al. 2019)
goal: find precision treatment rules
problem: need large sample sizes but can’t obtain them in RCTs
recommendations
screen important predictors using large observational medical records rather than RCTs
important to do matching / weighting to account for bias in treatment assignments
alternatively, can look for natural experiment / instrumental variable / discontinuity analysis
has many benefits
modeling: should use ensemble methods rather than individual models


Curriculum Builder
Quest Title
Activate prior knowledge (Scientist Prep)
Learning Video
Activity Steps
Field Notes
Assessment Questions
Assessment Rubric
Learning Modalities (Check all that apply)
Observation
Build
Report
Design
Helpful Advice
Materials Needed
Key Images
Badge(s) Awarded
Recommended Age Range
to
Time Allotted
Hours
Days
Subject Areas
Chemistry
Physics
Biology
Astronomy
Geology
Health Science
Engineering
Other
Next Generation Science Standards Fulfillment
Physical Sciences
-PS1A: Structure and Properties of Matter
-PS1B: Chemical Reactions
-PS1C: Nuclear Processes
-PS2A: Forces and Motion
-PS2B: Types of Interactions
-PS3A: Definitions of Energy
-PS3B: Conservation of Energy and Energy Transfer
-PS3C: Relationship Between Energy and Forces
-PS3D: Energy in Chemical Processes and Everyday Life
-PS4A: Wave Properties
-PS4B: Electromagnetic Radiation
-PS4C: Information Technologies and Instrumentation
Life Sciences
-LS1A: Structure and Function
-LS1B: Growth and Development of Organisms
-LS1C: Organization for Matter and Energy Flow in Organisms
-LS1D: Information Processing
-LS2A: Interdependent Relationships in Ecosystems
-LS2B: Cycles of Matter and Energy Transfer in Ecosystems
-LS2C: Ecosystems Dynamics, Functioning and Resilience
-LS2D: Social Interactions and Group Behavior
-LS3A: Inheritance of Traits
-LS3B: Variation of Traits
-LS4A: Evidence of Common Ancestry and Diversity
-LS4B: Natural Selection
-LS4C: Adaptation
-LS4D: Biodiversity and Humans
Earth and Space Sciences
-ESS1A: The Universe and its Stars
-ESS1B: Earth and the Solar System
-ESS1C: The History of Planet Earth
-ESS2A: Earth Materials and Systems
-ESS2B: Plate Tectonics and Large-Scale Systems
-ESS2C: The Role of Water in Earth's Surface Processes
-ESS2D: Weather and Climate
-ESS2E: Biogeology
-ESS3A: Natural Resources
-ESS3B: Natural Hazards
-ESS3C: Human Impacts on Earth Systems
-ESS3D: Global Climate Change
Engineering, Technology, and Applications of Science
-ETS1A: Defining and Delimiting and Engineering Problem
-ETS1B: Developing Possible Solutions
-ETS1C: Optimizing the Design Solution
Save


21 Haywood Crowder (USA)
12 Jul 2013 8:14.43 Anaheim CA/USA
Run For Fun
18 May 2013 6:59:50 Dove Canyon CA/USA
Running Dove Canyon
12 May 2013 6:51:38 Long Beach CA/USA
Runnin with Mom
04 May 2013 7:28:30 Huntington Beach CA/USA
Blastin the Beach
27 Apr 2013 7:29:44 CA/USA
Runnin the Trail
19 Apr 2013 7:28:45 Anaheim CA/USA
Just Can't Get Enough
14 Apr 2013 7:19:08 Long Beach CA/USA
Back to the Beach
07 Apr 2013 7:58:23 Dove Canyon CA/USA
Run the Dove
06 Apr 2013 7:13:20 CA/USA
Spring Fling
31 Mar 2013 7:22:13 Lake Forest CA/USA
Hoppin Easter
30 Mar 2013 8:14:32 Riverside CA/USA
Blaze the Canyon
17 Feb 2013 7:29:40 Lake Forest CA/USA
Rockin the Path
16 Feb 2013 7:11:13 Long Beach CA/USA
Hugs and Kisses
02 Feb 2013 7:14:43 Riverside CA/USA
Rock the Canal
12 Jan 2013 6:52:21 CA/USA
Beach Bonanza
05 Jan 2013 6:42:12 Riverside CA/USA
Run the New Year Trail
22 Dec 2012 6:19:40 Huntington Beach CA/USA
Run the Park
24 Nov 2012 6:58:03 CA/USA
Thanksgiving Weekend
03 Nov 2012 6:31:54 Dockweiler CA/USA
Cruise the Coast
14 Jul 2012 7:42:10 Huntington Beach CA/USA
Run in the Park
16 Jun 2012 7:14:08 Fullerton CA/USA
Running with Charlie
Last Updated on 18 Jul 2013


Select Role
Importer Bank
Exporter Bank
Importer
Exporter
Shipping Company
Insurance Company
Sign In


Interface IPhoneControllerApiSync
Represents a collection of functions to interact with the API endpoints
Inherited Members
Namespace: mailslurp.Api
Assembly: mailslurp.dll
Syntax
public interface IPhoneControllerApiSync : IApiAccessor
Methods
View SourceCreateEmergencyAddress(CreateEmergencyAddressOptions, int)
Declaration
EmergencyAddress CreateEmergencyAddress(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| CreateEmergencyAddressOptions | createEmergencyAddressOptions | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| EmergencyAddress | EmergencyAddress |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
CreateEmergencyAddressWithHttpInfo(CreateEmergencyAddressOptions, int)
Declaration
ApiResponse<EmergencyAddress> CreateEmergencyAddressWithHttpInfo(CreateEmergencyAddressOptions createEmergencyAddressOptions, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| CreateEmergencyAddressOptions | createEmergencyAddressOptions | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<EmergencyAddress> | ApiResponse of EmergencyAddress |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
DeleteEmergencyAddress(Guid, int)
Declaration
EmptyResponseDto DeleteEmergencyAddress(Guid addressId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | addressId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| EmptyResponseDto | EmptyResponseDto |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
DeleteEmergencyAddressWithHttpInfo(Guid, int)
Declaration
ApiResponse<EmptyResponseDto> DeleteEmergencyAddressWithHttpInfo(Guid addressId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | addressId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<EmptyResponseDto> | ApiResponse of EmptyResponseDto |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
DeletePhoneNumber(Guid, int)
Declaration
void DeletePhoneNumber(Guid phoneNumberId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | phoneNumberId | |
| int | operationIndex | Index associated with the operation. |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
DeletePhoneNumberWithHttpInfo(Guid, int)
Declaration
ApiResponse<object> DeletePhoneNumberWithHttpInfo(Guid phoneNumberId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | phoneNumberId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<object> | ApiResponse of Object(void) |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetEmergencyAddress(Guid, int)
Declaration
EmergencyAddress GetEmergencyAddress(Guid addressId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | addressId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| EmergencyAddress | EmergencyAddress |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetEmergencyAddresses(int)
Declaration
List<EmergencyAddressDto> GetEmergencyAddresses(int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| List<EmergencyAddressDto> | List<EmergencyAddressDto> |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetEmergencyAddressesWithHttpInfo(int)
Declaration
ApiResponse<List<EmergencyAddressDto>> GetEmergencyAddressesWithHttpInfo(int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<List<EmergencyAddressDto>> | ApiResponse of List<EmergencyAddressDto> |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetEmergencyAddressWithHttpInfo(Guid, int)
Declaration
ApiResponse<EmergencyAddress> GetEmergencyAddressWithHttpInfo(Guid addressId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | addressId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<EmergencyAddress> | ApiResponse of EmergencyAddress |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetPhoneNumber(Guid, int)
Declaration
PhoneNumberDto GetPhoneNumber(Guid phoneNumberId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | phoneNumberId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| PhoneNumberDto | PhoneNumberDto |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetPhoneNumbers(string, int?, int?, string, DateTime?, DateTime?, int)
Declaration
PagePhoneNumberProjection GetPhoneNumbers(string phoneCountry = null, int? page = null, int? size = null, string sort = null, DateTime? since = null, DateTime? before = null, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| string | phoneCountry | Optional phone country (optional) |
| int? | page | Optional page index for list pagination (optional, default to 0) |
| int? | size | Optional page size for list pagination (optional, default to 20) |
| string | sort | Optional createdAt sort direction ASC or DESC (optional, default to ASC) |
| DateTime? | since | Filter by created at after the given timestamp (optional) |
| DateTime? | before | Filter by created at before the given timestamp (optional) |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| PagePhoneNumberProjection | PagePhoneNumberProjection |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetPhoneNumbersWithHttpInfo(string, int?, int?, string, DateTime?, DateTime?, int)
Declaration
ApiResponse<PagePhoneNumberProjection> GetPhoneNumbersWithHttpInfo(string phoneCountry = null, int? page = null, int? size = null, string sort = null, DateTime? since = null, DateTime? before = null, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| string | phoneCountry | Optional phone country (optional) |
| int? | page | Optional page index for list pagination (optional, default to 0) |
| int? | size | Optional page size for list pagination (optional, default to 20) |
| string | sort | Optional createdAt sort direction ASC or DESC (optional, default to ASC) |
| DateTime? | since | Filter by created at after the given timestamp (optional) |
| DateTime? | before | Filter by created at before the given timestamp (optional) |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<PagePhoneNumberProjection> | ApiResponse of PagePhoneNumberProjection |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetPhoneNumberWithHttpInfo(Guid, int)
Declaration
ApiResponse<PhoneNumberDto> GetPhoneNumberWithHttpInfo(Guid phoneNumberId, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | phoneNumberId | |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<PhoneNumberDto> | ApiResponse of PhoneNumberDto |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetPhonePlans(int)
Declaration
List<PhonePlanDto> GetPhonePlans(int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| List<PhonePlanDto> | List<PhonePlanDto> |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
GetPhonePlansWithHttpInfo(int)
Declaration
ApiResponse<List<PhonePlanDto>> GetPhonePlansWithHttpInfo(int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<List<PhonePlanDto>> | ApiResponse of List<PhonePlanDto> |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
TestPhoneNumberSendSms(Guid, TestPhoneNumberOptions, string, int)
Declaration
void TestPhoneNumberSendSms(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = null, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | phoneNumberId | |
| TestPhoneNumberOptions | testPhoneNumberOptions | |
| string | xTestId | (optional) |
| int | operationIndex | Index associated with the operation. |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |
TestPhoneNumberSendSmsWithHttpInfo(Guid, TestPhoneNumberOptions, string, int)
Declaration
ApiResponse<object> TestPhoneNumberSendSmsWithHttpInfo(Guid phoneNumberId, TestPhoneNumberOptions testPhoneNumberOptions, string xTestId = null, int operationIndex = 0)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | phoneNumberId | |
| TestPhoneNumberOptions | testPhoneNumberOptions | |
| string | xTestId | (optional) |
| int | operationIndex | Index associated with the operation. |
Returns
| Type | Description |
|---|---|
| ApiResponse<object> | ApiResponse of Object(void) |
Exceptions
| Type | Condition |
|---|---|
| ApiException | Thrown when fails to make API call |


Britany's Blog
Work in Progress
Future home of the ramblings from a working mother and woman in code.
- April -
Intro to Functional Programming


Crufts' presenter Peter Purves 'shocked & hurt' after Crufts axe after 41 years
by Tilly PearcePeter Purves has claimed that he was a victim of ageism after he was axed from commentating Crufts for Channel 4 after 41 years.
The 80-year-old TV host appeared on Good Morning Britain to discuss his sudden dismissal from his role, saying he was ‘stunned’ when he was told he was ‘surplus to requirements’.
He told Piers Morgan and Susanna Reid: ‘There hadn’t been a hint about it. This would be my 42nd year at the show. I just feel it’s part of my life, I was very shocked, I was very hurt.’
‘I did ask for the reasons in writing,’ he revealed. ‘I got them, and there wasn’t a reason.
‘It was just, “We’re always refreshing the show”. Basically, sorry, one in one out, we’re bringing someone else in, you’re out.’
Peter, whose legendary time on telly started with kids TV show mainstay Blue Peter, then said that he believed that it was a ‘code for ageism’ and knew Channel 4 wanted to keep age of on-screen talent down.
‘I know that that was said, I can’t prove it, no one has written it down to me, but I know it,’ he said. ‘So that has been said. Channel 4 want a younger presentation team, so I had to go.’
‘The one thing that hurt me quite a lot was, “We want to bring in someone else to sit beside the expert team”,’ Peter said.
‘So I’m not part of the expert team? 41 years doesn’t make you an expert?’
‘I don’t believe because you reach a certain age your talent, your skill, whatever it is, whatever I have, it may not be good, but whatever I have should not just be dismissed for my age,’ he added.
‘I’ve been part of that show for a long, long time so that’s what’s very hard to break the feeling of.
‘There’s a void. I hope it doesn’t affect other work, it may, but I hope it doesn’t.’
When approached by Metro.co.uk, a spokesperson for Kennel Club, who runs Crufts, said: “Channel 4 takes its own independent editorial decisions for its programmes.
‘Peter is and will remain a great friend of the Kennel Club and Crufts, and we are delighted that he will be presenting the 2020 Best in Show trophy.’
Metro.co.uk has also contacted Channel 4 for comment.
On talking to Peter, Piers took particular exception to the star’s plight, and vowed to launch a campaign to get his role back.
‘I’d love to know what Clare Balding thinks about this. I know Clare, and she won’t be happy about this,’ Piers declared.
‘It’s just ageist, that’s all it is. It’s people saying we can’t have a bloke that age doing this.
‘Why? It’s only 41 years! 41 years.’
‘You were a legend of my generation,’ he continued. ‘We’re going to try and fight the good fight, Peter.
‘We’re sorry you’ve been given this horrible shock before Christmas.’
Good Morning Britain airs weekdays at 6am on ITV.
Got a showbiz story?
If you've got a celebrity story, video or pictures get in touch with the Metro.co.uk entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


Video Monitor Dashboard written in node.js/express and angular
| Time Initiated | Video ID | Video Action | Video Action time | Session ID |
|---|---|---|---|---|
| {{transaction.time | date:'medium'}} | {{transaction.videoId}} | {{transaction.action}} | {{transaction.videoTime}} | {{result._id}} |


This XHTML document does not handle fallback content in iframes.
If the video doesn't play, watch this 2013 W3Conf talk by Lea Verou called "More CSS3 Secrets" on YouTube.


camera axis views
select an axis:
viewFitFront();
// View front of scene, looking along -Z
viewFitLeft();
// View left of scene, looking along +X
viewFitBack();
// View back of scene, looking along +Z
viewFitRight();
// View right of scene, looking along -X
viewFitTop();
// View top of scene, looking down -Y
viewFitBottom();
// View bottom of scene, looking up +Y


elographics
Section: Devices and Network Interfaces (4)Updated: xf86-input-elographics 1.3.0
Index Return to Main Contents
NAME
elographics - Elographics input driverSYNOPSIS
Section N'34'InputDeviceN'34'Identifier N'34'idevnameN'34'
Driver N'34'elographicsN'34'
Option N'34'DeviceN'34' N'34'devpathN'34'
...
EndSection
DESCRIPTION
elographics is an Xorg input driver for Elographics touchscreen devices.The elographics driver functions as a pointer input device, and may be used as the X server's core pointer.
SUPPORTED HARDWARE
E271-2210 and E271-2200 devices are supported. E281-2310 and compatible devices are supported with some features unavailable.CONFIGURATION DETAILS
Please refer to xorg.conf(5) for general configuration details and for options that can be used with all input drivers. This section only covers configuration details specific to this driver.The following driver options are supported:
- Option N'34'DeviceN'34' N'34'stringN'34'
- The device that is attached to the touchscreen interface. Default is "/dev/ttyS1".
- Option N'34'DeviceNameN'34' N'34'stringN'34'
- Set the X11 device name for the touchscreen. Default is "TOUCHSCREEN".
- Option N'34'MinXN'34' N'34'integerN'34'
- Set the minimum value for the touchscreen X axis. Default is 600.
- Option N'34'MaxXN'34' N'34'integerN'34'
- Set the maximum value for the touchscreen X axis. Default is 3000.
- Option N'34'MinYN'34' N'34'integerN'34'
- Set the minimum value for the touchscreen Y axis. Default is 600.
- Option N'34'MaxYN'34' N'34'integerN'34'
- Set the maximum value for the touchscreen Y axis. Default is 3000.
- Option N'34'ScreenNoN'34' N'34'integerN'34'
- The screen to attach to the touchscreen when running with multiple screens. Default is screen 0.
- Option N'34'PortraitModeN'34' N'34'stringN'34'
- Set the X/Y axis orientation. The default is "Landscape" but you can rotate clockwise ("Portrait") or counter-clockwise ("PortraitCCW").
- Option N'34'SwapXYN'34' N'34'booleanN'34'
- Swap the X and Y axis on the display. Default is false.
- Option N'34'UntouchDelayN'34' N'34'integerN'34'
- The period that finger must be released for an untouch event to occur. Default: 5 (50ms).
- Option N'34'ReportDelayN'34' N'34'integerN'34'
- Delay between report packets. Default: 1 (10ms).
- Option N'34'ModelN'34' N'34'stringN'34'
- The touchscreen model. Default: unset. Supported models: "Sunit dSeries".
SEE ALSO
Xorg(1), xorg.conf(5), Xserver(1), X(7).AUTHORS
Authors include:Patrick Lecoanet
This manpage was written by Lee Maguire on behalf of the Debian Project.
Index
This document was created by man2html, using the manual pages.
Time: 05:33:53 GMT, December 24, 2015


With HTML you can create your own Web site.
This tutorial teaches you everything about HTML.
HTML is easy to learn - You will enjoy it.
A Small HTML Document
<!DOCTYPE html>   <title>Page Title<⁄title> <⁄head>
My First Heading<⁄h1>
My first paragraph.<⁄p> <⁄body> <⁄html>
HTML is a markup language for describing web documents (web pages).


{{ HEAD }}
JavaScript as not activated
The site needs JavaScript to work. Thank you to activate it.
{{ APP }}