This has been created by copying overview.edoc to README.md. Running make doc
creates index.html which looks better.
Thinking in terms of processes sending and receiving messages rather than return values from functions with arguments I found a bit tricky.
Joe Armstrong in this youtube video
https://www.youtube.com/watch?v=0jsdXFUvQKE&list=PLR812eVbehlwq4qbqswOWH7NLKjodnTIn&index=2
invokes the old Elvis song Return to sender
as a handy reminder that
processes sending "arguments" (as messages) to
other processes need to provide a return address to get the result back in their mailbox.
A process can simply give its return address as
self().
An important difference between Erlang and the Elvis song is the to address won't tell you
... address unknown. No such number, no such zone
if there's a quarrel,
requiring digressions into monitors and timeouts.
For a process created by spawn(Module, Function, Args) to remain alive for repeated messages, it needs to be written as a listening loop that calls itself after handling a message.
There's a tendancy to tell Erlang novices in tutorials that message structure is arbitrary. I think this misleading since Erlang is very much in the "convention over configuration" school, and teaching these conventions from the outset would make things much easier down the line.
A symptom of not understanding the idioms was my frequency server example's listening loop got increasingly cluttered with stanzas since I was writing separate ones for allocate, deallocate, inject...
The code I wrote while learning this is at gen_server_light.erl, which tries to be compatible with gen_server since I don't find it easy to understand.
Something that tripped me up a few times with gen_server is tuple arguments. For instance, the first argument of
start_link/4, ServerName
, should be {local, RegName}
, the From
argument in handle_call is a tuple {pid(), reference()}
, and the return value from
Module:init(Arg)
needs to be {ok, State}
.
Standardising the message expected by the server loop to
{call, From, Ref, Request}
and its response to
{reply, Ref, Reply}
or alternatively sending
{cast, Request}
when no response from the server is required, simplified my loop(State)
function to:
loop(Module, State0) ->
receive
{call, Pid, Ref, Request} ->
{reply, Reply, State1} = Module:handle_call(Request, {Pid, Ref}, State0),
Pid ! {reply, Ref, Reply},
loop(Module, State1);
{cast, Request} ->
{noreply, State1} = Module:handle_cast(Request, State0),
loop(Module, State1);
stop -> Module:terminate(normal, State0);
Unknown -> % includes {'EXIT', Pid, Reason} when process_flag(trap_exit, true) has been set in Module:init(Init).
{noreply, State1} = Module:handle_info(Unknown, State0),
loop(Module, State1)
end.
This is mainly for educational purposes since OTP applications have builtin loop functions. Similarly,
I've written my own versions of call
and cast
for learning purposes,
sticking to the arguments and reply conventions of
gen_server:call(ServerRef, Request) -> Reply and
gen_server:cast(ServerRef, Request) -> ok.
What call
and cast
let us do is create a simple, standard template for client functions:
allocate() -> call(frequency, allocate).
deallocate(Freq) -> call(frequency, {deallocate, Freq}).
inject(Freqs) -> cast(frequency, {inject, Freqs}).
...
with each of the above having an associated handle_call/3
or handle_cast/2
function which
I'll get to shortly.
My version of call/2
looks like:
call(RegName, Request) ->
case whereis(RegName) of
undefined -> {error, server_down}; % Needed for when server is not running in first place.
Pid ->
Ref = monitor(process, Pid),
RegName ! {call, self(), Ref, Request},
receive
{reply, Ref, Reply} ->
demonitor(Ref, [flush]),
Reply;
{'DOWN', Ref, process, Pid, Info} -> % Server crashed after message sent.
io:format("Pid ~p Info ~p", [Pid, Info]),
{error, server_down};
Unknown ->
io:format("Don't know what to do with ~p~n", [Unknown])
after 5000 -> exit(timeout)
end
end.
By default, gen_server:call/2 exits with a timeout failure after five seconds. Longer (or shorter) timeouts can be set using call(ServerRef, Request, Timeout) -> Reply.
After viewing
https://www.youtube.com/watch?v=upGZMJBh81A&list=PLR812eVbehlx6vgWGf2FLHjkksAEDmFjc&index=2
I used monitor(Type :: process, Item :: monitor_process_identifier()) -> MonitorRef and demonitor(MonitorRef) -> true to avoid a call waiting for eternity for a reply from a dead server.
If the server crashes before responding, call would receive a message like
{'DOWN',#Ref<0.1606639298.2877292545.87648>,process,<0.82.0>,normal}
My cast looks like:
cast(RegName, Request) ->
RegName ! {cast, Request},
ok.
It returns ok irrespective of whether the server received and handled the message or not.
Though we typically use pre-prepared behaviours, as a learning exercise I wanted to turn my
gen_server_light.erl into a something clients could address as -behaviour(gen_server_light)
.
There appears to be an old and new way to do this. The old way, touched on by Professor Thompson, is to export behaviour_info/1 and then write something like:
behaviour_info(callbacks) ->
[ {handle_call, 3}
, {handle_cast, 2}
, {handle_info, 2}
, {init, 1}
, {terminate, 1}
];
behaviour_info(_) -> undefined.
ie list functions the behaviour module expects to find in the client's code.
The new way appears to be to use the -callback
module attribute which via
a google search I found described at
http://davekuhlman.org/implement-a-behavior.html.
The syntax for -callback
is the same as -spec
.
-callback handle_call(Request::term(), {From::pid(), Ref::reference()}, State::term()) ->
Result::{reply, Reply::term(), NewState::term()}.
-callback handle_cast(Request::term(), State::term()) -> Result::{noreply, NewState::term()}.
-callback handle_info(Info::term(), State::term()) -> Result::{noreply, NewState::term()}.
-callback init(Args::term()) -> Result::{ok, State::term()}.
-callback terminate(Reason::term(), State::term()) -> none().
This seems to work, though when I use -behaviour(gen_server_light).
in the client module, I get a compiler
warning Warning: behaviour gen_server_light undefined
, so something appears to be not quite right.
The limited documentation says: The -callback attribute is to be preferred since the extra type information
can be used by tools to produce documentation or find discrepancies.
The key thing we do need to understand is how to write our own
Module:handle_call(Request, From, State) -> Result
functions which return {reply, Reply, NewState}
:
handle_call(allocate, _, {[], Allocated}) ->
{reply, {error, no_frequency}, {[], Allocated}};
handle_call(allocate, {From, Ref}, {[Freq|Free], Allocated}) ->
link(From),
{reply, {ok, Freq}, {Free, [{Freq, From}|Allocated]}};
handle_call({deallocate, Freq}, From, {Free, Allocated}) ->
case lists:member({Freq, From}, Allocated) of
true ->
unlink(From),
{reply, ok, {[Freq|Free], proplists:delete(Freq, Allocated)}};
false ->
io:format("Unallocated frequency ~p~n", [Freq]),
{reply, {error, unallocated}, {Free, Allocated}}
end;
handle_call(free, _From, {Free, Allocated}) ->
{reply, length(Free), {Free, Allocated}}.
When we don't need a response from the server, we use
Module:handle_cast(Request, State) -> Result
which returns {noreply, NewState}
.
handle_cast({inject, Freqs}, {Free, Allocated}) ->
{noreply, {Free ++ Freqs, Allocated}}.
Besides handle_call and handle_case, there's Module:handle_info(Info, State) -> Result which seems specifically designed to respond to timeouts and exit messages.
To trap exits with gen_server, I modified the client init/1 function to:
init(Init) ->
process_flag(trap_exit, true),
{ok, Init}.
and my handle_info looks like:
handle_info({'EXIT', Pid, Reason}, {Free, Allocated}) ->
io:format("~p exited: ~p~n", [Pid, Reason]),
case lists:keyfind(Pid, 2, Allocated) of
{Freq, Pid} ->
{noreply, {[Freq|Free], proplists:delete(Freq, Allocated)}};
false ->
{noreply, {Free, Allocated}}
end;
handle_info(Info, State) ->
io:format("Received unknown message ~p~n", [Info]),
{noreply, State}.
Erlang broadly has two ways of handling crashes: exceptions suited for traditional, sequential functions using
try ... catch ... end
, and exit signals for concurrent processes with repeat ... end
.
The key BIFs here are link(PidOrPort) -> true which links the calling process to another, or spawn_link(Module, Function, Args) -> pid() which is safer when calling spawn and then link since it does both as an atomic operation, avoiding the possibility of linking to a dead process.

{'EXIT', FromPid, Reason}
, otherwise it will call
exit(Reason)
for processes linked to it in turn to either trap, or exit and pass on to their links.kill
causes directly linked nodes to die even if they
have trap_exit set to true. Indirectly linked nodes trapping exits receive {'EXIT', FromPid, killed}
(note kill is rewritten as killed) so that they don't necessarily die.normal
, cause linked nodes to call
exit(Reason)
to pass on. A supervisor or other directly linked node, however, would receive a
{'EXIT', FromPid, normal}
message.Usually, errors are handled by sending either {ok, Value}
or {error, Reason}
messages.
When something unforeseen happens, a system raises and exception, commonly known as crashing.
Only use these to exit deeply nested recursion as in parsers.
There are three types of exceptions, each of which creates a different Class for catch:
try Expr
catch
throw:Term -> Term;
exit:Reason -> {'EXIT', Reason}
error:Reason:Stk -> {'EXIT', {Reason, Stk}}
end
{'ERROR', From, Reason}
message.
eval(Env, {div, Num, Denom}) ->
N = eval(Env, Num),
D = eval(Env, Denom),
case D of
0 -> throw(div_by_zero);
_NZ -> N div D
end;
try eval(Env, Exp) of
Res -> Res
catch
throw:div_by_zero -> 0
end
In this youtube video
https://www.youtube.com/watch?v=0jsdXFUvQKE&list=PLR812eVbehlwq4qbqswOWH7NLKjodnTIn&index=2
Joe Armstrong's provides an example which I've modified since he left function F out of the argument list for pmap, which I assume is a typo, to look like this:
pmap(F, Xs) ->
S = self(),
Pids = [do(S, F, X) || X <- Xs],
[receive {Pid, Val} -> Val end || Pid <- Pids].
do(Parent, F, X) ->
spawn(fun() -> Parent ! {self(), F(X)} end).
Another tricky concept is the receive block doesn't need to be in the function that makes the initial call, but can be in a subsidiary function.
This means call/2
call(RegName, Request) ->
Ref = monitor(process, whereis(RegName)),
RegName ! {call, self(), Ref, Request},
receive
{reply, Ref, Reply} ->
demonitor(Ref, [flush]),
Reply;
{'DOWN', Ref, process, Pid, Info} ->
io:format("Pid ~p Info ~p", [Pid, Info]),
{error, server_down};
Unknown ->
io:format("Don't know what to do with ~p~n", [Unknown])
end.
can be split into two to look like what JavaScript etc call futures
:
promise(RegName, Request) ->
Ref = monitor(process, whereis(RegName)),
RegName ! {call, self(), Ref, Request},
Ref.
yield(Ref) ->
receive
{reply, Ref, Reply} ->
demonitor(Ref, [flush]),
Reply;
{'DOWN', Ref, process, Pid, Info} ->
io:format("Pid ~p Info ~p", [Pid, Info]),
{error, server_down};
Unknown ->
io:format("Don't know what to do with ~p~n", [Unknown])
end.
No guarantees about ordering (except point to point).
https://s3.us-east-2.amazonaws.com/ferd.erlang-in-anger/text.v1.1.0.pdf
http://erlang.org/doc/apps/observer/observer_ug.html
https://github.com/RefactoringTools/percept2
https://concuerror.com/
https://dl.acm.org/doi/10.1145/1596550.1596574
https://www.cs.kent.ac.uk/projects/wrangler/Wrangler/Home.html
https://www.youtube.com/watch?v=9HVvzSsdW9k&list=PLR812eVbehlx6vgWGf2FLHjkksAEDmFjc
https://www.youtube.com/watch?v=YaUPdgtUYkoGenerated by EDoc


Welcome to my blog post demystifying the differences between inline, block and inline-block in CSS and exploring when and why you might use each. I'll be breaking each down into their individual properties with some images of my own exploration to aid in comprehension. The first thing that's important to understand is that every HTML element works on what's called a 'box model'. This means you can set specific parameters to create more space around the element and other elements, the element and it's border and the content of the element within other elements. When I talk about 'margins' and 'padding' I am referring to this box model style of organising elements. Hope this helps to explain some simple terms that look more convoluted than they really are!
Display: inline
Inline display basically means that it is 'inline' with the other HTML elements around it. The properties of the inline rule are as follows:
- Your inline element can have margins and padding set for the sides, but margins and padding cannot be set for the top and bottom of the element.
- You cannot set the width or height of an inline element.
- Other HTML elements sit either side of an inline element.
- Inline elements do not create 'line breaks'. This means that other elements can nest directly either side of them without starting a new line.
Display: block
Block display is the default of many HTML elements and is extremely easy to manipulate using the box-model due to the following properties:
- Block display respects all set margins and paddings on all sides of your HTML elements. It will not overlap in any way with another element.
- A 'line break' is forced after a block element, meaning the next element will start on the next line.
- If the width is not defined then a block element will take up the full width available.
Display: inline-block
The inline-block display allows the user a little more flexibility by providing a mix of the two other elements. The properties that define and inline-block element are:
- Other HTML elements can sit directly either side of an inline-block element due to it's lack of forced line break.
- Like block display, inline-block respects all margins and padding parameters, including top and bottom. This means this element won't overlap with other HTML elements around it.
- You can set height and width of an inline-block element.
- It basically sits like an inline element but behaves more like a block element in regards to padding, sizing and margins.
So that's the gist of the differences, but why use them? Inline is useful for any elements you want to incorporate more seamlessly into lines of text. Tags like span, string and img use inline display to incorporate HTML and CSS rules directly into their surrounding elements. Block display is useful for any elements that you want to remain in their own lines without any conflicts with other elements. It also give you full control over your box-model so is effective if you're looking for exact control over your element's parameters. Inline-block display gives you the most adaptability and is useful for things like navigation footers since you can create inline box-models and control their padding on all sides.  Thanks for checking out my blog and I hope you've learnt something useful.


| < Day Day Up > |
ExercisesAs noted in the preface, you certainly don't have to do any of the exercises, but I think it's a good idea to try at least some of them. Answers, often giving more information about the subject at hand, can be found online at http://oreilly.com/catalog/databaseid. Exercise 1-1(Repeated from the body of the chapter, but slightly reworded here.) If you haven't done so already, go through the chapter again and identify all of the places where I used the term relation when I should by rights have used the term relvar instead (or as well). Exercise 1-2Who was E. F. Codd? Exercise 1-3What's a domain? Exercise 1-4What do you understand by the term referential integrity? Exercise 1-5The terms heading, body, attribute, tuple, cardinality, and degree, defined in the body of the chapter for relation values, can all be interpreted in the obvious way to apply to relvars as well. Make sure you understand this remark. Exercise 1-6Distinguish between the two meanings of the term data model. Exercise 1-7Explain the difference between model and implementation in your own words. Exercise 1-8In the body of the chapter, I said that tables like those in Figures Figures 1-1 and 1-3 weren't relations as such but, rather, pictures of relations. What are some of the specific points of difference between such pictures and the corresponding relations? Exercise 1-9Explain data independence in your own words. Exercise 1-10(Try this exercise without looking back at the body of the chapter.) What relvars are contained in the suppliers-and-parts database? What attributes do they involve? What candidate and foreign keys exist? (The point of this exercise is that it's worth making yourself as familiar as possible with the structure, at least, of the running example. Of course, it's not so important to remember the actual data values in detail—though it wouldn't hurt if you did.) Exercise 1-11"There's only one relational model." Explain this remark. Exercise 1-12The following is an excerpt from a recent database textbook: "[It] is important to make a distinction between stored relations, which are tables, and virtual relations, which are views . . . [We] shall use relation only where a table or a view could be used. When we want to emphasize that a relation is stored, rather than a view, we shall sometimes use the term base relation or base table." This text betrays several confusions or misconceptions regarding the relational model. Identify as many as you can. Exercise 1-13The following is an excerpt from another recent database textbook: "[The relational] model . . . defines simple tables for each relation and many-to-many relationships. Cross-reference keys link the tables together, representing the relationships between entities. Primary and secondary indexes provide rapid access to data based upon qualifications." This text is intended as a definition of the relational model . . . what's wrong with it? Exercise 1-14Write SQL CREATE TABLE statements to define an SQL version of the suppliers-and-parts database. Exercise 1-15The following is a typical SQL INSERT statement against the suppliers-and-parts database: INSERT INTO SP ( SNO, PNO, QTY ) VALUES ( SNO('S5'), PNO('P6'), QTY(250) ) ; Show an equivalent relational assignment operation. Note: I'm assuming here that attributes SNO, PNO, and QTY are of types SNO, PNO, and QTY, respectively, and the expressions SNO('S5'), PNO('P6'), and QTY(250) are literals of those types, with the obvious interpretation. I'll have more to say on such matters in the next two chapters. Also, I realize I haven't yet explained the syntax of relational assignment in detail, so don't worry too much about giving a syntactically correct answer—just do the best you can. Exercise 1-16(Harder.) The following is a typical SQL UPDATE statement against the suppliers-and-parts database: UPDATE S SET STATUS = 25 WHERE S.CITY = 'Paris' ; Show an equivalent relational assignment operation. (The purpose of this exercise is to get you thinking about what's involved. I haven't told you enough in this chapter to allow you to answer it fully. See Chapter 5 for further discussion.) Exercise 1-17In the body of the chapter, I said that SQL doesn't directly support relational assignment. Does it support it indirectly? If so, how? Exercise 1-18From a practical point of view, why do you think duplicate tuples, top-to-bottom tuple ordering, and left-to-right attribute ordering are all very bad ideas? (These questions deliberately weren't answered in the body of the chapter, and this exercise might best serve as a basis for group discussion. We'll take a closer look at such matters later in the book.) |
| < Day Day Up > |


Post by: Shani Gunarathna, Greenhorn
on Aug 03, 2009 03:37:45
hi,
I am new to RMI and i am using Eclipse IDE with RMI plugin. Eventhough i was able to run the server application, i couldn't run client application.
It gives an exception as follows;
My Server class is as follows:
This works fine.
My client class is as follows:
Both the server and client policy files has following code:
Can somebody please help me to resolve this?
Thanks and regards,
Harshi
[NK: Added code tags.]
Post by: Vijitha Kumara, Bartender
on Aug 03, 2009 05:39:07
First, Please UseCodeTags when posting code. Are you able to run the server (which should display "ComputeEngine bound") ? And which parameters passed to it when running (codebase etc..).
All times above are in ranch (not your local) time.
The current ranch time is Dec 13, 2013 16:51:52.


Fundamentals of Ecology (BIO/ESS 148) :: Schedule, Spring 2022
< Back to Course Page
< Back to Syllabus
Please note that the schedule is subject to change at any time. Check back frequently for updates!
M = Monday
W = Wednesday
L = Lecture
D = Discussion
| Date | Lect/Disc_# | Lecture_Topic | Description | Required Readings | Homework |
|---|---|---|---|---|---|
| 1/19 | W-L1 | Introduction | Levels of organization | Bowman Ch. 1 | |
| Disc – | No Discussion Section | ||||
| 1/24 | M-L2 | Scales | Scales, models, and R; Intro to R | Leopold; excerpts | |
| 1/26 | W-L3 | Biomes | Distinguishing among Earth’s biomes | Bowman Ch. 3 | |
| D1 | Disc 1 | Investigating ecological problems with R | What does ecology have to do with me? | ||
| 1/31 | M-L4 | Energy 1 | Variation in temperature and water | Bowman Ch. 4 | |
| 2/2 | W-L5 | Energy 2 | Energetic pathways in ecology | Bowman Ch. 5 | |
| D2 | Disc 2 | Temperature as an ecological constraint | Gunderson & Leal 2015 | H1 (Fri) | |
| 2/7 | M-L6 | Allometry 1 | Allometry & Macroecology 1 | West & Brown | |
| 2/9 | W-L7 | Allometry 2 | Allometry & Macroecology 2 | ||
| D3 | Disc 3 | Allometry and metabolic scaling | H2 (Fri) | ||
| 2/14 | M-L8 | Evolution 1 | Ecology as the driver of natural selection | Bowman Ch. 6 | |
| 2/16 | W | Exam I | |||
| D4 | Disc 4 | Evolution by Natural Selection | |||
| 2/21 | M | President’s Day – No Class | |||
| 2/23 | W-L9 | Evolution 2 | Evolutionary change | Bowman Ch. 6 | |
| Disc – | No Discussion Section | H3 (Fri) | |||
| 2/28 | M-L10 | Life History | Life history diversity & tradeoffs | ||
| 3/2 | W-L11 | Behavior | Behavioral ecology | Bowman Ch. 8, Sinervo | |
| D5 | Disc 5 | Life Histories | H4 (Fri) | ||
| 3/7 | M-L12 | Populations 1 | Density dependence and population dynamics | Bowman Ch. 10 | |
| 3/9 | W-L13 | Populations 2 | Logistic Growth & Discrete dynamics | ||
| D6 | Disc 6 | Exponential and Logistic Growth | H5 (Fri) | ||
| 3/14 | M-L14 | Competition | Intro to competition | Bowman Ch. 14 | |
| 3/16 | W | Exam II | |||
| D7 | Disc 7 | Exponential and Logistic Growth 2 | |||
| 3/21 | M | Spring Break – No Class | |||
| 3/23 | W | Spring Break – No Class | |||
| 3/28 | M-L15 | Competition 2 | Competition dynamics 1 | ||
| 3/30 | W-L16 | Competition 3 | Competition dynamics 2 | ||
| D8 | Disc 8 | Lotka-Volterra competition dynamics | |||
| 4/4 | M-L17 | Predation 1 | Herbivory and Predation | Bowman Ch. 12 | |
| 4/6 | W-L18 | Predation 2 | Predation dynamics | ||
| D9 | Disc 9 | Lotka-Volterra predation dynamics | H6 (Wed) | ||
| 4/11 | M-L19 | Disease | The dynamics of disease | Bowman 13.4-end, Blackwood to 2.2.2,R0 is just an average | |
| 4/13 | W-L20 | No class | |||
| D10 | Disc 10 | Dynamics of disease | H7 (Wed) | ||
| 4/18 | M-L21 | Parasitism | Parasites and parasitoids | Bowman Chap. 13 | |
| 4/20 | W | Exam III | |||
| D11 | Disc – | None | |||
| 4/25 | M-L22 | Interactions 1 | Mutualisms | Bowman Chap. 15 | |
| 4/27 | W-L23 | Interactions 2 | Food webs | Bowman Chap. 21 | |
| D12 | Disc 11 | Species interaction networks | H8 (Wed) | ||
| 5/2 | M-L24 | Communities 1 | Island biogeography | Bowman Chap. 18.3 | |
| 5/4 | W-L25 | Communities 2 | Ecological communities | Bowman Chap. 16.2-16.3 | |
| D13 | Disc 12 | Island biogeography | |||
| 5/7 | Sat | FINAL EXAM | Comprehensive (11:30-2:30 PM) |


Only {{flight.price | currency : flight.currency}}
Leaving: {{flight.dateFrom | date:'medium'}} To: {{flight.dateTo | date:'medium'}}Only {{flight.price | currency : flight.currency}}
Leaving: {{flight.dateFrom | date:'medium'}} To: {{flight.dateTo | date:'medium'}}


Giving exams is easy and its fully online based. Exam is AI based and its fully depend on weightage.
Exams will be on individual courses.Video lectures or information about the part where your weakness.


Pantene Color Adapt Collection
Introducing Pantene’s Pro V Color Adapt collection. Our color adapt technology senses the unique
needs of multi tonal hair, to let every inch, of every strand, stand out loud.


{% load staticfiles %}
It’s the fastest way to:
Oh and we'll never mess up with your data.
Ask for an other login option


--- layout: home author_profile: true ---
My name is Marcos. I have a Bachelor's degree in Computational Mathematics from the Federal University of Minas Gerais. During my undergraduate program, I actively participated in ICPC programming contests, improving my skills in using data structures to solve real-world problems.
In my final semester, I got interested in data science and machine learning when I took the course on Fundamental Statistics for Data Science. This prompted me to pursue a Master's degree in computer science, where I focused on developing an algorithm for automatically generating heterogeneous music playlists. Throughout my Master's program, I had the opportunity to learn more about statistics and machine learning, expanding my knowledge in these areas.
Following the completion of my Master's degree, I started my professional career as a data scientist at Big Data, a company dedicated to providing AI solutions to enhance our clients' revenue. In this role, I have gained valuable experience working with AWS solutions, databases, and machine learning algorithms. Additionally, I actively contribute as a software engineer, implementing algorithms and developing automated pipelines for Big Data's products.
I'm passionate about mathematical modeling, problem-solving, programming, and technology. I am continually motivated by the potential to make a meaningful impact on society through technological solutions. Moreover, I place great importance on implementing the best possible solutions, with a strong focus on code quality and extensive code testing.


My To Do List
The following are the routes used in this assignment.
Routes Details
| Method | Route | Description |
|---|---|---|
| GET | / | Displays the index page. |
| GET | /api/todo | Responds with an array listing of every ToDoEntry |
| GET | /api/todo/open | Responds with an array listing of every ToDoEntry with status of 'open' |
| GET | /api/todo/completed | Responds with an array listing of every ToDoEntry with status of 'completed' |
| GET | /api/todo/:id | Responds with a single ToDoEntry of particular 'id' |
| POST | /api/todo | Create and store a new ToDoEntry; if successful, it will respond with the new ToDoEntry in the response.
Request only accepts 'author', 'taskTitle' and 'taskDescription' |
| POST | /api/todo/:id/notes | Adds a note to the ToDoEntry with ':id' and responds with the updated entry.
Request should be provided as: {note: "The note text"} |
| PUT | /api/todo/:id | Updates the ToDoEntry with ':id' and responds with the updated entry.
Request only accepts 'taskTitle', 'taskDescription' and 'status' |
| DELETE | /api/todo/:id | Removes the ToDoEntry with ':id' and responds with the success/error response |


Inventory Grid
an inventory grid similar to diablo
Class Hierarchy
Go to the textual class hierarchy
Generated by
1.9.1


{include file="../application/index/view/Jquery_Mobile/header.html" /} {block name="content"}content{/block} {include file="../application/index/view/Jquery_Mobile/footer.html" /}


Do you know how easy it is to control?
Copyright© 2003-2007 Idemfactor Solutions, Inc. All rights reserved.


As the Darter wallowed toward the docks of Tear, on the west bank of the River Erinin, Egwene did not see anything of the oncoming city. Slumped head down at the rail, she stared down at the waters of the Erinin rolling past the ship’s fat hull, and the frontmost sweep on her side as it swung into her vision and back again, cutting white furrows in the river. It made her queasy, but she knew raising her head would only make the sickness worse. Looking at the shore would only make the slow, corkscrew motion of the Darter more apparent.
The vessel had moved in that twisting roll ever since Jurene. She did not care how it had sailed before then; she found herself wishing the Darter had sunk before reaching Jurene. She wished they had made the captain put in at Aringill so they could find another ship. She wished they had never gone near a ship. She wished a great many things, most of them just to take her mind off where she was.
The twisting was less now, under sweeps, than it had been under sail, but it had gone on too many days now for the change to make much difference to her. Her stomach seemed to be sloshing about inside her like milk in a stone jug. She gulped and tried to forget that image.
They had not done much in the way of planning on the Darter, she and Elayne and Nynaeve. Nynaeve could seldom go ten minutes without vomiting, and seeing that always made Egwene lose whatever food she had managed to get down. The increasing warmth as they went further downriver did not help. Nynaeve was below now, no doubt with Elayne holding a basin for her again.
Oh, Light, no! Don’t think about that! Green fields. Meadows. Light, meadow, do not heave like that. Hummingbirds. No, not hummingbirds! Larks. Larks singing.
“Mistress Joslyn? Mistress Joslyn!”
It took her a moment to recognize the name she had chosen to give Captain Canin, and the captain’s voice.
“We are docking, Mistress Joslyn. You’ve kept saying how eager you were to be ashore. Well, we’re there.” His voice did not hide his eagerness to be rid of his three passengers, two of whom did little more than sick up, as he called it, and moan all night.
Barefoot, shirtless sailors were tossing lines to men on the stone dock that thrust out into the river; the dockmen seemed to be wearing long leather vests in place of shirts. The sweeps had already been drawn in, except for a pair fending the ship off from coming against the dock too hard. The flat stones of the dock were wet; the air had a feel of rain not long gone, and that was a little soothing. The twisting motion had ceased some time since, she realized, but her stomach remembered. The sun was falling toward the west. She tried not to think of supper.
“Very good, Captain Canin,” she said with all the dignity she could summon. He’d not sound like that if I were wearing my ring, not even if I were sick on his boots. She shuddered at the picture in her mind.
Her Great Serpent ring and the twisted ring of the ter’angreal hung on a leather cord about her neck, now. The stone ring felt cool against her skin—almost enough to counteract the damp warmth of the air—but aside from that, she had found that the more she used the ter’angreal, the more she wanted to touch it, without pouch or cloth between it and her.
Tel’aran’rhiod still showed her little of immediate use. Sometimes there had been glimpses of Rand, or Mat, or Perrin, and more in her own dreams without the ter’angreal, but nothing of which she could make any sense. The Seanchan, who she refused to think about. Nightmares of a Whitecloak putting Master Luhhan in the middle of a huge, toothed trap for bait. Why should Perrin have a falcon on his shoulder, and what was important about him choosing between that axe he wore now and a blacksmith’s hammer? What did it mean that Mat was dicing with the Dark One, and why did he keep shouting, “I am coming!” and why did she think in the dream that he was shouting at her? And Rand. He had been sneaking through utter darkness toward Callandor, while all around him six men and five women walked, some hunting him and some ignoring him, some trying to guide him toward the shining crystal sword and some trying to stop him from reaching it, appearing not to know where he was, or only to see him in flashes. One of the men had eyes of flame, and he wanted Rand dead with a desperation she could nearly taste. She thought she knew him. Ba’alzamon. But who were the others? Rand in that dry, dusty chamber again, with those small creatures settling into his skin. Rand confronting a horde of Seanchan. Rand confronting her, and the women with her, and one of them was a Seanchan. It was all too confusing. She had to stop thinking about Rand and the others and put her mind to what was right ahead of her. What is the Black Ajah up to? Why don’t I dream something about them? Light, why can’t I learn to make it do what I want?
“Have the horses put ashore, Captain,” she told Canin. “I will tell Mistress Maryim and Mistress Caryla.” That was Nynaeve—Maryim—and Elayne—Caryla.
“I have sent a man to tell them, Mistress Joslyn. And your animals will be on the dock as soon as my men can rig a boom.”
He sounded very pleased to be rid of them. She thought about telling him not to hurry, but rejected it immediately. The Darter’s corkscrewing might have stopped, but she wanted dry land under her feet again. Now. Still, she stopped to pat Mist’s nose and let the gray mare nuzzle her palm, to let Canin see she was in no great rush.
Nynaeve and Elayne appeared at the ladder from the cabins, laden with their bundles and saddlebags, and Elayne almost as laden with Nynaeve. When Nynaeve saw Egwene watching, she pushed herself away from the Daughter-Heir and walked unaided the rest of the way to where men were setting a narrow gangplank to the dock. Two crewmen came to fasten a wide canvas sling under Mist’s belly, and Egwene hurried below for her own things. When she came back up, her mare was already on the dock and Elayne’s roan dangled in the canvas sling halfway there.
For a moment after her feet were on the dock, all she felt was relief. This would not pitch and roll. Then she began to look at this city whose reaching had caused them such pains.
Stone warehouses backed the long docks themselves, and there seemed to be a great many ships, large and small, alongside the docks or anchored in the river. Hastily she avoided looking at the ships. Tear had been built on flat land, with barely a bump. Down muddy dirt streets between the warehouses, she could see houses and inns and taverns of wood and stone. Their roofs of slate or tile had oddly sharp corners, and some rose to a point. Beyond these, she could make out a high wall of dark gray stone, and behind it the tops of towers with balconies high around them and white-domed palaces. The domes had a squared shape to them, and the tower tops looked pointed, like some of the roofs outside the wall. All in all, Tear was easily as big as Caemlyn or Tar Valon, and if not so beautiful as either, it was still one of the great cities. Yet she found it hard to look at anything but the Stone of Tear.
She had heard of it in stories, heard that it was the greatest fortress in the world and the oldest, the first built after the Breaking of the World, yet nothing had prepared her for this sight. At first she thought it was a huge, gray stone hill or a small, barren mountain covering hundreds of hides, its length stretching from the Erinin west through the wall and into the city. Even after she saw the huge banner flapping from its greatest height—three white crescent moons slanting across a field half red, half gold; a banner waving at least three hundred paces above the river, yet large enough to be clearly seen at that height—even after she made out battlements and towers, it was difficult to believe the Stone of Tear had been built rather than carved out of a mountain already there.
“Made with the Power,” Elayne murmured. She was staring at the Stone, too. “Flows of Earth woven to draw stone from the ground, Air to bring it from every corner of the world, and Earth and Fire to make it all in one piece, without seam or joint or mortar. Atuan Sedai says the Tower could not do it, today. Strange, given how the High Lords feel concerning the Power now.”
“I think,” Nynaeve said softly, eyeing the dockmen moving around them, “that given that very thing, we should not mention certain other things aloud.” Elayne appeared torn between indignation—she had spoken very softly—and agreement; the Daughter-Heir agreed with Nynaeve too often and too readily to suit Egwene.
Only when Nynaeve is right, she admitted to herself grudgingly. A woman who wore the ring, or was even associated with Tar Valon, would be watched here. The barefoot, leather-vested dockmen were not paying the three of them any mind as they hurried about, carrying bales or crates on their backs as often as on barrows. A strong odor of fish hung in the air; the next three docks had dozens of small fishing boats clustered around them, just like those in the drawing in the Amyrlin’s study. Shirtless men and barefoot women were hoisting baskets of fish out of the boats, mounds of silver and bronze and green, and colors she had never suspected fish might be, such as bright red, and deep blue, and brilliant yellow, some with stripes or splotches of white and other colors.
She lowered her voice for Elayne’s ear alone. “She is right. Caryla. Remember why you are Caryla.” She did not want Nynaeve to hear such admissions. Her face did not change when she heard, but Egwene could feel satisfaction radiating from her like heat from a cook stove.
Nynaeve’s black stallion was just being lowered to the dock; sailors had already carried their tack off the ship and simply dumped it on the wet stones of the dock. Nynaeve glanced at the horses and opened her mouth—Egwene was sure it was to tell them to saddle their animals—then closed it again, tight-lipped, as if it had cost her an effort. She gave her braid one hard tug. Before the sling was well out of the way, Nynaeve tossed the blue-striped saddle blanket across the black’s back and hoisted her high-cantled saddle atop it. She did not even look at the other two women.
Egwene was not anxious to ride at that moment—the motion of a horse might be too close to the motion of the Darter for her stomach—but another look at those muddy streets convinced her. Her shoes were sturdy, but she would not enjoy having to clean mud off them, or having to hold her skirts up as she walked, either. She saddled Mist quickly and climbed onto her back, settling her skirts, before she could decide the mud might not be so bad after all. A little needlework on the Darter—Elayne had done it all, this time; the Daughter-Heir sewed a very fine stitch—had divided all their dresses nicely for riding astride.
Nynaeve’s face paled for a moment when she swung into her saddle and the stallion decided to frisk.  By the time they had ridden slowly past the warehouses, she could speak. “We need to locate Liandrin and the others without them learning we are asking after them. They surely know we are coming—that someone is, at least—but I would like them not to know we are here until it is too late for them.” She drew a deep breath. “I confess I have not thought of any way to do this. Yet. Do either of you have any suggestions?”
“A thief-taker,” Elayne said without hesitation. Nynaeve frowned at her.
“You mean like Hurin?” Egwene said. “But Hurin was in the service of his king. Wouldn’t any thief-taker here serve the High Lords?”
Elayne nodded, and for a moment Egwene envied the Daughter-Heir her stomach. “Yes, they would. But thief-takers are not like the Queen’s Guards, or the Tairen Defenders of the Stone. They serve the ruler, but people who have been robbed sometimes pay them to retrieve what was stolen. And they also sometimes take money to find people. At least, they do in Caemlyn. I cannot think it is different here in Tear.”
“Then we take rooms at an inn,” Egwene said, “and ask the innkeeper to find us a thief-taker.”
“Not an inn,” Nynaeve said as firmly as she guided the stallion; she never seemed to let the animal get out of her control. After a moment she moderated her tone a little. “Liandrin, at least, knows us, and we have to assume the others do, too. They will surely be watching the inns for whoever followed the trail they sprinkled behind them. I mean to spring their trap in their faces, but not with us inside. We’ll not stay at an inn.”
Egwene refused to give her the satisfaction of asking.
“Where then?” Elayne’s brow furrowed. “If I made myself known—and could make anyone believe it, in these clothes and with no escort—we would be welcomed by most of the noble Houses, and very likely in the Stone itself—there are good relations between Caemlyn and Tear—but there would be no keeping it quiet. The entire city would know before nightfall. I cannot think of anywhere else except an inn, Nynaeve. Unless you mean to go out to a farm in the country, but we will never find them from the country.”
Nynaeve glanced at Egwene. “I will know when I see it. Let me look.”
Elayne’s frown swept from Nynaeve to Egwene and back again.
Egwene put her attention firmly on the street they were riding along. I will be burned if I’ll let her think I am even wondering!
There were not a great many people out, not compared to the streets of Tar Valon. Perhaps the thick mud in the street discouraged them. Carts and wagons lurched past, most pulled by oxen with wide horns, the carter or wagoneer walking alongside with a long goad of some pale, ridged wood. No carriages or sedan chairs used these streets. The odor of fish hung in the air here, too, and no few of the men who hurried past carried huge baskets full of fish on their backs. The shops did not look prosperous; none displayed wares outside, and Egwene seldom saw anyone go in. The shops had signs—the tailor’s needle and bolt of cloth, the cutler’s knife and scissors, the weaver’s loom, and the like—but the paint on most of them was peeling. The few inns had signs in as bad a state, and looked no busier. The small houses crowded between inns and shops often had tiles or slates missing from their roofs. This part of Tear, at least, was poor. And from what she saw on the faces, few of the people here cared to try any longer. They were moving, working, but most of them had given up. Few as much as glanced at three women riding where everyone else walked.
The men wore baggy breeches, usually tied at the ankle. Only a handful wore coats, long, dark garments that fit arms and chest tightly, then became looser below the waist. There were more men in low shoes than in boots, but most went barefoot in the mud. A good many wore no coat or shirt at all, and had their breeches held up by a broad sash, sometimes colored and often dirty. Some had wide, conical straw hats on their heads, and a few, cloth caps that sagged down one side of the face. The women’s dresses had high necks, right up to their chins, and hems that stopped at the ankle. Many had short aprons in pale colors, sometimes two or three, each smaller than the one beneath it, and most wore the same straw hats as the men, but dyed to complement the aprons.
It was on a woman that she first saw how those who wore shoes dealt with the mud. The woman had small wooden platforms tied to the soles of her shoes, lifting them two hands out of the mud; she walked along as if her feet were planted firmly on the ground. Egwene saw others wearing the platforms after that, men as well as women. Some of the women went barefoot, but not as many as the men.
She was wondering which shop might sell those platforms, when Nynaeve suddenly turned her black down an alleyway between a long, narrow two-story house and a stone-walled potter’s shop. Egwene exchanged glances with Elayne—the Daughter-Heir shrugged—and then they followed. Egwene did not know where Nynaeve was going or why—and she meant to have words with her about it—but she did not mean to become separated, either.
The alley suddenly let into a small yard behind the house, fenced in by the buildings around it. Nynaeve had already dismounted and tied her reins to a fig tree, where the stallion could not reach the green things sprouting in a vegetable patch that took up half the yard. A line of stones had been laid to make a path to the back door. Nynaeve strode to the door and knocked.
“What is it?” Egwene demanded in spite of herself. “Why are we stopping here?”
“Did you not see the herbs in the front windows?” Nynaeve knocked again.
“Herbs?” Elayne said.
“A Wisdom,” Egwene told her as she got down from her saddle and tied Mist alongside the black. Gaidin is no good name for a horse. Does she think I don’t know who she means it for? “Nynaeve has found herself a Wisdom, or Seeker, or whatever they call her here.”
A woman opened the door just enough to look out suspiciously. At first Egwene thought she was stout, but then the woman opened the door the rest of the way. She was certainly well padded, but the way she moved spoke of muscle underneath. She looked as strong as Mistress Luhhan, and some in Emond’s Field claimed Alsbet Luhhan was almost as strong as her husband. It was not true, but it was not far wrong.
“How can I help you?” the woman said in an accent like the Amyrlin’s. Her gray hair was arranged in thick curls that hung down the sides of her head, and her three aprons were in shades of green, each slightly darker than the one below, but even the topmost pale. “Which one of you needs me?”
“I do,” Nynaeve said. “I need something for a queasy stomach. And perhaps one of my companions does, too. That is, if we’ve come to the right place?”
“You’re not Tairen,” the woman said. “I should have known that by your clothes, before you spoke. I’m called Mother Guenna. I am called a Wise Woman, too, but I’m old enough not to trust that to caulk a seam. You come, and I will give you something for your stomach.”
It was a neat kitchen, though not large, with copper pots hanging on the wall, and dried herbs and sausages from the ceiling. Several tall cupboards of pale wood had doors carved with some sort of tall grass. The table had been scrubbed almost white, and the backs of the chairs were carved with flowers. A pot of fishy-smelling soup was simmering atop the stone stove, and a kettle with a spout, just beginning to steam. There was no fire on the stone hearth, for which Egwene was more than grateful; the stove added enough to the heat, though Mother Guenna seemed not to notice it at all. Dishes lined the mantel, and more were stacked neatly on shelves to either side. The floor looked as if it had just been swept.
Mother Guenna closed the door after them, and as she was crossing the kitchen to her cupboards, Nynaeve said, “Which tea will you give me? Chainleaf? Or bluewort?”
“I would if I had any of either.” Mother Guenna rooted in the shelves a moment and came out with a stone jar. “Since I’ve had no time to glean of late, I will give you a brew of marshwhite leaves.”
“I am not familiar with that,” Nynaeve said slowly.
“It works as well as chainleaf, but it has a bite to the taste some don’t care for.” The big woman sprinkled dried and broken leaves into a blue teapot and carried it over to the fireplace to add hot water. “Do you follow the craft, then? Sit.” She gestured to the table with a hand holding two blue-glazed cups shed had taken from the mantel. “Sit, and we’ll talk. Which one of you has the other stomach?”
“I am fine,” Egwene said casually as she took a chair. “Are you queasy, Caryla?” The Daughter-Heir shook her head with perhaps a touch of exasperation.
“No matter.” The gray-haired woman poured out a cup of dark liquid for Nynaeve, then sat across the table from her. “I made enough for two, but marshwhite tea keeps longer than salted fish. It works better the longer it sits, too, but it also grows more bitter. Makes a race between how much you need your stomach settled and what your tongue can stand. Drink, girl.” After a moment, she filled the second cup and took a sip. “You see? It will not hurt you.”
Nynaeve raised her own cup, making a small sound of displeasure at the first taste. When she lowered the cup again, though, her face was smooth. “It is just a little bitter perhaps. Tell me, Mother Guenna, will we have to put up with this rain and mud much longer?”
The older woman frowned, parceling displeasure among the three of them before she settled on Nynaeve. “I am not a Sea Folk Windfinder, girl,” she said quietly. “If I could tell the weather, I’d sooner stick live silverpike down my dress than admit it. The Defenders take that sort of thing for next to Aes Sedai work. Now, do you follow the craft or not? You look as if you have been traveling. What is good for fatigue?” she barked suddenly.
“Flatwort tea,” Nynaeve said calmly, “or andilay root. Since you ask questions, what would you do to ease birthing?”
Mother Guenna snorted. “Apply warm towels, child, and perhaps give her a little whitefennel if it was an especially hard birth. A woman needs no more than that, and a soothing hand. Can’t you think of a question any country farmwife could not answer? What do you give for pains in the heart? The killing kind.”
“Powdered gheandin blossom on the tongue,” Nynaeve said crisply.

They settled down as if testing each other, tossing questions and answers back and forth faster and faster. Sometimes the questioning lagged a moment when one spoke of a plant the other knew only by another name, but they picked up speed again, arguing the merits of tinctures against teas, salves against poultices, and when one was better than another. Slowly, all the quick questions began shifting toward the herbs and roots one knew that the other did not, digging for knowledge. Egwene began to grow irritable listening.
“After you give him the boneknit,” Mother Guenna was saying, “you wrap the broken limb in toweling soaked in water where you’ve boiled blue goatflowers—only the blue, mind!”—Nynaeve nodded impatiently—“and as hot as he can stand it. One part blue goatflowers to ten of water, no weaker. Replace the towels as soon as they stop steaming, and keep it up all day. The bone will knit twice as fast as with boneknit alone, and twice as strong.”
“I will remember that,” Nynaeve said. “You mentioned using sheepstongue root for eye pain. I’ve never heard—”
Egwene could stand it no longer. “Maryim,” she broke in, “do you really believe you’ll ever need to know these things again? You are not a Wisdom any longer, or have you forgotten?”
“I have not forgotten anything,” Nynaeve said sharply. “I remember a time when you were as eager to learn new things as I am.”
“Mother Guenna,” Elayne said blandly, “what do you do for two women who cannot stop arguing?”
The gray-haired woman pursed her lips and frowned at the table. “Usually, men or women, I tell them to stay away from each other. That is the best thing, and the easiest.”
“Usually?” Elayne said. “What if there is a reason they cannot stay apart. Say they are sisters.”
“I do have a way to make an arguer stop,” the big woman said slowly. “It is not something I urge anyone to try, but some do come to me.” Egwene thought there was a suspicion of a smile at the corners of her mouth. “I charge a silver mark each for women. Two for men, because men make more fuss. There are some will buy anything, if it costs enough.”
“But what is the cure?” Elayne asked.
“I tell them they have to bring the other one here with them, the one they argue with. Both expect me to quiet the other’s tongue.” Despite herself, Egwene was listening. She noticed Nynaeve seemed to be paying sharp attention, as well. “When they have paid me,” Mother Guenna continued, flexing one hefty arm, “I take them out back and stick their heads in my rain barrel till they agree to stop their arguing.”
Elayne burst out laughing.
“I think I may have done something very like that myself,” Nynaeve said in a voice that was much too light. Egwene hoped her own expression looked nothing like Nynaeve’s.
“I’d not be surprised if you have.” Mother Guenna was grinning openly now. “I tell them the next time I hear they’ve been arguing, I will do it for free, but I’ll use the river. It is remarkable how often the cure works, for men especially. And it is remarkable what it has done for my reputation. For some reason, none of the people I cure this way ever tells anyone else the details, so someone asks for the cure every few months.  I trust none of you have any wish to spend a silver mark.”
“I think not,” Egwene said, and glared at Elayne when she went off in peals of laughter again.
“Good,” the gray-haired woman said. “Those I cure of arguing have a tendency to avoid me like stingweed caught in their nets, unless they actually take sick, and I am enjoying your company. Most of those who come at present want something to take away bad dreams, and they grow sour when I have nothing to give them.” For a moment she slipped into a frown, rubbing her temples. “It is good to see three faces that do not look as if there is nothing left but to jump over the side and drown. If you are staying long in Tear, you must come see me again. The girl called you Maryim? I am Ailhuin. The next time, we’ll talk over some good Sea Folk tea instead of something that curdles your tongue.  In fact, if you have time to stay now, I’ll brew a pot of Tremalking black. Not long till supper, either. It’s just bread and soup and cheese, but you are welcome.”
“That would be very nice, Ailhuin,” Nynaeve said. “Actually . . . Ailhuin, if you have a spare bedroom, I’d like to hire it for the three of us.”
The big woman looked at each of them without saying anything. Getting to her feet, she tucked the pot of marshwhite tea away in the herb cupboard, then fetched a red teapot and a pouch from another. Only when she had brewed a pot of Tremalking black, put four clean cups and a bowl of honeycomb on the table along with pewter spoons, and reclaimed her chair did she speak.
“I’ve three empty bedrooms upstairs, now my daughters are all married. My husband, the Light shine on him, was lost in a storm in the Fingers of the Dragon near twenty years ago. There need be no talk of hiring, if I decide to let you have the rooms. If, Maryim.” Stirring honey into her tea, she studied them again.
“What will make you decide?” Nynaeve asked quietly.
Ailhuin continued to stir, as if she had forgotten to drink. “Three young women, riding fine horses. I don’t know much about horses, but those look as fine as what the lords and ladies ride, to me. You, Maryim, know enough of the craft that you ought to have hung herbs in your window already, or should be choosing where to do it. I’ve never heard of a woman practicing the craft too far from where she was born, but by your tongue, you are a long way.” She glanced at Elayne. “Not many places with hair that color. Andor, I’d say, by your speech. Fool men are always talking about finding a yellow-haired Andor girl. What I want to know is why? Running away from something? Or running after something? Only, you don’t look like thieves to me, and I never heard of three women chasing after a man together. So tell me why, and if I like it, the rooms are yours. If you want to pay something, you buy a bit of meat now and then. Meat is dear since the trade up to Cairhien fell away. But first the why, Maryim.”
“We are chasing after something, Ailhuin,” Nynaeve said. “Or rather, after some people.” Egwene schooled herself to stillness and hoped she was doing as well as Elayne, who was sipping her tea as if she were listening to talk about dresses. Egwene did not believe Ailhuin Guenna’s dark eyes missed a great deal. “They stole some things, Ailhuin,” Nynaeve went on. “From my mother. And they did murder. We are here to see justice done.”
“Burn my soul,” the large woman said, “have you no menfolk? Men are not good for much beyond heavy hauling and getting in the way, most of the time—and kissing and such—but if there’s a battle to be fought or a thief to catch, I say let them do it. Andor is as civilized as Tear. You are not Aiel.”
“There was no one else but us,” Nynaeve said. “Those who might have come in our place were killed.”
The three murdered Aes Sedai, Egwene thought. They could not have been Black Ajah. But if they had not been killed, the Amyrlin would not have been able to trust them. She’s trying to keep to the bloody Three Oaths, but she is skirting it close.
“Aaah,” Ailhuin said sadly. “They killed your men? Brothers, or husbands, or fathers?” Spots of color bloomed in Nynaeve’s cheeks, and the older woman mistook the emotion. “No, don’t tell me, girl. I’ll not pull up old grief. Let it lie on the bottom till it melts away. There, there, you calm yourself.” It was an effort for Egwene not to growl with disgust.
“I must tell you this,” Nynaeve said in a stiff voice. The red still colored her face. “These murderers and thieves are Darkfriends. They are women, but they are as dangerous as any swordsman, Ailhuin. If you wondered why we did not seek an inn, that is why. They may know we follow, and they may be watching for us.”
Ailhuin waved it all away with a sniff. “Of the four most dangerous folk I know, two are women who never carry as much as a knife, and only one of the men is a swordsman. As for Darkfriends . . . Maryim, when you are as old as I, you’ll learn that false Dragons are dangerous, lionfish are dangerous, sharks are dangerous, and sudden storms out of the south; but Darkfriends are fools. Filthy fools, but fools. The Dark One is locked up where the Creator put him, and no Fetches or fangfish to scare children will get him out. Fools don’t frighten me unless they’re working the boat I’m riding. I suppose you don’t have any proof you could take to the Defenders of the Stone? It would be just your word against theirs?”
What is a “Fetch”? Egwene wondered. Or a “fangfish,” for that matter.
“We will have proof when we find them,” Nynaeve said. “They will have the things they stole, and we can describe them. They are old things, and of little value to anyone but us, and our friends.”
“You would be surprised what old things can be worth,” Ailhuin said dryly. “Old Leuese Mulan pulled up three heartstone bowls and a cup in his nets last year, down in the Fingers of the Dragon. Now, instead of a fishing smack, he owns a ship trading up the river. Old fool did not even know what he had till I told him. Very likely there’s more right where those came from, but Leuese couldn’t even remember the exact spot. I do not know how he ever managed to get a fish into his net. Half the fishing boats in Tear were down there for months afterwards, dragging for cuendillar, not grunts or flatfish, and some had lords saying where to pull the nets. That’s what old things can be worth, if they are old enough. Now, I’ve decided you do need a man in this, and I know just the one.”
“Who?” Nynaeve said quickly. “If you mean a lord, one of the High Lords, remember we have no proof to offer till we find them.”
Ailhuin laughed until she wheezed. “Girl, nobody from the Maule knows a High Lord, or any kind of lord. Mudfish don’t school with silversides. I will bring you the dangerous man I know who isn’t a swordsman, and the more dangerous of the two, at that. Juilin Sandar is a thief-catcher. The best of them. I do not know how it is in Andor, but here a thief-catcher will work for you or me as soon as for a lord or a merchant, and charge less at that. Juilin can find these women for you if they can be found, and bring your things back without you having to go near these Darkfriends.”
Nynaeve agreed as if she were still not entirely sure, and Ailhuin tied those platforms to her shoes—clogs, she called them—and hurried out. Egwene watched her go, through one of the kitchen windows, past the horses and around the corner up the alley.
“You are learning how to be Aes Sedai, Maryim,” she said as she turned from the window. “You manipulate people as well as Moiraine.” Nynaeve’s face went white.
Elayne stalked across the floor and slapped Egwene’s face. Egwene was so shocked she could only stare. “You go too far,” the golden-haired woman said sharply. “Too far.  Did you give Ailhuin your true name? Nynaeve told her what we could, that we seek Darkfriends, and that was risk enough, linking us with Darkfriends. She told her they were dangerous, murderers. Would you have had her say they are Black Ajah? In Tear? Would you risk everything on whether Ailhuin would keep that to herself?”
Egwene rubbed her cheek gingerly. Elayne had a strong arm. “I do not have to like doing it.”
“I know,” Elayne sighed. “Neither do I. But we do have to.”
Egwene turned back to peering through the window at the horses. I know we do. But I do not have to like it.


7. Package Description Format Specification History¶
Package descriptions need to specify the version of the
specification they need to be interpreted in via the
cabal-version
declaration. The following list describes
changes that occurred in each version of the cabal specification
relative to the respective preceding published version.
Note
The sequence of specification version numbers is not
contiguous because it’s synchronised with the version of the
Cabal
library. As a consequence, only even versions are
considered proper published versions of the specification as odd
versions of the Cabal
library denote unreleased development
branches which have no stability guarantee.
7.1. cabal-version: 3.0
¶
Added the
extra-dynamic-library-flavours
field to specify non-trivial variants of dynamic flavours. It isextra-library-flavours
but for shared libraries. Mainly useful for GHC’s RTS library.Free text fields (e.g.
description
) preserve empty lines and indentation. In other words, you don’t need to add dots for blank lines.License fields use identifiers from SPDX License List version
3.6 2019-07-10
Remove deprecated
hs-source-dir
,extensions
andbuild-tools
fields.Common stanzas are now allowed also in the beginnning of conditional sections. In other words, the following is valid
library import deps if flag(foo) import foo-deps
Allow redundant leading or trailing commas in package fields with optional commas, such as
exposed-modules
Require fields with optional commas to consistently omit or place commas between elements.
Changed the behavior of
extra-bundled-libraries
field. The naming convention of dynamic library files (e.g. generated by a custom build script) has changed. For library names prefixed with “C”, the dynamic library file name(s) must be of the form lib<library-name>.<dyn-library-extension>* instead of the old libC<library-name>-ghc<ghc-flavour><ghc-version>.<dyn-library-extension>New set-notation syntax for
==
and^>=
operators, seebuild-depends
field documentation for examples.Allow more whitespace in
mixins
fieldWildcards are disallowed in
pkgconfig-depends
, Yet the pkgconfig format is relaxed to accept e.g. versions like1.1.0h
.New
autogen-includes
for specifyinginstall-includes
which are autogenerated (e.g. by aconfigure
script).New
asm-sources
andasm-options
fields added for suppporting bundled foreign routines implemented in assembler.New
cmm-sources
andcmm-options
fields added for suppporting bundled foreign primops implemented in C–.
7.2. cabal-version: 2.4
¶
- Wildcard matching has been expanded. All previous wildcard
expressions are still valid; some will match strictly more files
than before. Specifically:
- Double-star (
**
) wildcards are now accepted for recursive matching immediately before the final slash; they must be followed by a filename wildcard (e.g.,foo/**/*.html
is valid;foo/**/bar/*.html
andfoo/**/**/*.html
,foo/**/bar.html
are all invalid). As**
was an error in globs before, this does not affect any existing.cabal
files that previously worked. - Wildcards now match when the pattern’s extensions form a suffix of
the candidate file’s extension, rather than requiring strict
equality (e.g., previously
*.html
did not matchfoo.en.html
, but now it does).
- Double-star (
- License fields use identifiers from SPDX License List version
3.2 2018-07-10
7.3. cabal-version: 2.2
¶
- New
common
stanzas andimport
pseudo-field added. - New
library:virtual-modules
field added. - New
cxx-sources
andcxx-options
fields added for suppporting bundled foreign routines implemented in C++. - New
extra-bundled-libraries
field for specifying additional custom library objects to be installed. - Extended
if
control structure with support forelif
keyword. - Changed default rules of
build-type
field to infer “build-type:” for “Simple”/”Custom” automatically. license
field syntax changed to require SPDX expression syntax (using SPDX license list version3.0 2017-12-28
).- Allow redundant leading or trailing commas in package fields (which
require commas) such as
build-depends
.
7.4. cabal-version: 2.0
¶
- New
library:signatures
andmixins
fields added for supporting Backpack. - New
build-tool-depends
field added for adding build-time dependencies of executable components. - New
custom-setup:autogen-modules
field added for declaring modules which are generated at build time. - Support for new PVP caret-style version operator (
^>=
) added tobuild-depends
. - Add support for new
foreign-library
stanza. - Add support for internal library stanzas.
- New CPP Macro
CURRENT_PACKAGE_VERSION
.
7.5. cabal-version: 1.24
¶
- New
custom-setup
stanza andcustom-setup:setup-depends
field added for specifying dependencies of customSetup.hs
scripts. - CPP Macros
VERSION_$pkgname
andMIN_VERSION_$pkgname
are now also generated for the current package. - New CPP Macros
CURRENT_COMPONENT_ID
andCURRENT_PACKAGE_KEY
. - New
extra-framework-dirs
field added for specifying extra locations to find OS X frameworks.
7.6. cabal-version: 1.22
¶
- New
library:reexported-modules
field. - Support for
-none
version constraint added tobuild-depends
. - New
license
typeISC
added.
7.7. cabal-version: 1.20
¶
- Add support for new
license-files
field for declaring multiple license documents. - New CPP Macro
MIN_TOOL_VERSION_$buildtool
. - New
license
typesBSD2
andMPL-2.0
added.
7.8. cabal-version: 1.18
¶
- Add support for new
extra-doc-files
field for specifying extra file assets referenced by the Haddock documentation. - New
license
typeAGPL
andAGPL-3
added. - Add support for specifying a C/C++/obj-C source file in
executable:main-is
field. - Add
getSysconfDir
operation toPaths_
API.
7.9. cabal-version: 1.16
¶
Todo
this needs to be researched; there were only few changes between 1.12 and 1.18;
7.10. cabal-version: 1.12
¶
- Change syntax of
cabal-version
to support the new recommendedcabal-version: x.y
style


We identify decision makers and the people who influence their thoughts (both internal and external). We help to provide context on what these people are thinking.
Talk to targets about their pains and passions, rather than products.
What channels do these people spend time on? What's the best way to reach them digitally. Build a very strong social selling programme based on insight.
In this video, see Mark van Heijningen, Edyta Malesza-Malatrat and Shane Finlay talk about working with Unrival and the challenges that we have helped them to solve at SAP.
Hello, I'm Katie Norris - Client Development Manager SAP at Unrival.
If I can help you please give me a call on +44 (0) 7870 931 876 or email me at<EMAIL_ADDRESS>9-10, Bath Street
Bristol, BS1 6HL
Tel: +44 (0)117 911 6390
4th Floor - Capital House
42 Weston Street
London, SE1 3QD
Tel: +44 (0)117 911 6390


@steveklabnik
Rust is a new programming language from Mozilla (and friends).
Rust is a low-level programming language that often feels like a high level one.
Rust makes low-level programming accessible to those who haven't done it, and safer for those who have.
Let's talk about safety.
Low level programming has historically been very, very, very unsafe.
Here's some Ruby:
v = [];
v.push("Hello");
x = v[0];
v.push("world");
puts x
Here's some C++:
#include<iostream>
#include<vector>
#include<string>
int main() {
std::vector<std::string> v;
v.push_back("Hello");
std::string& x = v[0];
v.push_back("world");
std::cout << x;
}
$ g++ hello.cpp -Wall -Werror
$ ./a.out
Segmentation fault (core dumped)
int main() {
std::vector<std::string> v;
| location | name | value |
|---|---|---|
| 0x30 | v |
v.push_back("Hello");
| location | name | value |
|---|---|---|
| 0x30 | v | 0x18 |
| 0x18 | "Hello" |
std::string& x = v[0];
| location | name | value |
|---|---|---|
| 0x30 | v | 0x18 |
| 0x18 | "Hello" | |
| 0x14 | x | 0x18 |
v.push_back("world");
| location | name | value |
|---|---|---|
| 0x30 | v | 0x08 |
| 0x18 | GARBAGE | |
| 0x14 | x | 0x18 |
| 0x08 | "Hello" | |
| 0x04 | "world" |
If the new
size()
is greater thancapacity()
then all iterators and references (including the past-the-end iterator) are invalidated.
fn main() { let mut v = vec![]; v.push("Hello"); let x = &v[0]; v.push("world"); println!("{}", x); }
error: cannot borrow `v` as mutable because it is also borrowed as immutable
v.push("world");
^
note: previous borrow of `v` occurs here; the immutable borrow prevents subsequent moves or mutable borrows of `v` until the borrow ends
let x = &v[0];
^
fn main() { let mut v = vec![]; v.push("Hello"); let x = v[0].clone(); v.push("world"); println!("{}", x); }
fn main() { let mut numbers = vec![1i, 2i, 3i]; for i in range(0u, 3u) { spawn(proc() { for j in range(0, 3) { numbers[j] += 1 } }); } }
6:71 error: capture of moved value: `numbers`
for j in range(0, 3) { numbers[j] += 1 }
^~~~~~~
7:50 note: `numbers` moved into closure environment here because it has type `proc():Send`, which is non-copyable (perhaps you meant to use clone()?)
spawn(proc() {
use std::sync::{Arc,Mutex}; fn main() { let numbers = Arc::new(Mutex::new(vec![1i, 2i, 3i])); for i in range(0u, 3u) { let number = numbers.clone(); spawn(proc() { let mut array = number.lock(); (*array)[i] += 1; println!("numbers[{}] is {}", i, (*array)[i]); }); } }
fn main() { let numbers = Arc::new(Mutex::new(vec![1i, 2i, 3i])); for i in range(0u, 3u) { let number = numbers.clone(); spawn(proc() { // ... }); } }
spawn(proc() { let mut array = number.lock(); (*array)[i] += 1; println!("numbers[{}] is {}", i, (*array)[i]); });
Systems programming has kept the same tools for decades.
Rust uses tooling that is inspired by Ruby and JavaScript.
$ cargo new hello_world --bin
$ cd hello_world
$ tree .
.
├── Cargo.toml
└── src
└── main.rs
1 directory, 2 files
[package]
name = "hello_world"
version = "0.0.1"
authors = ["Your Name<EMAIL_ADDRESS>fn main() { println!("Hello, world!") }
$ cargo run
Compiling hello_world v0.0.1 (file:///Users/you/src/hello_world)
Running `target/hello_world`
Hello, world!
[package]
name = "hello_world"
version = "0.0.1"
authors = ["Your Name<EMAIL_ADDRESS>[dependencies.semver]
git = "https://github.com/rust-lang/semver.git"
$ cargo run
Updating git repository `https://github.com/rust-lang/semver.git`
Compiling semver v0.0.1 (https://github.com/rust-lang/semver.git#bf739419)
Compiling hello_world v0.0.1 (file:///home/you/projects/hello_world)
Running `target/hello_world`
Hello, world!
fn main() { let xs = [1, 2, 3, 4, 5]; let xs: Vec<int> = xs.iter() .map(|x| x + 1 ) .filter(|x| x % 2i == 0 ) .collect(); }
Rust makes low-level programming accessible to those who haven't done it, and safer for those who have.
@steveklabnik


I am Heba Aly, a research scientist at Amazon. I got my PhD in Computer Science from the University of Maryland, College Park in 2019. My main research interests include spatial systems, intelligent systems and mobile/ubiquitous computing.
In my research, I focus on challenging problems with applicable real-world utility. I.e. while my research solves fundamental problems in mobile computing and spatial systems, it also addresses real-world problems covering diverse application domains including delivery logistics, health-care, intelligent transportation systems, and geo-target advertising, among others.
Latest News
| Jul'21 | Conference paper has been accepted in Amazon CSS'21 for an oral talk (Acceptance rate: 5%)! | |
| Jun'21 | Teaser for IEEE SECON'21 paper (AccessMap): video | |
| Jun'21 | Serving as a TPC member in ACM SIGSPATIAL'21 | |
| May'21 | Conference paper has been accepted in IEEE SECON'21! | |
| Apr'21 | Serving as a TPC member in Grace Hopper 2021 | |
| Feb'21 | Serving as a TPC member in IEEE MDM 2021 | |
| Feb'21 | Serving in the N2Women 2021 board | |
| Jul'20 | Panelist in the IEEE MDM PhD forum! | |
| May'20 | Serving as a TPC member in ACM SIGSPATIAL'20 | |
| Mar'20 | Invited talk at Brandeis University. | |
| Feb'20 | Serving in the N2Women 2020 board | |
| Dec'19 | Officially a Doctor | |
| Oct'19 | Paper invited for publication in Communications of ACM (CACM) Research Highlights! | |
| Oct'19 | Serving as a TPC member in IEEE MDM 2020 | |
| Oct'19 | Started as a research scientist at Amazon! | |
| July'19 | Selected to participate in Rising Stars in EECS 2019 | |
| July'19 | Serving as a TPC member in GEOProcessing 2020 | |
| June'19 | Invited talk at Amazon | |
| June'19 | Invited talk at lehigh | |
| May'19 | Serving as a PC member in ACM SIGSPATIAL'19 | |
| March'19 | Journal paper has been accepted for publication in ACM TSAS! | |
| March'19 | Invited talk at UC Merced | |
| March'19 | Invited talk at UC Irvine | |
| Feb.'19 | Invited talk at Penn State | |
| Nov.'18 | Awarded best paper runner up in ACM SIGSPATIAL'18 | |
| Nov.'18 | Passed my PhD Proposal Exam! | |
| Oct.'18 | Paper selected as best paper candidate in ACM SIGSPATIAL'18! | |
| Oct.'18 | Selected for the NSF grant to attend ACM SIGSPATIAL'18 in Seattle! | |
| Sept.'18 | Journal paper has been accepted for publication in the IEEE Sensors Journal! | |
| Sept.'18 | Conference paper has been accepted in Mobiquitous'18! | |
| Aug.'18 | Conference paper has been accepted in ACM SIGSPATIAL'18! | |
| Aug.'18 | Participating in Microsoft Research Principles of Intelligence! | |
| April'18 | A new granted patent with Prof. Moustafa Youssef! | |
| March'18 | Participating in the annual Women in Research Lean in Event @Facebook! |
Projects Honors and Awards
| 2019 | - Paper invited for publication in Communications of ACM (CACM) Research Highlights |
| 2018 | - Best paper runner up award in ACM SIGSPATIAL'18 - ACM TSAS Special issue paper invitation |
| 2016 | - Best poster award in N2Women workshop at ACM MobiCom 2016 |
| 2015 | - First Prize Group Category in the COMESA Innovation Awards - IEEE PerCom top paper invitation for a special issue at Pervasive and Mobile Computing Journal |
| 2013 | - Best paper award in ACM SIGSPATIAL - International Journal on Ambient Intelligence and Computing invitation for a special issue |
Scholarships/Grants and Honors
| 2019 | - Selected to participate in Rising Stars in EECS at UIUC |
| 2018 | - NSF Travel Grant Award (ACM SIGSPATIAL) |
| 2017 | - Selected as one of ten Rising Stars in Networking and Communications by N2Women - Google Women Techmakers scholarship - Google Grace Hopper Travel Grant - NSF Travel Grant Award (ACM SIGSPATIAL) |
| 2016 | - University of Maryland Graduate School Dean's Fellowship - NSF Travel Grant Award (IEEE INFOCOM) - N2Women Travel Grant (ACM MobiCom) |
| 2015 | - N2Women Young Researcher Fellowship - University of Maryland Graduate School Dean's Fellowship - NSF Travel Grant Award (ACM SIGSPATIAL) - IEEE Student Travel Grant (IEEE PerCom) |
| 2014 | - Certificate of Appreciation and a Prize from Umm Al-Qura University - Google Student Travel Grant Award (ACM SIGSPATIAL) - IEEE Communications Society Student Travel Grant (IEEE SECON) |
| 2011 | - Degree of Honor from Faculty of Engineering, Alexandria University |
Professional Services
Technical Program Committee
| 2021 | ACM SIGSPATIAL, IEEE MDM, Grace Hopper |
| 2020 | ACM SIGSPATIAL, IEEE MDM, GEOProcessing |
| 2019 | ACM SIGSPATIAL |
Reviewer
| 2021 | IEEE TMC, IEEE TKDE, PMC, IEEE IoT |
| 2020 | Amazon's Machine Learning Conference (AMLC), IEEE TMC, PMC, IEEE Sensors Journal, IEEE T-ITS, IEEE TVT, ACM IMWUT (UbiComp) |
| 2019 | IEEE TKDE, IEEE TMC, IEEE Sensors Journal, IEEE the Computer Journal, IEEE Internet of Things Journal, IEEE T-ITS, IEEE TVT, ACM IMWUT (UbiComp) | 2018 | IEEE TMC, IEEE TVT, IEEE T-ITS, Journal of Field Robotics, PMC, Journal of Ambient Intelligence and Humanized Computing, ACM TSAS, IEEE TKDE |
| 2017 | IEEE SECON, ACM CHI, IEEE TMC, IEEE ICDCS, ACM TSAS, ACM IMWUT (UbiComp), IEEE T-ITS |
| 2016 | IEEE INFOCOM'17, IEEE TMC, ACM TOSN, IEEE VTC-Fall'16, IET Intelligent Transport Sys., KSII Trans. on Internet and Information Sys., IEEE Sensors Journal |
| 2015 | IEEE TVT, Expert Systems with Applications (ESWA)|Elsevier Journal |
| 2014 | IEEE MDM 2014 |
Volunteer
| 2014, 2015, 2017, 2018 | Student volunteer at ACM SIGSPATIAL |
| 2016 | Organizer for the N2Women event at IEEE INFOCOM |


Fallout 76 Weapon Damage Calculator (v3.3.18)
(Update to Patch 22 is almost done; a few special cases to iron out but otherwise good to go.)
Weapon type
Melee
Ranged
>>
<<
< Link
Link >
< Link >
Clear
Weapon type
Melee
Ranged
Comparison
Single hit damage
Damage per second
Toughest enemies first
Enemy
Left weapon
Right weapon
Resistances
Actual
Damage
Compare
Right
Actual
Damage
Compare
Left
DR
ER
RR
FR
CR
PR
DR
ER
RR
FR
CR
PR
DR
ER
RR
FR
CR
PR


ArcoBobo Distribution -
ArcoBobo
Arch Linux Operating Sytem
ArcoBobo is a rolling-release distribution.
Easy installation
Installation with the Calamares installer makes it simple.
Various applications are preinstalled.
Variations
This OS comes in many forms
Choose between i3 , Xfce, Bspwm...
ArcoBobo
Always used a desktop and now ready for a tiling window manager?
Try ArcoBobo-i3, an easy to learn OS.
This OS has many pre-installed programs.
You can also use the xfce-menu and press F1 for a help-file.
Goto download
ArcoBobo Distributions.
Github link
If you want to build it yourself.
ArcoLinux Forum
If you have a question or remark.


Tcl/Tk Support
The Logic Server Extension (LSX) for Tcl/Tk, atcltk.lsx, provides:
- The ability to embed Tcl/Tk commands in a logicbase, and
- The ability to query a logicbase from those Tcl/Tk commands.
The primary intention is to allow for the easy development of graphical user
interfaces for logicbase applications, but any of the capabilities of Tcl/Tk
are available from within a logicbase.
The Tcl and Tk libraries are included with the Amzi! distribution, so it is
not necessary to install these independently.
Overview
Tcl is a powerful scripting language that can be embedded in other applications,
and also extended with custom commands (very much like the Amzi! Logic Server
implementation). When Tcl is embedded in another application, that application
can then start Tcl interpreters that have access to any custom commands.
Tk is an extension to Tcl that provides a clean and powerful way of creating
graphical user interfaces.
A logicbase creates a Tcl interpreter by calling the extended predicate tcl_init.
This returns an ID for a Tcl interpreter. The logicbase can then call tcl_eval
to evaluate any Tcl/Tk commands for purposes such as:
- creating windows, menus, buttons and other widgets,
- capturing events such as mouse and keyboard activity,
- defining actions to be taken in response to events.
The Tcl/Tk command language is extended to allow logicbase queries. So, for
example, event-response actions can trigger logicbase queries using the ls_query
function, which can, in turn, further manipulate the graphical environment through
calls to tcl_eval.
The result is a very powerful architecture that combines the best of Tcl/Tk's
clean windowing interface with the declarative power of a logicbase.
Calling Tcl/Tk from
a logicbase
These are the extended predicates that allow the creation and use of Tcl/Tk
from a logicbase.
- tcl_init(TclInterpreter, TclLibrary, Result)
- Create a Tcl interpreter and return the address of the interpreter in TclInterpreter.
Result contains the result string returned from initialization. TclLibrary indicates where the Tcl/Tk libraries are. These can
be standard locations or something custom. The values of TclLibrary
can be:
- amzi - indicating the libraries in the Amzi! distribution,
- tcl - indicating the libraries for a local Tcl installation,
- here - indicating the libraries are in the current directory in lib/tcl
and lib/tk, or
- pathname - a library path, without ending / or \\, that contains
the directories lib/tcl and lib/tk.
- tk_mainloop
- Start the Tk event handling loop. This will normally be called after a number
of calls creating an initial configuration for a window and its associated
widgets.
- tcl_finish(TclInterpreter)
- Shutdown the Tcl interpreter. Note that this should be used instead of the
Tcl "exit" command, which shuts down the process which called it
as well.
- tcl_eval(TclInterpreter, CommandString, Result)
- Evaluate the Tcl/Tk commands in CommandString using the specified
Tcl interpreter. Result contains the result, which might be a return
value for some commands.
- tcl_evalfile(TclInterpreter, FileName)
- Evaluate the Tcl/Tk commands in the named file. This can be useful for calling
a longer sequence of commands, such as those used to create a complex graphical
environment.
Making logicbase queries
from Tcl/Tk
The Tcl/Tk commands provide a high-level logicbase query capability. A query
contains a goal string that may or may not include logical variables, and the
result is a Tcl list of alternating variable names and values.
- list ls_query option ?goal?
- list - Returned Tcl list of alternating variable names and
values, where the first pair contains 'result' and either 'true' or 'false'.
The list can be easily displayed, queried, or turned into a Tcl array where
the variable names becomes the keys.
- option - Backtracking option for the query
- once - Execute the query goal once and return the answer list.
Requires a goal.
- first - Call the query goal; return the first answer list;
and set up the Logic Server to get additional answers. Requires a goal.
- next - Redo the current query goal and return the next answer.
The first two elements will be 'result' and 'false' when there are no
more answers. Does not need the goal argument.
- clear - Used for the special case when a query using the first
and next options has not found all the answers and the query
is to be ended. It is not necessary to call ls_query clear, and in fact
might trigger an error, when ls_query next has reached a 'result' of
'false'. Does not need the goal argument.
- goal - A logicbase goal, such as might be entered at a Prolog
listener prompt (?-).
Tcl/Tk commands that correspond to the more common Logic Server API calls are
also provided. These are:
term ls_exec goal
Execute the query goal once, without setting up backtracking. A logical term
is returned, which is cast to a Tcl integer. A zero value indicates the query
failed.
term ls_call goal
Execute the query goal and set up backtracking. A term is returned,
which is cast to a Tcl integer. A zero value indicates the query failed.
term ls_redo term
Redo the last query set up for backtracking, using the term returned from
ls_call. A term is returned, which is cast to a Tcl integer. A
zero value indicates the query failed.
term ls_clearcall term
If a query set up with ls_call has not been exhausted using ls_redo
calls, use a call to ls_clearcall to end backtracking. The term
argument is the term from the last ls_call or ls_redo. A term
with 0 value is returned.
string ls_termtostr term
The term is converted to string, which is returned.
string ls_termtostrq term
The term is converted to string, which is returned, with Prolog
quoting when necessary, so that it can be used in another query if necessary.
string ls_getstrarg term int
From the input term, get the argument at the int position, where
1 is the first argument. Return the argument as a string. This is a bit different
from equivalent Logic Server API calls which expect the argument to be a string
or atom. The Tcl/Tk version converts any argument to a string, as if the argument
were first passed through ls_termtostr.
Error Handling
The Tcl extensions for querying logicbases throw exceptions that can be handled
using Tcl's error handling.
The Prolog extended predicates for calling Tcl throw exceptions that can be
handled using Prolog's error handling.
Distribution
To distribute an application with Tcl/Tk you need:
- The Tcl/Tk LSX, atcltk.lsx, which is in amzi/bin.
- The Tcl/Tk shared libraries (.dll / .so) which are in amzi/bin. These begin
with tcl... and tk...
- The library of Tcl/Tk scripts which are in amzi/lsapis/tcltk/lib
When Tcl/Tk is initialized from Prolog, the tcl_init predicates has
an argument that specifies where the Tcl/Tk script library is located. For development,
that value should be either 'amzi' or 'tcl' depending on whether you have Tcl/Tk
independently installed on the machine.
For distribution that value can be 'here', which means the Tcl/Tk 'lib' directory
is in the current directory of the application. In this case you copy the amzi/lsapis/tcltk/lib
directory to your application directory.
The library can also be a specific location, in which case the directory that
contains the lib directory is supplied as the second argument to tcl_init.
Tutorial Example
See the references below for introductions to Tcl/Tk and see the amzi/samples/tcltk
directory for samples.
Implementation
The Tcl/Tk interface is implemented in amzi/bin/atcltk.lsx, and requires the
tcl and tk shared libraries and the tcl and tk libraries of the Tcl scripts.
All of these are included with the Amzi! distribution.
The Tcl/Tk LSX contains both the extended predicates that allow Prolog to call
Tcl, and the Tcl extensions that allow Tcl to call Prolog.
References
http://www.scriptics.com/ - Tcl/Tk
developer site, with downloads.
http://www.pconline.com/~erc/tcl.htm
- Eric Foster Johnson's site with Tcl/Tk resources and a quick reference.
http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/tcl/
- Alex Samonte's Tcl/Tk tutorial.
Tcl and the Tk Toolkit by John Ousterhout [Addison Wesley] - The Tcl/Tk
creator's book on the subject.
Practical Programming in Tcl and Tk by Brent Welch, Ken Jones, Jeffrey Hobbs
[Prentice Hall 2003] - Another good book on Tcl/Tk programming.
Copyright ©1987-2011 Amzi! inc. All Rights Reserved.
Amzi! is a registered trademark and Logic Server is a trademark
of Amzi! inc.


As the creator of Ruby puts it, Rails "is the killer app for Ruby." It is essentially a very powerful Ruby framework.
David Hansson created Ruby on Rails in 2003 as open source software. A mere three years later Apple stated it would include Rails with the release of OS X Leopard. Rail's popularity and traction have increased exponentially since then.
One of Rails' claim to fame is that it dramatically lowers the entry barrier for web development. Well acclaimed programmers across the board tend to converge on this point. James Duncan Davidson, creator of Tomcat and Ant, puts it this way: “Rails is the most well thought-out web development framework I’ve ever used. And that’s in a decade of doing web applications for a living. I’ve built my own frameworks, helped develop the Servlet API, and have created more than a few web servers from scratch. Nobody has done it like this before.”
Others are still more colorful in their opinion of Rails: “Ruby on Rails is astounding.  -- Nathan Torkington, O’Reilly Program Chair for OSCON.
I am looking forward to getting to know this framework well. I am also happy that we've started with a good grounding of Ruby, rather than dive right in to Rails.


Maximum Entropy
Hi, I am Michiel Stock, a postdoctoral researcher at Ghent University. I am interested in applying computational intelligence to modelling and engineering in the life sciences. During my PhD, I worked on kernel-based methods to model interactions. Afterwards, I spend a couple of years on modelling species interaction networks. Now, my main focus is on stochastical modelling and operations research for synthetic biology.
In my spare time, I enjoy reading, running, and boardgames. I am also following training to become a chef.
Contact
birdgithub
📚 books
👨🏫 talks
© Michiel Stock. Last modified: October 17, 2022. Website built with Franklin.jl and the Julia programming language.


- each(function) - Method in class cloud.jgo.jjdom.JjDom
-
- each(T[], £Func) - Static method in class cloud.jgo.£
-
This method iterates the array as if it were a loop
- each(Hashtable<T, T>, £Func) - Static method in class cloud.jgo.£
-
This method iterates the hashtable as if it were a loop
- each(T[], £Func, int) - Static method in class cloud.jgo.£
-
This method iterates the array as if it were a loop.
- each(T[], String, £Func) - Static method in class cloud.jgo.£
-
This method iterates the array as if it were a loop.
- each(List<T>, £Func) - Static method in class cloud.jgo.£
-
This method iterates the list as if it were an iterator.
- each(List<T>, int, £Func) - Static method in class cloud.jgo.£
-
This method iterates the list as if it were an iterator.
- each(List<T>, String, £Func) - Static method in class cloud.jgo.£
-
This method iterates the list as if it were an iterator.
- each2(Hashtable<Object, Object>, £Func) - Static method in class cloud.jgo.£
-
This method iterates the hashtable as if it were a loop
- each3(Hashtable<String, Object>, £Func) - Static method in class cloud.jgo.£
-
This method iterates the hashtable as if it were a loop
- EACH_INDEX - Static variable in class cloud.jgo.£
-
- EACH_OBJECT - Static variable in class cloud.jgo.£
-
- Element - Interface in cloud.jgo.jjdom.dom.nodes
-
- element(int) - Static method in class cloud.jgo.jjdom.JjDom
-
This method gets the selected item to the "index" position
- Elements - Class in cloud.jgo.jjdom.dom.nodes
-
- Elements() - Constructor for class cloud.jgo.jjdom.dom.nodes.Elements
-
- elements() - Static method in class cloud.jgo.jjdom.JjDom
-
This method returns the selected elements list
- EM - Static variable in class cloud.jgo.jjdom.dom.nodes.html.HTMLElement.HTMLElementType
-
- empty() - Method in class cloud.jgo.jjdom.JjDom
-
- empty() - Method in interface cloud.jgo.jjdom.jquery.jQuerySupport
-
- encrypt - Static variable in class cloud.jgo.£
-
- EncryptImage(BufferedImage) - Method in class cloud.jgo.utils.Encrypts
-
Deprecated.
- EncryptImage(String) - Method in class cloud.jgo.utils.Encrypts
-
Deprecated.
- Encrypts - Class in cloud.jgo.utils
-
Deprecated.
- Encrypts(String, String) - Constructor for class cloud.jgo.utils.Encrypts
-
Deprecated.
- end_ready - Static variable in class cloud.jgo.jjdom.JjDom
-
- ENDS_WITH_OPERATOR - Static variable in interface cloud.jgo.jjdom.css.CSSSelector
-
- enter_cmd(RemoteCommand, String, String) - Method in interface cloud.jgo.net.Control
-
This method performs a remote command
- enter_cmd(RemoteCommand, String, String) - Method in class cloud.jgo.net.tcp.TCPConnection
-
- enter_cmd(RemoteCommand, String, String) - Method in class cloud.jgo.net.tcp.TCPHandlerConnection
-
- enterRemoteCommand(RemoteCommand, Parameter...) - Method in interface cloud.jgo.net.Control
-
This method performs a remote command
- enterRemoteCommand(RemoteCommand, String...) - Method in interface cloud.jgo.net.Control
-
This method performs a remote command
- enterRemoteCommand(RemoteCommand, String...) - Method in class cloud.jgo.net.tcp.TCPConnection
-
- enterRemoteCommand(RemoteCommand, Parameter...) - Method in class cloud.jgo.net.tcp.TCPConnection
-
- enterRemoteCommand(RemoteCommand, String...) - Method in class cloud.jgo.net.tcp.TCPHandlerConnection
-
- enterRemoteCommand(RemoteCommand, Parameter...) - Method in class cloud.jgo.net.tcp.TCPHandlerConnection
-
- equals(Object) - Method in class cloud.jgo.jjdom.dom.nodes.html.HTMLElement.HTMLElementType
-
- equals(Object) - Method in class cloud.jgo.net.config.Configuration.ConfigurationKey
-
- equals(Object) - Method in class cloud.jgo.net.ServerType
-
- equals(Object) - Method in class cloud.jgo.net.tcp.http.headers.Header.Type
-
- equals(Object) - Method in class cloud.jgo.utils.command.LocalCommand
-
- equals(Object) - Method in class cloud.jgo.utils.command.Parameter
-
- err() - Static method in class cloud.jgo.£
-
Equivalent to System.err
- error(String) - Static method in class cloud.jgo.utils.command.terminal.phase.ColorLocalPhaseTerminal
-
Simple error message
- errPrintln(String) - Static method in class cloud.jgo.£
-
Equivalent to System.err.println();
- escp(String) - Static method in class cloud.jgo.£
-
Escape on the string
- Event - Interface in cloud.jgo.jjdom.jquery
-
- Event.EventType - Enum in cloud.jgo.jjdom.jquery
-
- examines_html(Node, ColorString) - Static method in class cloud.jgo.jjdom.dom.ColorRecursion
-
- examines_html(Node, StringBuffer) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examines_xml(Node, ColorString, String) - Static method in class cloud.jgo.jjdom.dom.ColorRecursion
-
- examines_xml(Node, StringBuffer, String) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForAttribute(String, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForAttributeValue(String, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForAttributeValue_(String, String, Node, String) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForClass(String, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForId(String, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForName(String, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForTag(String, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForTPath(Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- examinesForType(HTMLElement.HTMLElementType, Node) - Static method in class cloud.jgo.jjdom.dom.Recursion
-
- exec() - Method in class cloud.jgo.utils.command.execution.Execution
-
This method starts the execution
- exec() - Method in class cloud.jgo.utils.command.execution.SharedExecution
-
- exec(String) - Static method in class cloud.jgo.£
-
This method executes a command in the windows cmd
- execConnectingOutputChannel(String) - Static method in class cloud.jgo.£
-
- Executable - Interface in cloud.jgo.utils.command.execution
-
- Executable.When - Enum in cloud.jgo.utils.command.execution
-
- execute() - Method in interface cloud.jgo.utils.command.execution.Executable
-
This method calls the method exec of the execution
- execute() - Method in class cloud.jgo.utils.command.LocalCommand
-
- execute() - Method in class cloud.jgo.utils.command.Parameter
-
- execute_cmd() - Method in interface cloud.jgo.net.Controllable
-
This method executes the command received remotely
- execute_cmd() - Method in class cloud.jgo.net.tcp.TCPConnection
-
- execute_cmd() - Method in class cloud.jgo.net.tcp.TCPHandlerConnection
-
- executeGoogleQuery(String) - Static method in class cloud.jgo.£
-
This method executes a google query
- executeGoogleQuery_2(String) - Static method in class cloud.jgo.£
-
This method executes a google query
- executeInputCommand(String, List<? extends Command>) - Static method in class cloud.jgo.utils.command.LocalCommand
-
This method executes the command and its possible parameters.
- executeJsMethod(String) - Static method in class cloud.jgo.jjdom.JjDom.JavaScriptSupport
-
- executeLastInstructions(£Func) - Static method in class cloud.jgo.£
-
This method executes the last instructions and then quits the program
- executeLastInstructions(£Func, Object) - Static method in class cloud.jgo.£
-
This method executes the last instructions and then quits the program
- executeParam(String) - Method in interface cloud.jgo.utils.command.Command
-
This method executes a parameter
- executeParam(String, String) - Method in interface cloud.jgo.utils.command.Command
-
This method executes a parameter
- executeParam(String) - Method in class cloud.jgo.utils.command.LocalCommand
-
- executeParam(String, String) - Method in class cloud.jgo.utils.command.LocalCommand
-
- executeProgram(File) - Static method in class cloud.jgo.£
-
This method runs a program
- executeRemoteCommand() - Method in interface cloud.jgo.net.Controllable
-
This method executes the command received remotely
- executeRemoteCommand() - Method in class cloud.jgo.net.tcp.TCPConnection
-
Spiegare differenze con il metodo statico della classe LocalCommand,
differenze :
1 differenza : Questo metodo non restituisce i valori get impostati
precedentemente su un oggetto 2 differenza : Non restituisce il metodo
toString 3 restituisce un array di oggetti che vanno poi distinti nel lato
opposto a cui si inviano 4 non invia comunicazioni se tipo non abbiamo dato
il value input e il param lo richiedesse e non a comunicazioni se tipo
mettiamo un value input e il param non lo richiedesse
- executeRemoteCommand() - Method in class cloud.jgo.net.tcp.TCPHandlerConnection
-
Spiegare differenze con il metodo statico della classe LocalCommand,
differenze :
1 differenza : Questo metodo non restituisce i valori get impostati
precedentemente su un oggetto 2 differenza : Non restituisce il metodo
toString 3 restituisce un array di oggetti che vanno poi distinti nel lato
opposto a cui si inviano
- executeTHeCommands(Command...) - Static method in class cloud.jgo.utils.command.Performer
-
- executeTHeParameters(Parameter...) - Static method in class cloud.jgo.utils.command.Performer
-
- Execution - Class in cloud.jgo.utils.command.execution
-
- Execution() - Constructor for class cloud.jgo.utils.command.execution.Execution
-
- extractFormatFromFile(File) - Static method in class cloud.jgo.£
-
This method returns the file format
- extractFormatFromFileName(String) - Static method in class cloud.jgo.£
-
This method returns the file_name format


{% comment %} "note" "icon-pencil" "abstract" "icon-diamonds" "info" "icon-info" "tip" "icon-notification" "success" "icon-checkmark2" "question" "icon-question" "warning" "icon-warning" "failure" "icon-blocked" "bug" "icon-bug" "quote" "icon-quotes-left" {% endcomment %}


One of the many features of JFTP is the ability to work with multiple FTP sites simultaneously. You can open as many sessions as you want and connect each session to a different FTP site and transfer files between your PC and the connected FTP sites simultaneously.
This section explains in detail on how to work with multiple FTP sessions. To learn more, click on any of the sub-topics below.