The following flow diagrams depict how the entire model facilitates the functionality of the web application created for our final project. As the purpose of this project was to create (add), update, delete and read tasks and users for both admins and users, each flow diagram depicts how various servlets connect to query classes and the database. These flow diagrams were vital in understanding how each aspect of our code was connected to ensure that data was not only added and updated, but also read and even deleted.
Link to view the final project's task read diagram Link to view the final project's read diagram
Link to view the final project's add task diagram Link to view the final project's add user diagram
Link to view the final project's update task diagram Link to view the final project's update user diagram
Link to view the final project's delete task diagram Link to view the final project's delete user diagram


Fifa puts Caf broadcast rights up for tender
Fifa secured a mandate from the 54 African nations to sell their rights centrally, promising to double the revenue.
Fifa said in a statement on Monday on their official website: “Fifa has opened an invitation to tender (ITT) for the centralised media rights to all matches in the second round of qualifying, as well as the third-round play-offs, which will determine the final five teams from Africa that will play at the FIFA World Cup Qatar 2022™.
“Following an agreement with all 54 member associations of Caf in August, the media rights to all African qualifiers for the Fifa World Cup Qatar 2022 are being managed under a centralised sales model by Fifa.
"The media rights will cover TV, internet, mobile and radio transmissions."
Fifa promised “new elements that will substantially improve the African qualifying competition for audiences and broadcasters alike.
“Fifa aims to make more matches available to global viewing audiences than ever before, devoting extra attention to production quality, with commentary available in French and English, a unique brand identity, and a comprehensive on-screen graphics package for the centralised feeds.
“The centralised model brings improved distribution and coverage of all matches across free-to-air, pay-TV and digital platforms, as well as a better viewer experience thanks to enhanced standard match production, with media rights revenues generated for investment directly back into African football.
“In particular, this tender process will allow Fifa to select the media companies that are best-placed to secure the required transmission commitments and to achieve the objectives of reaching the widest possible audience and providing a high-quality viewing experience for fans.”
In November Caf also cancelled their $1-billion coverage contract with French broadcast company Lagardere for the Caf Champions League, Africa Cup of Nations qualifiers and finals tournaments, and junior tournaments such as the current Under-23 Africa Cup of Nations.
This followed separate court judgments that the deal had not undergone the tender process.
The cancellation of the Lagardere contract has led to South African pay-channel SuperSport blacking out its coverage of all Caf games, including the U-23 Afcon and 2021 Nations Cup qualifiers, encompassing Bafana Bafana’s away matches.
Source: Sunday Times


Postalicious
Method
GET
POST
PUT
PATCH
DELETE
COPY
HEAD
OPTIONS
LINK
UNLINK
PURGE
LOCK
UNLOCK
PROPFIND
VIEW
Host
Query Parameters
Headers
Body
Build Request
Build & Send
REQUEST
RESPONSE


Welcome to Gator Links!
Tired of endlessly navigating to find that link? Well here it is!
All of your links in once place
.
E-Learning
E-Mail
ISIS
Schedule
of
Courses
Center
for
Undergrad Research
Gator One
Central
ACM
Swamp Hacks
UF
Software Engineering Club
Gator
ACE
Gator Dining
Hours
Financial
Aid
RecSports
Hours
Marston
Science Library
Lynda Tutorials
w3schools
D!BS/Study Room
UF Programming Team


There's a misconception about consulting that most of a consultant's job involves providing answers. While solutions are the broad deliverable and I am providing them in response to client's questions, I would never come close to the right solution without asking hours of questions. That's why when I scope a project, the Discovery phase is often twice as long as the process of actually putting together recommendations; the "problem" I need to solve is often not what has been identified to me as the problem, but trying to figure out what the real problem is. This background has been very helpful for me throughout my time at DBC so far, since it's helped me to be mindful of the possibility that what I think is the problem may actually be something else entirely. Reading the resources and their emphasis on the importance of clarity, concision, and specificity are all great, but the detail of including "what you are trying to do" is such a huge part of asking a good question. If you leave yourself open to the possibility that the code (or any tool) you are using to try to solve a problem may actually just not be suited for the job, you wind up saving yourself so much trouble in the long run. So far I've found my questions hinging much more around whether my approach is the right one, than why I can't get something to work that I'm certain should work and I've found that questions that result in dialogue and discussion among the askers and answerers to be most helpful for me to observe. Breaking people of defesiveness around a solution early and helping them be able to able to ask the kind of questions that can both elicit specific help OR a redirection if their assumptions were off-base are all extremely important; if you're too in love with the solution you're asking about to accept that it may be entirely wrong instead of partially wrong, it will be difficult to get the bigger picture and learn. The resources also did a good job of setting up the need to make yourself available to have the people who would help you ask follow up questions, exactly for these reasons. The idea of asking "the perfect question" only very infrequently ends with just one question.


{% extends "global/Page.html" %} {% load static otree %} {% block title %} Bonus Rate {% endblock %} {% block scripts %} {% endblock %} {% block content %}
Just for a moment, imagine yourself as the boss. What bonus rate do you think you would choose for your worker?:
Before you see the bonus rate chosen by your boss, please select your best guess of what your boss would have chosen. This will not have any affect on the rate which has already been chosen by your boss. You will be paid extra 5 cents if your guess is correct.
Your boss has chosen a bonus of {{group.piece_rate}} per 100 points for you;
{% if group.treatment == 'Race Salient' or group.treatment == 'Race Salient & Three Stage' %} {% endif %}Now, when you are ready click next to start working on the button-pressing task for next 10 minutes. You are free to score as many points as you can. The timer will start when you click the button below.
{% endblock %}


--- layout: archive title: Zulip Chat Archive permalink: /stream/116395-maths/topic/simplicial.20complexes.20in.20lean.html ---
Now we have simplicial complexes!
And also the singular complex
With coefficients in arbitrary \Z
-modules
See https://github.com/jcommelin/mathlib/tree/simplicial
A less magical solution:
lemma simplicial_identity₁ {X : simplicial_set} {n : ℕ} (i j : [n + 1]) (H : i ≤ j) : (@δ X n) i ∘ δ j.succ = δ j ∘ δ i.raise := begin unfold δ, rw comp, rw comp, congr' 1, exact simplex_category.simplicial_identity₁ _ _ H end
Aaah, so congr'
is what I was waiting for...
I have no idea what that does...
Uses congruence exactly once
congruence is something we wouldn't bother to state
Alas, we don't have singular homology yet. Because there are no quotient groups... only quotient modules...
x = y implies f(x) = f(y)
And although we take coeffients in \Z
-modules, we get a complex of add_comm_group
s
Because finsupp
gives me add_comm_group
, and because is_linear_map
drove me crazy...
Small tip: i
and j
should be implicit arguments because they can be inferred from H
Ok, fair enough
And this is what I did in my simplex_category.simplicial_identity₁ _ _ H
So, now begins the ugly part...
cleaning up the proof
https://github.com/jcommelin/mathlib/blob/06469f0cd7c502ec64b31ba5e6211e937a00b0e1/algebraic_topology/simplicial_set.lean#L49 certainly looks like it could use some cleaning
I cleaned up that line
I also added some user comments to the definitions
https://github.com/leanprover/mathlib/pull/144
https://gist.github.com/PatrickMassot/ef4d356b2c42e469a94f392d61cf173b
@Johan Commelin I went through your file, with random local edits
I stopped when I went below 150 lines
I hope you can learn stuff from the diff
But keep in mind these are only local edits
Thanks! I'm looking at it!
You certainly need some global thinking to get useful lemmas replacing parts of this gigantic proof
and using calc
would almost certainly make a more readable proof
One last edit spotted because VScode showed me a large area without blue marking: after line 75 of my version simpa using nat.succ_le_succ (mem_filter.mp hp).2
closes the goal
So what is the best way to get some intuition for when to try the finish
magic? Or should I just always try it?
don't use it :P
Reading the doc is a good start
Oooh, and thanks a lot for shaving of 80 lines!
Again, you can certainly shave much more, but I hope you can still learn something from this diff
Johan I have had my mind on other things today and have only just noticed this -- well done! Want to try perfectoid spaces now? :-)
@Kevin Buzzard Well, I'm not so sure what the best way forward is. (1) I need to do some paper writing on non-formal maths. (2) I would love to formalise something cool (like perfectoid spaces), but I will need a lot of help. (3) There is still a lot of scaffolding missing. module.lean
needs some love, I would like to do finitely generated groups/modules/algebras/fields. Then we can do number fields, rings of integers. Define etale morphisms of schemes. Galois theory... the list goes on and on.
So, concerning (3). Your plan is to train an army of students to do this for us.
Yes, I also do not know what the best way forward is. Here are some things that need doing.
1) I should look at your code and review it
2) Someone should look at my schemes code and review it
3) A group of people should define a perfectoid space before 1st August
I am unclear about how important it is to put those things in an appropriate order
2) Someone should look at my schemes code and review it
I could try to be that someone. But I guess that doesn't help. I can't give much feedback on the Lean... and I'm quite sure that the maths is fine (-; After all, Lean thinks its fine. So I definitely want to review it. But I guess the only one gaining something from that is myself.
1) is not very important. That can wait.
Sounds like Assia wants to look at your scheme code as well.
Ok, Kevin, I've attended a seminar on perfectoid spaces. And I have seen some talks on them (including one by you). Do you think the complexity of the definition is much beyond that of schemes? To me it seems like you need to prove some stuff on power-bounded elements and such, and otherwise you just run the "sheaf of rings on a space" machinery, with a different model of affines.
But of course that is hopelessly naive. Both math-wise and lean-wise, I guess.
No, I think defining a perfectoid space will be easy
that's why I'm so keen to do it
I can see no obstruction
and if we find an obstruction
then we learn more about whether Lean is an appropriate place to do interesting mathematics
but if we find an obstruction
I am optimistic the CS guys will fix it
because look at my horrible pre_semi_sheaf question
those goals looked awful
and they fixed it
Ok... do you want to do it in a separate project? Or in a feature branch of mathlib?
because look at my horrible pre_semi_sheaf question
those goals looked awful
and they fixed it
Yes, that was fantastic.
Ok... do you want to do it in a separate project? Or in a feature branch of mathlib?
I recommend not starting from a fork of mathlib. Your compile times will generally be faster. You can always add it to mathlib later.
Ok, I developed simplicial sets in a feature branch. And I was quite happy.
The positive side is that it is very easy to make small improvements to mathlib when you need them.
For example, I made small changes to fin
and later added nnreal
, and I got those merged before my current PR.
I've done both, and I was happier not starting from mathlib. :smile:
I just add files to the same directory as mathlib that I intend to place them. It's just as easy.
Oh that's a nice idea
I was just mulling over this sort of thing myself.
I think an advantage of working in a feature branch of mathlib is that it keeps at the front of your mind that it's important that new work is eventually merged into mathlib.
(Otherwise, the work is lost. Of course, indirect consequences of the work, such as inspiring people to think about interactive theorem proving through talks, may survive.)
Not that I am doing this myself. But as soon as I have satisfactory resolution of handling universes in category theory (getting there?), next up should be a PR. :-)
Johan Commelin suggests that I wait for you before defining more sheaves of things
and perfectoid spaces have sheaves of topological rings...
But Johan Commelin is a layman, who doesn't know anything about proper writing of structures and interfaces. I guess he thinks you just use some abstract category theory imported from Scott's library, and then definitions become 1-liners. But he forgets that you will still need a lot of interface writing. And this interface writing may or may not become more complicated with the overhead of the category lib. Johan has no clue whether this is a good idea or not.
I'm really sorry about being slow. I am feeling lame about not finishing real papers recently, and trying to get some non-Lean work done. Given the perfectoid spaces project is not immediately planning on contributing to mathlib (tsk) perhaps I could give you a relatively stable version of my category theory library to use as a dependency, and once (I mustn't say "if") I get it PR'd into mathlib it should be relatively easy to replumb.
No worries. We all have other obligations as well (-;
The thing is: I really am a layman.  Or whether we still need to write lots of plumbing stuff. I just don't have enough experience with formalisations to have good intuition about this.
In maths you would say: "Look, Scott has written a book on category theory! Let's just refer to that, instead of writing a 50 page appendix ourselves. That will save us 50 pages!"
But it seems like it might not work that way in Lean.
Of course, indirect consequences of the work, such as inspiring people to think about interactive theorem proving through talks, may survive.
Did you already gave talks about interactive theorem proving?
I tried to update my simplicial
branch today: https://github.com/leanprover-community/mathlib/blob/simplicial/algebraic_topology/simplicial_set.lean#L188 is the proof that boundary (boundary x) = 0
.
I do have some issues with pmf.map f
where f
is a function between two fintypes. This should be continuous for the subspace topology. And I had a working proof. But in the last months, the topology on nnreal
has changed, using uniform spaces. Now my proof seems pretty broken.
If any of the uniform spaces wizards want to help me out there, that would be cool.
@Reid Barton I think that I would like to make use of all the machinery that you have developed in you homotopy repo. So I won't push this much further. At least now the files are somewhat up to date with mathlib again.
@Mario Carneiro So now I have a proof that
lemma lboundary_lboundary : (lboundary R M X n).comp (lboundary R M X (n+1)) = 0 := ext $ λ x, boundary_boundary _ _ _ _
Is there now an easy way to take homology? What is the correct way to do that?
Which machinery did you have in mind?
Aah, the stuff about cylinders etc
Can we do a version for simplicial modules now?
I do not have a working functor Top
to simplicial_set
yet. It is a bit annoying.
But the other pieces are now becoming quite nice.
Also, I guess I should call them simplicial types? And the category should be sType
?
That is--this argument also works to show that the (unnormalized) chain complex associated to any simplicial module is in fact a chain complex. The original simplicial module doesn't have to be free.
I don't know whether that will make the proof any easier
https://ncatlab.org/nlab/show/Moore+complex#ForSimplicialAbelianGroups
Aaah, I don't know anything about this.
Are you planning to PR parts of your project into mathlib in the near future?
Probably not the near future. It's more likely that I will do a "version 2.0" of some parts in the less near future.
Aha
But, it depends on the part. Some stuff about Top could probably be PRed relatively soon without many changes
Let me see if I can read your proof
It would be nice to have singular homology
I wrote out a plan for it in a comment on one of your earlier PRs
what's the story with the topological simplices functor?
Delta -> Top
Something broke with it?
https://github.com/leanprover/mathlib/pull/144#issuecomment-425715546
Yes, that's broken...
And I didn't see an obvious fix. The topology on pmf [n]
is now no longer a subspace topology of a Pi-topology. But a subspace of some uniform thing.
And my uniform-fu is nil.
Technically we can do all this right now I think, without even waiting for limits or adjunctions
Yes, apart from this stupid brokenness, all the other parts are mostly there.
I didn't abstract complexes yet.
Did you do complexes somewhere?
I know that we had some discussion here on zulip a long time ago.
Not yet
@Patrick Massot Are you interested in exercising your mastery of uniform spaces again?
I can try
Did you already precisely described the problem? I didn't read carefully
Is there something I could clone?
Nope, there is a broken proof. It used to work, long ago. But then uniform spaces came along, and now it is broken.
simplicial
branch on community mathlib
did you push everything relevant to that branch?
That might not be the exact statement that you want to prove...
You could generalise to any f : X → Y
where X
and Y
are fintypes.
you get an induced map pmf.map f
And that should be continuous
We will then apply this to monotone maps between [n]
and [m]
@Johan Commelin I investigate a bit. There isn't much uniform space here, only metric space. The seemingly missing lemma is:
lemma metric_pi_topology {α : Type*} {π : α → Type*} [fintype α] [∀ a, metric_space (π a)]: (@metric_space_pi _ π _ _).to_uniform_space.to_topological_space = @Pi.topological_space _ π _ := sorry
Which says the topology on a finite product of metric spaces is the product topology. It probably used to be rfl but isn't.
After proving that lemma, typing:
variables {α : Type*} {β : Type*} [fintype α] [fintype β] def pmf_top : topological_space (pmf α) := subtype.topological_space local attribute [instance] pmf_top lemma map.cont (f : α → β) : continuous (pmf.map f) := begin apply continuous_subtype_mk, rw metric_pi_topology, apply continuous_pi, intro j, sorry end
should put you back on track
because then theorem map.continuous (f : [m] → [n]) : continuous (map f) := map.cont f
It may be better to state a continuous_metric_pi
with proof containing the rw metric_pi_topology
which we'd rather keep hidden
Clearly the definition metric_space_pi
currently lacks proper API. @Sebastien Gouezel and @Johannes Hölzl do you have opinons about that (you don't need to read anything before this monologue)?
@Johan Commelin I pushed an "exercise" for you, in https://github.com/leanprover-community/mathlib/blob/simplicial/algebraic_topology/simplicial_module.lean
It should be a proper subset of your existing boundary_boundary
proof, I hope.
@Patrick Massot Thanks a lot for investigating. I'll connect the pieces together now.
@Reid Barton Thanks! I'll take a look.
Johan, are you working on this product topology vs product metric? Or do you need help?
I just finished some bureaucracy. I'll look at it now
It probably requires quite a bit of preparation if you want to do it right
including figuring out what is already in mathlib
stuff like the base of the product topology in terms of open subsets in the factors, maybe some congr lemma for topologies, balls in the product metric space is products of balls etc.
maybe also things like projection on factors is an open map
@Patrick Massot Why do your fintypes have such strange names? Did you give up on X
and Y
?
I copied and pasted too much. The idea of using π in {π : α → Type*} [fintype α] [∀ a, metric_space (π a)]
is also a nightmare, since there are Pi-type mixed with π map everywhere then
@Patrick Massot Ok, my proof works again, modulo the lemma. It is a bit scary (in the sense of unmathematical) to do rewrites that don't change the pretty printed goal. But I guess it is fine.
Which lemma? metric_pi_topology
?
Right, that one.
I need to dive into mathlib to figure out how to prove that...
Do you want me to try proving it?
I'd rather have you work on sheaves or that localization API hole
Yeah, I should stop again with this project. I needed to do something else than sheaves for a day. But now I should return.
@Reid Barton How did Lean figure out that your definition of boundary
is a linear map?! That's really slick!
Kudos to @Mario Carneiro
def simplicial_module := simplicial_object (RMod R) section variables {R} (X : simplicial_module R) local notation ` [`n`] ` := simplex_category.from_nat n def boundary (n : ℕ) : X.obj [n+1] ⟶ X.obj [n] := sum univ $ λ i : [n+1], gsmul ((-1 : ℤ)^i.val) (X.δ i)
I don't know what you are talking about but I'm happy to take credit
That's so concise! You'dd almost call it normal math.
boundary
is a map between to modules. And there you have it.
The only difference from regular math is pretty printing
It's using the fact that linear_map
is a group. It is really nice that this Just Works™
@Mario Carneiro Did you also prove that composition of linear maps is bilinear?
yeah, that's lcomp
or llcomp
Otherwise that would be a natural step in @Reid Bartons challenge.
Ok, cool.
llcomp is linear in all the ways
btw, : ℤ
isn't necessary there
And yes, I was pretty happy about how easy it was to write down this statement. Now let's see how the proof turns out :)
Yes, I think that we need to change the definition of composition to llcomp g f
. After that, there is map_sum
for linear_map
s. If that works, I think we are good to go. I'll try it when I'm home.
@Reid Barton Sadly, this gives a failure
instance RMod_category : category (RMod R) := { hom := λ M N, M →ₗ N, id := λ M, linear_map.id, comp := λ M N P f g, linear_map.llcomp M N P g f }
Once again, Lean can not find the ring over which M
is a module...
I'm confused, why are you trying to use llcomp
?
Because then I can pull sum
through the linear map that is composition.
I see. So in the level of generality that I picked (RMod for a not necessarily commutative ring), the homs are only abelian groups, not modules. Of course, this is still enough but we have to use this additivity somehow
Aah, yes, I changed R
to comm_ring
, but that is not the problem I think.
It is still maxing out on some typeclass search
Well, there is no reason it should not work for ring
as well, or any additive category even
Sure, but we don't have enriched categories etc
what about just proving the equality element-wise?
Well, in any case, comp
cannot be llcomp
, because it has the wrong type. Right?
llcomp g f
should be an element of linear_map M P
Or, sorry
because llcomp
is cast to a function that eats g
, etc...
So how can llcomp
help
llcomp boundary
is a linear map
is the idea to get an expression containing a coercion of llcomp
, so that some lemma can see it's linear?
This sounds kind of fragile to me
why?
It just does?
Easy to imagine the simplifier deciding to rewrite llcomp f g
to lcomp f g
or whatever
and then you're stuck
That would be lcomp g f
because of [see above]
Anyway, I'm sidetracking.
Ok, I'll just change
to the llcomp
expression inside my proof.
What lemma are you using to pull the sum through the composition?
algebra/module.lean:@[simp] lemma map_sum
That was my plan, at least.
I see
hmm
Maybe it's better to make lemmas like sum_comp
/comp_sum
phrased in terms of the category composition and then write the proof in terms of those
set_option class.instance_max_depth 100
I found this at the top of the tensor_product
file. That was why the llcomp
stuff wasn't working (@Reid Barton)
Seems a bit fragile indeed...
@Reid Barton I just pushed some stuff. I can indeed copy most of my previous proof. I need one more little simp-lemma near the end. But I now need to do some other stuff first...
@Reid Barton Done.
I just did it too :)
Ooh, sorry...
Are our proofs homotopic?
Oooh, wait... this isn't HoTT
They're pretty similar
I added a bunch of lemmas for bilinearity of composition (without proofs)
https://github.com/leanprover-community/mathlib/blob/simplicial2/category_theory/examples/modules.lean#L35
Ok, now I should really get back to sheaves
But I'm a bit stuck there...
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


| thumbnail is a clickable link through to two more levels of larger images |
| AustinTek homepage | | Linux Virtual Server Links | AZ_PROJ map server | |
Copyright © 2011 Joseph Mack
15 Aug 2011, released under GPL-v3
Abstract
The simplest MVC Java example I could think of; I wanted the MVC version of "Hello World!".
Material/images from this webpage may be used, as long as credit is given to the author, and the url of this webpage is included as a reference.
GPL source code is at MVC.tar.gz (http://www.austintek.com/mvc/files/MVC.tar.gz).
Table of Contents
Most MVC examples show code doing something interesting. Here, to make the MVC functionality clear, the model does almost nothing (it has a counter) and the model, view and controller are separate classes.
The code here is based on Joseph Bergin's well explained Building Graphical User Interfaces with the MVC Pattern (http://csis.pace.edu/~bergin/mvc/mvcgui.html). Bergin's model has been simplified (Model class) and Bergin's GUI class, which contains both the controller and the view, has been separated into two classes (Controller class, View class), resulting one class for each of the model, view and controller. (Amir Salihefendic, Model View Controller: History, theory and usage http://amix.dk/blog/post/19615, notes that historically the controller and view were coded together as the user interface.)
The best explanation of design patterns I've found is by Bob Tarr CMSC491D Design Patterns In Java (http://userpages.umbc.edu/~tarr/dp/fall00/cs491.html) and CMSC446 Introduction To Design Patterns (http://userpages.umbc.edu/~tarr/dp/spr06/cs446.html).
The model has state (a counter). The model accepts a command to change state (increment the counter). The model emits notices of change of state, and the new state.
The model has no code specifying where the notices are sent or from where it will accept the command. This makes the model reusable. A non-reusable piece of code RunMVC tells model to send notices to view and to accept commands from controller.
//Model.java //(C) Joseph Mack 2011, jmack (at) wm7d (dot) net, released under GPL v3 (or any later version) //inspired by Joseph Bergin's MVC gui at http://csis.pace.edu/~bergin/mvc/mvcgui.html //Model holds an int counter (that's all it is). //Model is an Observable //Model doesn't know about View or Controller public class Model extends java.util.Observable { private int counter; //primitive, automatically initialised to 0 public Model(){ System.out.println("Model()"); /** Problem initialising both model and view: On a car you set the speedometer (view) to 0 when the car (model) is stationary. In some circles, this is called calibrating the readout instrument. In this MVC example, you would need two separate pieces of initialisation code, in the model and in the view. If you changed the initialisation value in one you'd have to remember (or know) to change the initialisation value in the other. A recipe for disaster. Alternately, when instantiating model, you could run setValue(0); as part of the constructor, sending a message to the view. This requires the view to be instantiated before the model, otherwise the message will be send to null (the unitialised value for view). This isn't a particularly onerous requirement, and is possibly a reasonable approach. Alternately, have RunMVC tell the view to intialise the model. The requires the view to have a reference to the model. This seemed an unneccesary complication. I decided instead in RunMVC, to instantiate model, view and controller, make all the connections, then since the Controller already has a reference to the model (which it uses to alter the status of the model), to initialise the model from the controller and have the model automatically update the view. */ } //Model() //uncomment this if View is using Model Pull to get the counter //not needed if getting counter from notifyObservers() //public int getValue(){return counter;} //notifyObservers() //model sends notification to view because of RunMVC: myModel.addObserver(myView) //myView then runs update() // //model Push - send counter as part of the message public void setValue(int value) { this.counter = value; System.out.println("Model init: counter = " + counter); setChanged(); //model Push - send counter as part of the message notifyObservers(counter); //if using Model Pull, then can use notifyObservers() //notifyObservers() } //setValue() public void incrementValue() { ++counter; System.out.println("Model : counter = " + counter); setChanged(); //model Push - send counter as part of the message notifyObservers(counter); //if using Model Pull, then can use notifyObservers() //notifyObservers() } //incrementValue() } //Model |
The Model has
| Note | |
|---|---|
| The Model doesn't know about (i.e. have a reference to) what is viewing or controlling it. All it knows is its status. This is required for the Model to be reusable. |
In this code Model:notifyObservers(counter) pushes the model's status to the View. In Bergin's code, the generic Model:notifyObservers() (i.e. without sending any status information), requires View to then pull from the Model (in View:model.getValue()). (The code for pull in the Model is commented out.) If pull is used, the View needs a reference to the Model (code is also commented out in View), making the View less reusable.
By extending Observable, Model has the method Observable:addObservers() to send (change of) status messages to the view. With the code for the Model not having a reference to the View (at least as an attribute), how does the Model know where view is? A non-reusable glue class (my term) RunMVC instantiates the objects model, view and controller and tells them what they need to know about each other. RunMVC:myModel.addObserver(Observer myView) gives the model a reference to the view. Although there is no mention of view in the model code (thus making Model reusable), the model is being passed a reference to the view. This can be done because Model is an Observable and an Observable knows the declaration of an Observer (like view).
To make the Observable model reusable, it must not have references to arbitary classes. We need to pass model a reference to the Observer view. The declaration of Observable knows what an Observer is. As long as view extends Observer, we can pass a reference to view, without having to hard code view into model. The important part is that we can make model reusable by building in the declaration of Observer, allowing model to accept a reference to view .
View is the UI (it's a GUI). View shows the model's state, and allows the user to enter commands which will change the model's state.
| Warning | |
|---|---|
| This code works fine, but is not reusable. It's what you might write for a first iteration. If you just want the reusable code and aren't interested in the explanation, hop to The View pt2. |
//View.java //(C) Joseph Mack 2011, jmack (at) wm7d (dot) net, released under GPL v3 (or any later version) //inspired by Joseph Bergin's MVC gui at http://csis.pace.edu/~bergin/mvc/mvcgui.html //View is an Observer import java.awt.Button; import java.awt.Panel; import java.awt.Frame; import java.awt.TextField; import java.awt.Label; import java.awt.event.WindowEvent; //for CloseListener() import java.awt.event.WindowAdapter; //for CloseListener() import java.lang.Integer; //int from Model is passed as an Integer import java.util.Observable; //for update(); class View implements java.util.Observer { //attributes as must be visible within class private TextField myTextField; private Button button; //private Model model; //Joe: Model is hardwired in, //needed only if view initialises model (which we aren't doing) View() { System.out.println("View()"); //frame in constructor and not an attribute as doesn't need to be visible to whole class Frame frame = new Frame("simple MVC"); frame.add("North", new Label("counter")); myTextField = new TextField(); frame.add("Center", myTextField); //panel in constructor and not an attribute as doesn't need to be visible to whole class Panel panel = new Panel(); button = new Button("PressMe"); panel.add(button); frame.add("South", panel); frame.addWindowListener(new CloseListener()); frame.setSize(200,100); frame.setLocation(100,100); frame.setVisible(true); } //View() // Called from the Model public void update(Observable obs, Object obj) { //who called us and what did they send? //System.out.println ("View : Observable is " + obs.getClass() + ", object passed is " + obj.getClass()); //model Pull //ignore obj and ask model for value, //to do this, the view has to know about the model (which I decided I didn't want to do) //uncomment next line to do Model Pull //myTextField.setText("" + model.getValue()); //model Push //parse obj myTextField.setText("" + ((Integer)obj).intValue()); //obj is an Object, need to cast to an Integer } //update() //to initialise TextField public void setValue(int v){ myTextField.setText("" + v); } //setValue() public void addController(Controller controller){ System.out.println("View : adding controller"); button.addActionListener(controller); //need controller before adding it as a listener } //addController() //uncomment to allow controller to use view to initialise model //public void addModel(Model m){ // System.out.println("View : adding model"); // this.model = m; //} //addModel() public static class CloseListener extends WindowAdapter { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); System.exit(0); } //windowClosing() } //CloseListener } //View |
As is required for reusability, the View doesn't know about (i.e. have a reference to) the Model. (If you use the view to initialise the model, and we didn't, then the view needs a refence to the model.)
The View doesn't hold a reference to the controller either. However the View sends button actions to the controller, so the button must be given a reference to the controller. Here is the relevant code (from View), which is called by the glue class RunMVC).
public void addController(Controller controller){ button.addActionListener(controller); } //addController() |
For View to accept the controller reference (parameter to addController()), View must have the declaration of Controller. The consequence of this requirement is that View is dependant on Controller and hence not reusable.
We didn't have the same reusability problem with Model, because Java had declared a base class Observer. The problem of View not being reusable comes about because Java doesn't have a base class Controller. Why isn't there a base class Controller? According to google, no-one has even thought about it. I mused about the central role of the 30yr old MVC to OOP design patterns, and wondered why someone hadn't written a controller base class. The base class had to be extendable by classes that listen (presumably to UIs). Then I realised that Controller is an ActionListner.
Here's the new View code
import java.awt.event.ActionListener; . . public void addController(ActionListener controller){ button.addActionListener(controller); } //addController() |
This gets us part of the way. Now View is reusable by controllers which are ActionListeners, but not controllers which are other types of Listeners. Presumably View can be extended for all listeners. Perhaps no-one needs a base class for Controller.
Extending the idea of referring to controller by its superclass, going up one more level to java.util.EventListener gives an error
addActionListener(java.awt.event.ActionListener) in java.awt.Button cannot be applied to (java.util.EventListener) |
//View.java //(C) Joseph Mack 2011, jmack (at) wm7d (dot) net, released under GPL v3 (or any later version) //inspired by Joseph Bergin's MVC gui at http://csis.pace.edu/~bergin/mvc/mvcgui.html //View is an Observer import java.awt.Button; import java.awt.Panel; import java.awt.Frame; import java.awt.TextField; import java.awt.Label; import java.awt.event.WindowEvent; //for CloseListener() import java.awt.event.WindowAdapter; //for CloseListener() import java.lang.Integer; //int from Model is passed as an Integer import java.util.Observable; //for update(); import java.awt.event.ActionListener; //for addController() class View implements java.util.Observer { //attributes as must be visible within class private TextField myTextField; private Button button; //private Model model; //Joe: Model is hardwired in, //needed only if view initialises model (which we aren't doing) View() { System.out.println("View()"); //frame in constructor and not an attribute as doesn't need to be visible to whole class Frame frame = new Frame("simple MVC"); frame.add("North", new Label("counter")); myTextField = new TextField(); frame.add("Center", myTextField); //panel in constructor and not an attribute as doesn't need to be visible to whole class Panel panel = new Panel(); button = new Button("PressMe"); panel.add(button); frame.add("South", panel); frame.addWindowListener(new CloseListener()); frame.setSize(200,100); frame.setLocation(100,100); frame.setVisible(true); } //View() // Called from the Model public void update(Observable obs, Object obj) { //who called us and what did they send? //System.out.println ("View : Observable is " + obs.getClass() + ", object passed is " + obj.getClass()); //model Pull //ignore obj and ask model for value, //to do this, the view has to know about the model (which I decided I didn't want to do) //uncomment next line to do Model Pull //myTextField.setText("" + model.getValue()); //model Push //parse obj myTextField.setText("" + ((Integer)obj).intValue()); //obj is an Object, need to cast to an Integer } //update() //to initialise TextField public void setValue(int v){ myTextField.setText("" + v); } //setValue() public void addController(ActionListener controller){ System.out.println("View : adding controller"); button.addActionListener(controller); //need instance of controller before can add it as a listener } //addController() //uncomment to allow controller to use view to initialise model //public void addModel(Model m){ // System.out.println("View : adding model"); // this.model = m; //} //addModel() public static class CloseListener extends WindowAdapter { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); System.exit(0); } //windowClosing() } //CloseListener } //View |
The view is an Observer. The view is a GUI which has
The trivial functionality of View is a constructor which generates the GUI and a method to initialise the TextField. The interesting functionality of View communicates with the controller and the model.
How does myView.update() get updated? (It all happens inside the instance Observable:myModel.)
Controller is a Listener. It
Controller has the following routine functionality
//Controller.java //(C) Joseph Mack 2011, jmack (at) wm7d (dot) net, released under GPL v3 (or any later version) //inspired by Joseph Bergin's MVC gui at http://csis.pace.edu/~bergin/mvc/mvcgui.html //Controller is a Listener class Controller implements java.awt.event.ActionListener { //Joe: Controller has Model and View hardwired in Model model; View view; Controller() { System.out.println ("Controller()"); } //Controller() //invoked when a button is pressed public void actionPerformed(java.awt.event.ActionEvent e){ //uncomment to see what action happened at view /* System.out.println ("Controller: The " + e.getActionCommand() + " button is clicked at " + new java.util.Date(e.getWhen()) + " with e.paramString " + e.paramString() ); */ System.out.println("Controller: acting on Model"); model.incrementValue(); } //actionPerformed() //Joe I should be able to add any model/view with the correct API //but here I can only add Model/View public void addModel(Model m){ System.out.println("Controller: adding model"); this.model = m; } //addModel() public void addView(View v){ System.out.println("Controller: adding view"); this.view = v; } //addView() public void initModel(int x){ model.setValue(x); } //initModel() } //Controller |
Here is the code which instantiates the classes and passes references to the classes which need them. It then runs the initialisation code. This code is specific to the model, controller and view. It is not meant to be reusable.
//RunMVC.java //(C) Joseph Mack 2011, jmack (at) wm7d (dot) net, released under GPL v3 (or any later version) public class RunMVC { //The order of instantiating the objects below will be important for some pairs of commands. //I haven't explored this in any detail, beyond that the order below works. private int start_value = 10; //initialise model, which in turn initialises view public RunMVC() { //create Model and View Model myModel = new Model(); View myView = new View(); //tell Model about View. myModel.addObserver(myView); /* init model after view is instantiated and can show the status of the model (I later decided that only the controller should talk to the model and moved initialisation to the controller (see below).) */ //uncomment to directly initialise Model //myModel.setValue(start_value); //create Controller. tell it about Model and View, initialise model Controller myController = new Controller(); myController.addModel(myModel); myController.addView(myView); myController.initModel(start_value); //tell View about Controller myView.addController(myController); //and Model, //this was only needed when the view inits the model //myView.addModel(myModel); } //RunMVC() } //RunMVC |
I could have had a main() in RunMVC. However when writing test code, I find it easier for the executable and jar files all to have the same name. Here's Main.
//(C) Joseph Mack 2011, jmack (at) wm7d (dot) net, released under GPL v3 (or any later version) public class Main{ public static void main(String[] args){ RunMVC mainRunMVC = new RunMVC(); } //main() } //Main |
Here's the relevant part of my Makefile
jar cfe RunMVC.jar Main *.class |
A simple example of MVC. There is one class for each of Model, View and Controller. Model is reusable. View is reusable as long as Controller is an ActionListener. Controller is not reusable.
| AustinTek homepage | | Linux Virtual Server Links | AZ_PROJ map server | |


Netflix fans can't get enough of Robert Pattinson's accent in The King
Historical epic The King hit Netflix last week and Robert Pattinson is the subject of many a meme
by Lewis Knight, https://www.mirror.co.uk/authors/lewis-knight/He may be the new Batman, but Robert Pattinson is generating some conversation for his role in The King.
Directed by David Michod , Netflix historical drama The King follows the trials and tribulations of wayward prince turned stern English monarch Henry V ( Timothee Chalamet ).
The new ruler soon finds himself in a very tense political stand-off with the heir to the French throne, the Dauphin ( Robert Pattinson ), prompting Henry to venture to France to wage war against his new foe.
However, when Henry and the Dauphin come face to face, things get very tense, but not for fans at home, who had one thing on their minds: Robert Pattinson doing a very strong French accent.
Naturally, viewers took to Twitter to air their reactions to his dulcet tones.
One viewer wrote: "Robert Pattinson's fake french accent in The King is hilarious. I can't."
 What is this French accent? He also looks like he should be one of the Volturi, finally."
One fan noted: "Timothée Chalamet was brilliant in 'The King' but the highlight had to be Robert Patterson's French accent"
Another wrote: "I honestly don't know how any of the actors kept a straight face while Robert Pattinson talked about big balls and a tiny c**k with his French accent LOL. He was perfect as the Dauphin. another scene stealer. #thekingnetflix #theking "
Finally, one said: "Little known fact, Robert Pattinson's French accent in The King is based on René from Allo! Allo!"
Well, it was certainly a highlight!
The King is available now on Netflix.
What did you think of The King? Let us know in the comments below.


Classes Binding
Inspect to view classes changes
Object Syntax Binding (Use with computed properties is a best practice)
Array Syntax Binding
Inline Styles Binding
Inspect to view styles changes
Styling with vue also have vendor prefixes, so no worries
this is styled with inline styles


{% extends 'base.html' %} {% block content %}
*please select the species and reference genome you want to see:
please select the tissue you want
Homo sapiens(Human)
Mus musculus(House mouse)
Danio rerio(Zebrafish)


-
-
Item Constants
Room Constants
Hotel prices are based on the advertised rack rate during a "Value" week in 2020. (Source: MouseSavers). While I acknowledge that discounts are common place, the inclusion of inconsistent discounts would skew the validity of the results. If you have a rate, feel free to utilize the "custom" section. DVC Rentals are based a value week in the smallest room for a resort at $19/point in 2020. (Source: DVC Request).
Additional items, such as tickets, are the cheapest that I could find. This is because the more expensive the trip, the more worthwhile an AP becomes. Thus, if it is worthwhile under these conditions, it wil be worthwhile regardless of when you go. Feel free to check the prices in the constants tab. If you know of a lower price for any of the items listed or have suggestions to improve the calculator, please let me know and I'll adjust it.
Remember, you don't have to get everyone an Annual Pass to get the savings an Annual Pass gets you.
Prices current as of February 22, 2020.


---
layout: post
title: Language talks :)
date: '2007-10-24T21:06:00.000+03:00'
tags:
- fun
modified_time: '2007-10-24T21:07:04.499+03:00'
blogger_id: tag:blogger.com,1999:blog-7542889160674991776.post-6977481237986762496
blogger_orig_url: http://www.emil-genov.info/2007/10/language-talks.html
---
The Last Language War / Language Trolling Post You'll Ever Need To Read (Hopefully) - I never have so much laugh since reading How to shoot yourself in the leg... which by the way seems a lot of outdated.


--- layout: frontpage ---
Data Scientist at Buhler.
PhD in Computational Biology.
Tech enthusiast with wide-varying interests including photography, graphic design, web development, electronics and programming.
Data Scientist at Buhler, working on digitalisation projects in the agri-tech industry.
Buhler manufactures optical sorters for sorting food products such as rice, grains, cereals and nuts.
Data Scientist at Vedra, a startup developing technologies for SMEs to provide personalised marketing and content experiences on their websites.
Data science project in a team of 4, part the S2DS data science bootcamp.
Gained place on highly competitive data science bootcamp course in London.
5 week consultancy project in a team of 4 PhD students / post-doctorate researchers. Client name protected under NDA.
Developed business, enterprise and team work skills, collaborating in team of 5.
Produced a business plan for commercialising fictitious academic research, including market research, route to market, patent acquisition, and seeking VC funding.
Training provided at GSK Stevenage HQ and Stevenage Biocatalyst.
Researching the structure and assembly of protein nanotubes from bacterial microcompartment shell proteins, as a precursor to understanding bacterial microcompartment assembly, using a combination of computational and imaging (e.g. transmission electron microscopy) techniques.
Developed algorithms for generating and analysing 3D geometric models of protein nanotubes, from atomic coordinates. Written in Python with numpy, pandas and scipy.
Data analysis of large scale atomic simulations run on HPC clusters , involving over 160,000 atoms.
I. Uddin, S. Frank, M. J. Warren, R. W. Pickersgill, Small 2018, 14, 1704020.
https://doi.org/10.1002/smll.201704020
Click arrow to open
A*A*A*A*
Pure Mathematics, Physics, Chemistry, Biology
A*-B Maths, Physics, Chemistry, Biology, English, French, Modern Greek (O-level)
Amateur photographer, with extensive experience using DSLR cameras. Skilled in digital post-processing techniques, using Adobe Photoshop and Lightroom.
500px Instagram Exposure.coNearly 10+ years experience in using Adobe Illustrator and Adobe Photoshop. Produced dozens of posters, logo designs, leaflets, and books for a variety of organisations, and societies. Artwork featured on inside front cover of reputable nanotechnology journal, Small.
BehanceDeveloped Wordpress websites for a number of businessess, including my personal blog (Science Exposure).


new Gue()
This doesn't take anything interesting.
Example
const gue = require('gue');
Methods
-
_log(type, message, taskname, duration)
-
does the actual printing for ```log``` and ```errLog``` - Error type prints the message in red - Debug prints the message in yellow - Normal type prints the message in cyan - Clean type prints the message without any coloring
Parameters:
Name Type Description type
string error normal clean message
string The string to log taskname
string The name of the task duration
int The task duration in ms -
_shell(mode, command, values) → {promise}
-
This is what actually does the shell execution for ```shell``` and ```silentShell``` See the documentation for '''shell''' for more information
Parameters:
Name Type Description mode
string 'print' or 'silent' command
string The shell command/shell command template to run values
object values to pass to the command template Returns:
Promise containing the [execa](https://www.npmjs.com/package/execa) result- Type
- promise
-
_smartWatch(fileSet) → {Object}
-
Uses the fileset object passed to figure out which tasks to run based on the files that have changed.
Parameters:
Name Type Description fileSet
Object fileSet object Returns:
chokidar watcher- Type
- Object
-
_watch(glob, taskList) → {object}
-
Watch the specified files and run taskList when a change is detected
Parameters:
Name Type Description glob
glob [chokidar](https://github.com/paulmillr/chokidar) compatible glob taskList
string | Array.<string> tasks to run when a file in files changes Returns:
Returns the chokidar watcher- Type
- object
Example
// Run lint and coverage tasks if a file matching src/*.js changes gue._watch('src/*.js', ['lint','coverage']); // Run coverage task if a file matching tests/*.js changes gue._watch('tests/*.js', 'coverage');
-
debugLog(message, taskname)
-
Prints a debug message
Parameters:
Name Type Description message
string The message to print taskname
string The name of the task -
errLog(message, taskname, duration)
-
Prints an error message Decorates like log, but message is printed in red
Parameters:
Name Type Description message
string The string to log taskname
string The name of the task duration
int The task duration in ms -
log(message, taskname, duration)
-
Prints a log message - If only message is passed it behaves like console.log - If taskname is passed it's added as a tag to the message and the message is colorized - If duration is passed the duration of the task is printed
Parameters:
Name Type Description message
string The string to log taskname
string The name of the task duration
type The task duration in ms -
registerEventHandlers()
-
registerEventHandlers - Register the event handlers These mainly handle ensuring that logs are emitted and the exit code is set correctly
-
shell(command, value) → {promise}
-
Runs a shell command and prints the output Shell commands print their buffer when the task is completed. If a shell command exits with a non zero status a flag is set so that gue exits with 1. STDERR is printed in red. The command string is actually a [handlebars](https://www.npmjs.com/package/handlebars) template. The following helpers are provided: - ```{{files "fileSet"}}```: expands to the files matching the glob in fileSet. **the quotes are required** - ```{{globs "fileSet"}}```: expands to the glob(s) in the fileSet. **the quotes are required**
Parameters:
Name Type Description command
string The shell command to run value
object passed to handlebars render Returns:
Promise containing the [execa](https://www.npmjs.com/package/execa) result- Type
- promise
Example
gue.fileSet.add('exampleSet', 'README.*'); // README.md gue.shell('echo {{files "exampleSet"}}'); // *.md gue.shell('echo {{globs "exampleSet"}}'); // woot gue.shell('echo {{myString}}', {myString: 'woot'});
-
silentShell(command, value) → {promise}
-
same as shell but doesn't print any output
Parameters:
Name Type Description command
string The shell command to run value
array Additional values that get passed to the template Returns:
Promise containing the [execa](https://www.npmjs.com/package/execa) result- Type
- promise
-
smartWatch(fileSet) → {Promise}
-
smartWatch - Watch all files specified in the fileset, run the appropriate tasks when one of the files is changed
Parameters:
Name Type Description fileSet
fileSet the fileset object that contains the files to watch Returns:
returns a promise for this._smartWatch- Type
- Promise
-
task(name, deps, func)
-
Create a new task Tasks are the core of gue. They are the bits that contain the work you want done. A gue task consists of a name and one or more things to do. Each task may define a list of dependencies that will run to completion prior to running the current task. Each task may also specify a function to run. Tasks are just javascript. You don't need to just use ```gue.shell```. - Tasks should return a promise.
Parameters:
Name Type Description name
string Name of the task deps
array Array of task dependencies func
function The function to execute for this task Example
// Create a task that just calls dep1 and dep2 task('mytask', ['dep1','dep2']); // Create a task that runs tests and code coverage task('coverage', () =>{ return gue.shell('nyc mocha tests/*.js') }) // Create a task that calls a linter task prior to coverage task('coverage', ['lint'], () =>{ return gue.shell('nyc mocha tests/*.js') })
-
taskList() → {array}
-
Return an array of the defined tasks
Returns:
Array of the defined tasks- Type
- array
-
watch(glob, taskList) → {Promise}
-
watch = watch the specified files and run taskList when a change is detected This is just a passthrough to _watch. Done to make it easier to maintain API compatibility.
Parameters:
Name Type Description glob
glob [chokidar](https://github.com/paulmillr/chokidar) compatible glob taskList
tasklist tasks to run when a file in files changes Returns:
A promise for this._watch- Type
- Promise
Example
// Run lint and coverage tasks if a file matching src/*.js changes gue.watch('src/*.js', ['lint','coverage']); // Run coverage task if a file matching tests/*.js changes gue.watch('tests/*.js', 'coverage');


Protocols
The following protocols are available globally.
-
Protocols for text field which can communicate with DatePickerView as its inputView
See moreDeclaration
Swift
public protocol DateTextField : GuidedTextField
-
Protocols for manageable text field, which can switch responder or resign it
See moreDeclaration
Swift
public protocol GuidedTextField : AnyObject
-
Protocols for text field which can communicate with PlainPickerView as its inputView
See moreDeclaration
Swift
public protocol PickerTextField : GuidedTextField
-
Describes type of field which can reset its state
See moreDeclaration
Swift
public protocol ResetableField
-
Abstract protocol that give you ability to control under responder chain for text fields.
See moreDeclaration
Swift
public protocol RespondableField
-
Undocumented
See moreDeclaration
Swift
public protocol TextFieldValidation : AnyObject
-
Abstract protocol for fields input accessory views. You can add buttons to switch between input fields, guidedField will help you with this. Or you can ignore this field and create your own custom toolbar! Because protocol have default implementation and all of it’s components is optional.
See moreDeclaration
Swift
public protocol ToolBarInterface : UIView
-
Abstract protocl for hint service.
You can use existed
See moreHintService
from this library, this service will do all work for supporting hint messages, or you can provide your own service which have to implement this protocol.Declaration
Swift
public protocol AbstractHintService
-
Protocol for abstract service, which contains logic for drawing placeholder.
This protocol have main methods to draw placeholder as you want. Some methods is optional.
If you want to use you own custom placeholder service - you may implement service with this protocol.
See moreDeclaration
Swift
public protocol AbstractPlaceholderService
-
Abstraction under UITextField/InnerTextField and UITextView
The need is due to the desire to close two different classes with one protocol for use in places where both classes will be used in the same way.
See moreImportant
Protocol have two default extension with implementation for InnerTextField and UITextView.Declaration
Swift
public protocol InputField : UIView


The Action Color Hue Bar presents a hue selection bar to the user that they can interact with to select the current color. This control is typically used with an ACColorCube
to present the full color selection UI.
More...
|
| | ACHueBar () |
| | Initializes a new instance of the T:ActionComponents.ACHueBar class. More...
|
| |
| | ACHueBar (NSCoder coder) |
| | Initializes a new instance of the T:ActionComponents.ACHueBar class. More...
|
| |
| | ACHueBar (NSObjectFlag flag) |
| | Initializes a new instance of the T:ActionComponents.ACHueBar class. More...
|
| |
| | ACHueBar (CGRect bounds) |
| | Initializes a new instance of the T:ActionComponents.ACHueBar class. More...
|
| |
| | ACHueBar (IntPtr ptr) |
| | Initializes a new instance of the T:ActionComponents.ACHueBar class. More...
|
| |
| void | Redraw () |
| | Redraw the Hue Bar using the current Hue value. More...
|
| |
| override void | TouchesBegan (NSSet touches, UIEvent evt) |
| | Toucheses the began. More...
|
| |
| override void | TouchesMoved (NSSet touches, UIEvent evt) |
| | Toucheses the moved. More...
|
| |
| delegate void | HueChangedDelegate (nfloat hue) |
| | Hue changed delegate. More...
|
| |
|
| nfloat | Hue [get, set] |
| | Gets or sets the hue. More...
|
| |
The Action Color Hue Bar presents a hue selection bar to the user that they can interact with to select the current color. This control is typically used with an ACColorCube
to present the full color selection UI.
| ActionComponents.ACHueBar.ACHueBar |
( |
| ) |
|
Initializes a new instance of the T:ActionComponents.ACHueBar class.
| ActionComponents.ACHueBar.ACHueBar |
( |
NSCoder |
coder | ) |
|
Initializes a new instance of the T:ActionComponents.ACHueBar class.
- Parameters
-
| ActionComponents.ACHueBar.ACHueBar |
( |
NSObjectFlag |
flag | ) |
|
Initializes a new instance of the T:ActionComponents.ACHueBar class.
- Parameters
-
| ActionComponents.ACHueBar.ACHueBar |
( |
CGRect |
bounds | ) |
|
Initializes a new instance of the T:ActionComponents.ACHueBar class.
- Parameters
-
| ActionComponents.ACHueBar.ACHueBar |
( |
IntPtr |
ptr | ) |
|
Initializes a new instance of the T:ActionComponents.ACHueBar class.
- Parameters
-
| delegate void ActionComponents.ACHueBar.HueChangedDelegate |
( |
nfloat |
hue | ) |
|
| void ActionComponents.ACHueBar.Redraw |
( |
| ) |
|
Redraw the Hue Bar using the current Hue
value.
| override void ActionComponents.ACHueBar.TouchesBegan |
( |
NSSet |
touches, |
|
|
UIEvent |
evt |
|
) |
| |
Toucheses the began.
- Parameters
-
| override void ActionComponents.ACHueBar.TouchesMoved |
( |
NSSet |
touches, |
|
|
UIEvent |
evt |
|
) |
| |
Toucheses the moved.
- Parameters
-
| nfloat ActionComponents.ACHueBar.Hue |
|
getset |
Gets or sets the hue.
The hue.


A random-acess queue. Its size is fixed. As soon as it gets full, the first inserted element is automatically replaced by the next inserted element.
It is useful to find the median element as walking through signal or image data, e.g. MedianFilter method of Signal class. Insertion and removal are made in limiar time with respect to the queue size.
Access to ordered keys by position is made in constant time.
More...
#include <RandomQueue.hpp>
|
| | RandomQueue (size_t size, bool increasing_order=true) |
| | Basic Constructor. More...
|
| |
| double | operator[] (size_t elm) const |
| | Returns key at the elm-th position in increasing or decreasing order, e.g., if elm = 0 and increasing is true, then the smallest key is returned. More...
|
| |
| size_t | Size () const |
| | Returns the current size of the queue. More...
|
| |
| size_t | Capacity () const |
| | Returns the maximum capacity of the queue. More...
|
| |
| void | Insert (double key) |
| | Inserts the input key into the random queue. If the queue is full, then the new key will automatically replace the oldest key in the queue. More...
|
| |
| double | Remove () |
| | Removes and returns the oldest key in the queue. More...
|
| |
| void | Update (double key, double new_key) |
| | Updates the input key with new_key value. If there is more than one key with the expected value, then one of them (randomly chosen) will updated. More...
|
| |
| double | Minimum () const |
| | Returns the minimum key in the queue. If the number of keys is even, then the mean value of the two minimum keys is returned. More...
|
| |
| double | Median () const |
| | Returns the median key in the queue. If the number of keys is even, then the mean value of the two median keys is returned. More...
|
| |
| double | Maximum () const |
| | Returns the maximum key in the queue. If the number of keys is even, then the mean value of the two maximum keys is returned. More...
|
| |
| bool | Full () |
| | Returns true, if random queue is completely filled. More...
|
| |
| bool | Empty () |
| | Returns true, if random queue is empty. More...
|
| |
| template<class O > |
| void | Print (O &os) |
| | Prints random queue current keys. More...
|
| |
A random-acess queue. Its size is fixed. As soon as it gets full, the first inserted element is automatically replaced by the next inserted element.
It is useful to find the median element as walking through signal or image data, e.g. MedianFilter method of Signal class. Insertion and removal are made in limiar time with respect to the queue size.
Access to ordered keys by position is made in constant time.
Definition at line 38 of file RandomQueue.hpp.
| Bial::RandomQueue::RandomQueue |
( |
size_t |
size, |
|
|
bool |
increasing_order = true |
|
) |
| |
Basic Constructor.
- Date
- 2012/Sep/12
- Parameters
-
| size | maximum capacity of the queue. |
| increasing_order | increasing or decreasing order of random queue elements sorting. |
- Returns
- none.
- Warning
- none.
| size_t Bial::RandomQueue::Capacity |
( |
| ) |
const |
Returns the maximum capacity of the queue.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- The maximum capacity of the queue.
- Warning
- none.
| bool Bial::RandomQueue::Empty |
( |
| ) |
|
Returns true, if random queue is empty.
- Date
- 2012/Sep/13
- Parameters
-
- Returns
- True, if random queue is empty.
- Warning
- none.
| bool Bial::RandomQueue::Full |
( |
| ) |
|
Returns true, if random queue is completely filled.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- True, if random queue is completely filled.
- Warning
- none.
| void Bial::RandomQueue::Insert |
( |
double |
key | ) |
|
Inserts the input key into the random queue. If the queue is full, then the new key will automatically replace the oldest key in the queue.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- none.
- Warning
- none.
| double Bial::RandomQueue::Maximum |
( |
| ) |
const |
Returns the maximum key in the queue. If the number of keys is even, then the mean value of the two maximum keys is returned.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- The maximum key in the queue.
- Warning
- Queue occupancy is not verified.
| double Bial::RandomQueue::Median |
( |
| ) |
const |
Returns the median key in the queue. If the number of keys is even, then the mean value of the two median keys is returned.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- The median key in the queue.
- Warning
- Queue occupancy is not verified.
| double Bial::RandomQueue::Minimum |
( |
| ) |
const |
Returns the minimum key in the queue. If the number of keys is even, then the mean value of the two minimum keys is returned.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- The minimum key in the queue.
- Warning
- Queue occupancy is not verified.
| double Bial::RandomQueue::operator[] |
( |
size_t |
elm | ) |
const |
Returns key at the elm-th position in increasing or decreasing order, e.g., if elm = 0 and increasing is true, then the smallest key is returned.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- Key at the p-th position.
- Warning
- Queue bounds are not verified.
template<class O >
| void Bial::RandomQueue::Print |
( |
O & |
os | ) |
|
Prints random queue current keys.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- none.
- Warning
- none.
Definition at line 185 of file RandomQueue.hpp.
| double Bial::RandomQueue::Remove |
( |
| ) |
|
Removes and returns the oldest key in the queue.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- The removed key.
- Warning
- none.
| size_t Bial::RandomQueue::Size |
( |
| ) |
const |
Returns the current size of the queue.
- Date
- 2012/Sep/12
- Parameters
-
- Returns
- The current size of the queue.
- Warning
- none.
| void Bial::RandomQueue::Update |
( |
double |
key, |
|
|
double |
new_key |
|
) |
| |
Updates the input key with new_key value. If there is more than one key with the expected value, then one of them (randomly chosen) will updated.
- Date
- 2012/Sep/12
- Parameters
-
| key | A key. |
| new_key | The new value to be assigned to key. |
- Returns
- none.
- Warning
- none.
| Vector< double > Bial::RandomQueue::_data |
|
protected |
| bool Bial::RandomQueue::increasing |
|
protected |
| size_t Bial::RandomQueue::last |
|
protected |
| size_t Bial::RandomQueue::occupancy |
|
protected |
| Vector< size_t > Bial::RandomQueue::order |
|
protected |
| double* Bial::RandomQueue::qk_data |
|
protected |
The documentation for this class was generated from the following file:


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
IN THE HIGH COURT OF JUDICATURE AT PATNA CRIMINAL MISCELLANEOUS No.22125 of 2019 Arising Out of PS. Case No.-49 Year-2019 Thana- BARUN District- Aurangabad ====================================================== AJAY KUMAR, Son of Nandu Singh, Resident of Village-Sohda, P.S-Narari Kala Khurd, District-Aurangabad. At present Resident of Baksama Goraul, District-Vaishali. ... ... Petitioner/s Versus The State of Bihar ... ... Opposite Party/s ====================================================== Appearance : For the Petitioner/s : Mr.Ashok Kumar Singh For the Opposite Party/s : Mr.Dr.Mrityunjaya Kr.Gautam ====================================================== CORAM: HONOURABLE MR. JUSTICE CHAKRADHARI SHARAN SINGH ORAL ORDER
2 09-04-2019 Heard learned Counsel for the petitioner and learned Additional Public Prosecutor for the State.
This application, for grant of anticipatory bail, arises out of Barun Police Station Case No. 49 of 2019, disclosing offences under Sections 379/420/411/34 of the Indian Penal Code, Section 4/40 of the Bihar Minor Mineral Concession Rules and Section 15 of the Pollution Control Act.
In course of a raid conducted by one Abdul Sattar Saif, Enforcement Officer of the Mines Office, Aurangabad, three tractors were seized, loaded with illegally mined sand. The drivers were not found with the tractors as they have fled away.
The petitioner is said to be the driver of one of the tractors. It has been submitted on his behalf that the petitioner Patna High Court CR. MISC. No.22125 of 2019(2) dt.09-04-2019 2/2 has been implicated only because he was acting under the instructions of the owner of the tractor. It has also been submitted that the petitioner has no criminal antecedent and if allowed anticipatory bail, there is no chance of tampering with the evidence.
Considering the above, this application is allowed. Let the petitioner, namely, Ajay Kumar, in the event of his arrest or surrender before the Court below within six weeks, be released on bail on furnishing bail bonds of Rs. 10,000/- (ten thousand) with two sureties of the like amount each to the satisfaction of learned Chief Judicial Magistrate, Aurangabad, in connection with Barun Police Station Case No. 49 of 2019, subject to the condition laid down under Section 438 (2) of the Code of Criminal Procedure.
This is subject to the condition that the petitioner shall present himself before the police/Court, as the case may be, as and when required and in the event of failure on his part to appear before the Court on two consecutive occasions, his bail bond shall be liable to be cancelled.
(Chakradhari Sharan Singh, J.) Prabhakar Anand/-
U √ T √


Contact OnlineClock.net
Please feel free to contact us at any time with feedback about our website, questions or bug reports by sending your email messages to:
We will respond eventually to all serious and important email messages sent to us.
Imprint for OnlineClock.net
Thomas M. Churm
Hagelberger Strasse 45
10965 Berlin
Germany
Contact:
E-Mail: info [at] onlineclock.net
Responsible for Website Content:
Thomas M. Churm
Hagelberger Strasse 45
10965 Berlin
Germany
Privacy Policy for OnlineClock.net
- INTRODUCTION
This privacy notice provides you with details of how we collect and process your personal data through your use of our site OnlineClock.net.
By providing us with your data, you warrant to us that you are over 13 years of age.
Thomas M. Churm is the data controller and is responsible for your personal data (referred to as “we”, “us” or “our” in this privacy notice).
Contact Details
Our full details are:
Full name of legal entity: Thomas M. Churm
Email address: info [at] onlineclock.net
Postal address: Hagelberger Strasse 45, 10965 Berlin, Germany
If you are not happy with any aspect of how we collect and use your data, you have the right to complain to the Information Commissioner’s Office (ICO), the UK supervisory authority for data protection issues (www.ico.org.uk). We should be grateful if you would contact us first if you do have a complaint so that we can try to resolve it for you.
It is very important that the information we hold about you is accurate and up to date. Please let us know if at any time your personal information changes by emailing us at info [at] onlineclock.net
- WHAT DATA DO WE COLLECT ABOUT YOU
Personal data means any information capable of identifying an individual. It does not include anonymised data.
We may process certain types of personal data about you as follows:
- Technical Data may include your internet protocol addresses, browser type and version, browser plug-in types and versions, time zone setting and location, operating system and platform and other technology on the devices you use to access this site.
- Usage Data may include information about how you use our website, products and services.
We may also process Aggregated Data from your personal data but this data does not reveal your identity and as such in itself is not personal data. An example of this is where we review your Usage Data to work out the percentage of website users using a specific feature of our site. If we link the Aggregated Data with your personal data so that you can be identified from it, then it is treated as personal data.
Sensitive Data
We do not collect any Sensitive Data about you. Sensitive data refers to data that includes details about your race or ethnicity, religious or philosophical beliefs, sex life, sexual orientation, political opinions, trade union membership, information about your health and genetic and biometric data. We do not collect any information about criminal convictions and offences.
- HOW WE COLLECT YOUR PERSONAL DATA
We collect data about you through a variety of different methods including:
- Direct interactions: You may provide data by filling in forms on our site (or otherwise) or by communicating with us by post, phone, email or otherwise, including when you:
- Give us feedback or send us suggestions or bug reports
- Automated technologies or interactions: As you use our site, we may automatically collect Technical Data about your equipment, browsing actions and usage patterns. We collect this data by using cookies, server logs and similar technologies. Log files on our web server are automatically deleted after several days' time. We may also receive Technical Data about you if you visit other websites that use our cookies. Please see our cookie policy below for further details.
- Third parties or publicly available sources: We may receive personal data about you from various third parties and public sources as set out below:
- Cloudflare, Inc. (our Web Security and Peformance provider)
- Google / Google Plus / YouTube / Google's DART & AdSense
- Analytics providers such as Google based outside the EU
Please note: we have anonymized IP collection in Google Analytics for all visitors. You can see this via the line of code "ga('set', 'anonymizeIp', true);" visible in our site's source code. - Advertising networks such as Google AdSense and its partner networks based inside and outside the EU
Please note: starting May 25th, 2018, we will display only non-personalized ads to users in the EEA.
- HOW WE USE YOUR PERSONAL DATA
We will only use your personal data when legally permitted. The most common uses of your personal data are:
- Where it is necessary for our legitimate interests (or those of a third party) and your interests and fundamental rights do not override those interests
- Where we need to comply with a legal or regulatory obligation
- To protect our website and web server against cyber-attacks
- To serve personalized advertising, which is the sole source of funding for our website and its various web services
Generally, we do not rely on consent as a legal ground for processing the personal data described above.
Purposes for processing your personal data
Set out below is a description of the ways we intend to use your personal data and the legal grounds on which we will process such data. We have also explained what our legitimate interests are where relevant.
We may process your personal data for more than one lawful ground, depending on the specific purpose for which we are using your data. Please email us at info [at] onlineclock.net if you need details about the specific legal ground we are relying on to process your personal data where more than one ground has been set out in the table below.
|
Purpose/Activity |
Type of data |
Lawful basis for processing |
|
To administer and protect our business and our site (including troubleshooting, data analysis, testing, system maintenance, support, reporting and hosting of data) |
(a) Technical |
(a) Necessary for our legitimate interests for running our business, provision of administration and IT services, network security, to prevent fraud and in the context of a business reorganisation or group restructuring exercise (b) Necessary to comply with a legal obligation |
|
To deliver relevant content and advertisements to you and measure and understand the effectiveness of our advertising |
(a) Usage (b) Technical |
Necessary for our legitimate interests to study how customers use our products/services, to develop them, to grow our business and to inform our marketing strategy |
|
To use data analytics to improve our website, products/services, marketing, customer relationships and experiences |
(a) Technical (b) Usage |
Necessary for our legitimate interests to define types of customers for our products and services, to keep our site updated and relevant, to develop our business and to inform our marketing strategy |
Change of purpose
We will only use your personal data for the purposes for which we collected it, unless we reasonably consider that we need to use it for another reason and that reason is compatible with the original purpose. If you wish to find out more about how the processing for the new purpose is compatible with the original purpose, please email us at info [at] onlineclock.net.
If we need to use your personal data for a purpose unrelated to the purpose for which we collected the data, we will notify you and we will explain the legal ground of processing.
We may process your personal data without your knowledge or consent where this is required or permitted by law.
- DISCLOSURES OF YOUR PERSONAL DATA
We may have to share your personal data with the parties set out below for the purposes set out in the table in paragraph 4 above:
- Service providers who provide IT and system administration services
- Security services who protect our website against malicious activity
- Third parties to whom we sell, transfer, or merge parts of our business or our assets.
We require all third parties to whom we transfer your data to respect the security of your personal data and to treat it in accordance with the law. We only allow such third parties to process your personal data for specified purposes and in accordance with our instructions.
- INTERNATIONAL TRANSFERS
Countries outside of the European Economic Area (EEA) do not always offer the same levels of protection to your personal data, so European law has prohibited transfers of personal data outside of the EEA unless the transfer meets certain criteria.
Many of our third parties service providers are based outside the European Economic Area (EEA) so their processing of your personal data will involve a transfer of data outside the EEA.
Whenever we transfer your personal data out of the EEA, we do our best to ensure a similar degree of security of data by ensuring at least one of the following safeguards is implemented:
- We will only transfer your personal data to countries that have been deemed to provide an adequate level of protection for personal data by the European Commission; or
- Where we use certain service providers, we may use specific contracts or codes of conduct or certification mechanisms approved by the European Commission which give personal data the same protection it has in Europe; or
- Where we use providers based in the United States, we may transfer data to them if they are part of the EU-US Privacy Shield which requires them to provide similar protection to personal data shared between the Europe and the US.
If none of the above safeguards is available, we may request your explicit consent to the specific transfer. You will have the right to withdraw this consent at any time.
Please email us at info [at] onlineclock.net if you want further information on the specific mechanism used by us when transferring your personal data out of the EEA.
- DATA SECURITY
We have put in place appropriate security measures to prevent your personal data from being accidentally lost, used or accessed in an unauthorised way, altered or disclosed. In addition, we limit access to your personal data to those employees, agents, contractors and other third parties who have a business need to know such data. They will only process your personal data on our instructions and they are subject to a duty of confidentiality.
We have put in place procedures to deal with any suspected personal data breach and will notify you and any applicable regulator of a breach where we are legally required to do so.
- DATA RETENTION
We will only retain your personal data for as long as necessary to fulfil the purposes we collected it for, including for the purposes of satisfying any legal, accounting, or reporting requirements.
To determine the appropriate retention period for personal data, we consider the amount, nature, and sensitivity of the personal data, the potential risk of harm from unauthorised use or disclosure of your personal data, the purposes for which we process your personal data and whether we can achieve those purposes through other means, and the applicable legal requirements.
In some circumstances you can ask us to delete your data: see below for further information.
In some circumstances we may anonymise your personal data (so that it can no longer be associated with you) for research or statistical purposes in which case we may use this information indefinitely without further notice to you.
- YOUR LEGAL RIGHTS
Under certain circumstances, you have rights under data protection laws in relation to your personal data. These include the right to:
- Request access to your personal data.
- Request correction of your personal data.
- Request erasure of your personal data.
- Object to processing of your personal data.
- Request restriction of processing your personal data.
- Request transfer of your personal data.
- Right to withdraw consent.
You can see more about these rights at:
https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/
If you wish to exercise any of the rights set out above, please email us at info [at] onlineclock.net.
You will not have to pay a fee to access your personal data (or to exercise any of the other rights). However, we may charge a reasonable fee if your request is clearly unfounded, repetitive or excessive. Alternatively, we may refuse to comply with your request in these circumstances.
We may need to request specific information from you to help us confirm your identity and ensure your right to access your personal data (or to exercise any of your other rights). This is a security measure to ensure that personal data is not disclosed to any person who has no right to receive it. We may also contact you to ask you for further information in relation to your request to speed up our response.
We try to respond to all legitimate requests within one month. Occasionally it may take us longer than a month if your request is particularly complex or you have made a number of requests. In this case, we will notify you and keep you updated.
- THIRD-PARTY LINKS
This website may include links to third-party websites, plug-ins and applications. Clicking on those links or enabling those connections may allow third parties to collect or share data about you. We do not control these third-party websites and are not responsible for their privacy statements. When you leave our website, we encourage you to read the privacy notice of every website you visit.
- COOKIES
You can set your browser to refuse all or some browser cookies, or to alert you when websites set or access cookies. If you disable or refuse cookies, please note that some parts of this website may become inaccessible or not function properly. For more information about the cookies we use, please see our cookie policy below.
Cookie Policy
Cookies In Use on This Site
Cookies and how they Benefit You
Our website uses cookies, as almost all websites do, to help provide you with the best experience we can. Cookies are small text files that are placed on your computer or mobile phone when you browse websites
Our cookies help us:
- Make our website work as you'd expect
- Remember your settings during and between visits
- Offer you free services/content (thanks to advertising)
- Improve the speed/security of the site
- Personalise our site to you to help you get what you need faster
- Continuously improve our website for you
- Make our marketing more efficient (ultimately helping us to offer the service we do at the price we do)
We do not use cookies to:
- Collect any sensitive information
- Pay sales commissions
You can learn more about all the cookies we use below
Granting us permission to use cookies
If the settings on your software that you are using to view this website (your browser) are adjusted to accept cookies we take this, and your continued use of our website, to mean that you are fine with this. Should you wish to remove or not use cookies from our site you can learn how to do this below, however doing so will likely mean that our site will not work as you would expect.
More about our Cookies
Website Function Cookies
Our own cookies
We use cookies to make our website work including:
- Tailoring content to your needs
- Remembering your preferences such as dates, alarm sounds, countdowns, etc...
There is no way to prevent these cookies being set other than to not use our site.
Third party functions
Our site, like most websites, includes functionality provided by third parties. A common example is an embedded YouTube video. Our site uses 3rd party functions from the following companies which use cookies:
- YouTube - Privacy Policy powers the videos on our site
- Google - Privacy Policy provides the ads and other functions on our site
- DART / DoubleClick - Privacy Policy provides the ads on our site
- Cloudflare - Privacy Policy provides security and performance-enhancing functions for our website
Disabling these cookies will likely break the functions offered by these third parties
Visitor Statistics Cookies
We use cookies to compile visitor statistics such as how many people have visited our website, what type of technology they are using (e.g. Mac or Windows which helps to identify when our site isn't working as it should for particular technologies), how long they spend on the site, what page they look at etc. This helps us to continuously improve our website. These so called "analytics" programs also tell us if how people reached this site (e.g. from a search engine) and whether they have been here before helping us to put more money into developing our services for you instead of marketing spend.
We use:
- Google Analytics - Privacy Policy helps us monitor our website's performance
Advertising Cookies
Cookies are widely used in online advertising. We only work with advertising partners who work to accepted privacy standards.
You can learn more about online advertising at //www.youronlinechoices.com . You can opt-out of almost all advertising cookies at //www.youronlinechoices.com/uk/your-ad-choices although we would prefer that you didn't as ultimately adverts help keep much of the internet free. It is also worth noting that opting out of advertising cookies will not mean you won't see adverts, just simply that they won't be tailored to you any longer.
We use:
- Google AdSense - Privacy Policy
- DART / DoubleClick - Privacy Policy owned by Google
- Other advertising network partners which advertise through or via the networks listed above
Turning Cookies Off
You can control what information is collected via Google's Advertising Cookies on our site by following the information listed here: https://www.google.com/policies/technologies/partner-sites/
You can also switch cookies off by adjusting your browser settings. Information on how to adjust your cookie settings can be obtained via your web browser's help documentation.
More information on managing Cookies may be found by visiting these (or similar) links:


We visualize blockchain!
- e-enable bleeding-edge vortals
- harness web-enabled synergies
- whiteboard revolutionary action-items
- aggregate real-time web-readiness
- e-enable end-to-end partnerships
- syndicate sexy infrastructures
- scale enterprise web-readiness
- e-enable distributed e-services
- unleash scalable convergence
- seize distributed communities
- disintermediate intuitive e-business
- morph sticky networks


Chelsea Football Club
menu
Home
History
News
Squad
Shop
Contact us
Home
History
News
Squad
Shop
Contact us
Premier League Table
Position
Team
Match played
Points
1
Liverpool
26
76 points
2
Manchester City
25
51 points
3
Leicester City
25
50 points
4
Chelsea
25
41 points
Chelsea vs. Liverpool
Our latest press conference:
News
• Pressures and present priorities
• Home and Away: Jon Harley
Search
Products
• Nike Chelsea Kepa Arizabalaga Home Shirt 2019/2020 ( £55.00 )
• Nike Chelsea Antonio Rudiger Home Shirt 2019/2020 ( £55.00 )
• Nike Chelsea Jorginho Home Shirt 2019/2020 ( £55.00 )


Control with ARROW KEYS | Switch quadrants with W A S D R restart level | P previous level | N next level
Conceived/created at Hack Night Dublin #1
Play PuzzleScript version here


set mpdraw on|off
If off, does not draw the map background. Requested map scaling is still in force.
off
Settings stay the same until changed by new set commands.
set


Afterglow (1997)
Director: Alan Rudolph Cast: Nick Nolte, Julie Christie, Lara Flynn Boyle, Jonny Lee Miller, Jay Underwood Screenplay: Alan Rudolph Producers: Robert Altman Runtime: 113 US Distribution: Sony Pictures Classics Rated R: sex, language
By Nathaniel R. Atcheson<EMAIL_ADDRESS>Afterglow is about a group of people who remain in tangled, destructive marriages, but the film doesn't quite explain why. The characters are all interesting and well-acted, and the film is moody and atmospheric; but, at the end, I didn't know where the characters were emotionally. This lack of closure doesn't help the fact that the characters commonly engage in situations that don't feel realistic, and say things that I wouldn't expect people to say.
The film centers around two marriages. One consists of Jeffrey and Marianne Byron (Jonny Lee Miller and Lara Flynn Boyle).  The other marriage has Lucky and Phyllis Mann (Nick Nolte and Julie Christie).
The story develops as it becomes clear that Jeffrey has no intention of supplying Marianne with a child. When Marianne hears about Lucky from a woman who has him fix her pipes frequently, she calls him up, and they begin an affair. Then, through a series of unlikely events, Jeffrey and Phyllis become attached, unknowing that their spouses are off doing the same thing.
The first problem I found is that the film relies far too much on improbable coincidences. What were the chances of Jeffrey and Phyllis going to the same bar to watch their spouses cheat, and then end up spending a weekend together based on one meeting? It doesn't even seem all that necessary to have this be an element of chance--one of the characters could have sought out the other, and the effect would have been the same. This kind of material feels almost giddy in nature, and the thought of the situation is goofy outside of the dark vision of writer/director Alan Rudolph.
In fact, the film is almost too dark. Some of this is downright depressing, and it never lets up--not even in the end. Jeffrey, for instance, is a character of little heart: he actually tells his wife, point blank, that he doesn't care one bit that she wants a baby, and yet, we are expected to believe that he loves her. The dynamics between the couples feel inexplicably strange, so strange that I can't tell if it's unrealistic, or just unusual. Lucky and Phyllis have an equally odd relationship, for I can't imagine any wife consenting to her husband's infidelity. Rudolph does attempt to explain her mentality on the issue, but I couldn't by it.
The acting partially makes up for all of these disturbingly unique character interactions. Christie nailed a Best Actress nomination for this performance, and she deserves it.  Nolte, whom I normally detest as an actor, is actually good here (he's toned down that macho image he always seems to be brandishing). Boyle is quiet and appealing, and takes her character through realistic developments. And Miller, who I still remember from Hackers, turns in another fine performance while managing a near-perfect American accent (although he pronounced "mountains" as "moontains").
In the end, the film left me feeling down, though I'm not sure this is what Rudolph intended. A subplot that involves the Mann's absent daughter is potent, but extremely saddening, and ends with an unsure conclusion. And what we're led to believe happens to the Byrons doesn't really feel good. I don't know if it's proper to hold these elements against Afterglow, because it's entirely possible that Rudolph intended the audience to feel this way at the end. And, if this is the case, I'm not sure why. I don't like leaving the theater wondering what I was supposed to get out of the film.
**1/2 out of **** (6/10, C+)
Visit FILM PSYCHOSIS at http://www.pyramid.net/natesmovies
Nathaniel R. Atcheson
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