Freelance Developer in Singapore
Dorothy lived in the midst of the great Kansas prairies, with Uncle Henry, who was a farmer, and Aunt Em, who was the farmer's wife. Their house was small, for the lumber to build it had to be carried by wagon many miles. There were four walls, a floor and a roof, which made one room; and this room contained a rusty looking cookstove, a cupboard for the dishes, a table, three or four chairs, and the beds. Uncle Henry and Aunt Em had a big bed in one corner, and Dorothy a little bed in another corner. There was no garret at all, and no cellar--except a small hole dug in the ground, called a cyclone cellar, where the family could go in case one of those great whirlwinds arose, mighty enough to crush any building in its path. It was reached by a trap door in the middle of the floor, from which a ladder led down into the small, dark hole.
Dorothy lived in the midst of the great Kansas prairies, with Uncle Henry, who was a farmer, and Aunt Em, who was the farmer's wife. Their house was small, for the lumber to build it had to be carried by wagon many miles. There were four walls, a floor and a roof, which made one room; and this room contained a rusty looking cookstove, a cupboard for the dishes, a table, three or four chairs, and the beds. Uncle Henry and Aunt Em had a big bed in one corner, and Dorothy a little bed in another corner. There was no garret at all, and no cellar--except a small hole dug in the ground, called a cyclone cellar, where the family could go in case one of those great whirlwinds arose, mighty enough to crush any building in its path. It was reached by a trap door in the middle of the floor, from which a ladder led down into the small, dark hole.
Dorothy lived in the midst of the great Kansas prairies, with Uncle Henry, who was a farmer, and Aunt Em, who was the farmer's wife. Their house was small, for the lumber to build it had to be carried by wagon many miles. There were four walls, a floor and a roof, which made one room; and this room contained a rusty looking cookstove, a cupboard for the dishes, a table, three or four chairs, and the beds. Uncle Henry and Aunt Em had a big bed in one corner, and Dorothy a little bed in another corner. There was no garret at all, and no cellar--except a small hole dug in the ground, called a cyclone cellar, where the family could go in case one of those great whirlwinds arose, mighty enough to crush any building in its path. It was reached by a trap door in the middle of the floor, from which a ladder led down into the small, dark hole.
html {
font-size: 18px; // Minimum of 18px on mobile
line-height: 1.4; // 1.3 - 1.6
}
p {
width: 30em; // 45 - 75 characters
}
html { font-size: 16px; }
h1 { font-size: 50.517px; } // 16px * 1.333 * 1.333 * 1.33 * 1.33
h2 { font-size: 37.897px; } // 16px * 1.333 * 1.333 * 1.33
h3 { font-size: 28.430px; } // 16px * 1.333 * 1.333
html {
line-height: 24px;
}
h1 {
line-height: 48px;
margin: 24px 0;
}
p {
margin: 24px 0;
}
body {
background: repeating-linear-gradient(
to bottom,
transparent 0px,
transparent 23px,
red 23px,
red 24px
);
}
html {
font-size: 16px;
line-height: 24px;
}
h1 { font-size: 50px; } // 1.333 * 1.333 * 1.333 * 1.333
html {
font-size: 16px;
line-height: 24px;
}
h1 {
font-size: 50px;
line-height: 72px; // 24px * 3;
}
This is a header
with two lines of text
The nuckelavee is a horse-like demon from Orcadian mythology that combines equine and human elements. The name of this most horrible of all the demons of the Scottish islands may be a progenitor of that by which the Devil is sometimes known, Old Nick.
h1 {
font-size: 50px;
line-height: 48px; // 24px * 2. Line height of 0.96
}
This is a header
with two lines of text
The nuckelavee is a horse-like demon from Orcadian mythology that combines equine and human elements. The name of this most horrible of all the demons of the Scottish islands may be a progenitor of that by which the Devil is sometimes known, Old Nick.
h1 {
font-size: 50px;
line-height: 60px; // 60px = 2.5 * 24px. Line height = 1.2
}
This is a header
with two lines of text
The nuckelavee is a horse-like demon from Orcadian mythology that combines equine and human elements. The name of this most horrible of all the demons of the Scottish islands may be a progenitor of that by which the Devil is sometimes known, Old Nick.
html {
font-size: 16px;
@media (min-width: 600px) {
font-size: 18px;
}
@media (min-width: 1000px) {
font-size: 20px;
}
}
html {
font-size: 16px;
line-height: 1.4;
@media (min-width: 600px) {
font-size: 18px;
}
@media (min-width: 1000px) {
font-size: 20px;
line-height: 1.5;
}
}
html {
font-size: 16px;
@media (min-width: 600px) {
font-size: 18px;
}
}
h1 {
font-size: 50.517px;
@media (min-width: 600px) {
font-size: 56.83px;
}
}
// ... and so on
html {
font-size: 16px;
@media (min-width: 600px) {
font-size: 18px;
}
}
h1 { font-size: 3.157rem } // 1.333 * 1.333 * 1.333 * 1.333
h3 { font-size: 2.369rem } // 1.333 * 1.333 * 1.333
h2 { font-size: 1.777rem } // 1.333 * 1.333
An EM is a unit of typography, equal to the currently specified point-size
h1 { font-size: 20px } /* 1em = 20px */
p { font-size: 16px } /* 1em = 16px */
html { font-size: 16px }
h1 { font-size: 2em } /* 16px * 2 = 32px */
h1 {
font-size: 2em; /* 1em = 16px */
margin-bottom: 1em; /* 1em = 32px */
}
p {
font-size: 1em; /* 1em = 16px */
margin-bottom: 1em; /* 1em = 16px */
}
An REM is a unit of typography, equal to the root font-size
html { font-size: 16px } /* 1rem === 16px, always */
h1 {
font-size: 2rem; /* 1rem = 16px */
margin-bottom: 1rem; /* 1rem = 16px */
}
p {
font-size: 1rem; /* 1rem = 16px */
margin-bottom: 1rem; /* 1rem = 16px */
}
html {
font-size: 16px;
@media (min-width: 600px) {
font-size: 18px;
}
}
h1 { font-size: 3.157rem } // 1.333 * 1.333 * 1.333 * 1.333
h3 { font-size: 2.369rem } // 1.333 * 1.333 * 1.333
h2 { font-size: 1.777rem } // 1.333 * 1.333
html {
font-size: 16px;
@media (min-width: 600px) {
font-size: 18px;
}
}
h1 {
font-size: 2.369rem // 1.333 * 1.333 * 1.333
@media (min-width: 600px) {
font-size: 3.157rem; // 1.333 * 1.333 * 1.333 * 1.333
}
}
h1 {
font-size: 2.369rem // 1.333 * 1.333 * 1.333
@media (min-width: 600px) {
font-size: 3.157rem; // 1.333 * 1.333 * 1.333 * 1.333
}
}
h2 {
font-size: 1.777rem // 1.333 * 1.333
@media (min-width: 600px) {
font-size: 2.369rem; // 1.333 * 1.333 * 1.333
}
}
h3 {
font-size: 1.333rem // 1.333
@media (min-width: 600px) {
font-size: 1.777rem; // 1.333 * 1.333
}
}
// ...
\$breakpoints: (
small: 600px,
large: 1000px
);
\$typi: (
null: (16px, 1.4),
small: 18px,
large: (20px, 1.5)
);
// Sass input
html {
@include typi-base();
}
/* CSS Output */
html {
font-size: 100%;
line-height: 1.4;
}
@media all and (min-width: 600px) {
html {
font-size: 112.5%;
}
}
@media all and (min-width: 1000px) {
html {
font-size: 125%;
line-height: 1.5;
}
}
// Scss input
\$h1-map: (
null: (2.369em, 1.2),
large: (3.157em, 1.3)
);
\$h2-map: (
null: (1.777em, 1.2),
large: 2.369em
);
h1 { @include typi(\$h1-map); }
h2 { @include typi(\$h2-map); }
/* CSS Output */
h1 {
font-size: 2.369rem;
line-height: 1.2;
}
@media all and (min-width: 1000px) {
h1 {
font-size: 3.157rem;
line-height: 1.3;
}
}
h2 {
font-size: 2.369rem;
}
@media all and (min-width: 1000px) {
h2 {
font-size: 1.777rem;
}
}
// Scss input
\$ms-ratio: 1.333;
\$h1-map: (
null: (ms(2), 1.2),
large: (ms(3), 1.3)
);
\$h2-map: (
null: (ms(1), 1.2),
large: ms(2)
);
h1 { @include typi(\$h1-map); }
h2 { @include typi(\$h2-map); }
/* CSS Output */
h1 {
font-size: 2.369rem;
line-height: 1.2;
}
@media all and (min-width: 1000px) {
h1 {
font-size: 3.157rem;
line-height: 1.3;
}
}
h2 {
font-size: 2.369rem;
}
@media all and (min-width: 1000px) {
h2 {
font-size: 1.777rem;
}
}
html { @include typi-base(); }
h1 { @include typi(\$h1-map); }
h2 { @include typi(\$h2-map); }
h3 { @include typi(\$h3-map); }
// Baseline of 1.5
h1 {
margin: 1.5rem; // instead of 24px
}
// Baseline = 1.5rem
margin: vr(1); // instead of 1.5rem
margin: vr(2); // instead of 3rem
margin: vr(3); // instead of 4.5rem
html {
line-height: 1.4;
@media (min-width: 1000px) {
line-height: 1.5;
}
}
h1 {
margin: 1.4rem;
@media (min-width: 1000px) {
margin 1.5rem;
}
}
// Will be added to Typi when there is good support for CSS Variables
:root {
--baseline: 1.4;
@media (min-width: 1000px) {
--baseline: 1.5;
}
}
html { line-height: var(--baseline); }
h1 { margin: calc(var(--baseline) * 2); }


"Light Makes Right"
January 21, 1997
Volume 10, Number 1
Compiled by
All contents are copyright (c) 1996,1997, all rights reserved by the individual authors
Archive locations: text version at
http://www.acm.org/tog/resources/RTNews/text/
HTML at
http://www.acm.org/tog/resources/RTNews/html/
You may also want to check out the Ray Tracing News issue guide and the ray tracing FAQ.
The first and second issues of the "journal of graphics tools" are out; visit http://www.acm.org/jgt for more info. I'm one of ten editors for this refereed journal, and I urge you all to consider submitting to it. Personally, I would like to see more short papers on specific, practical algorithms to perform various tasks. I believe most graphics programmers have a few tricks that have not made it into the literature for one reason or another. For example, if you've ever written an article for comp.graphics.algorithms explaining some technique, then you should consider contributing to jgt. Because of its focus on practical tools for graphics programmers, it is less formal that most other journals in computer graphics. Empirical proof (i.e. "as you can see, this works") and usability of algorithms is more important here than formal proofs.
ACM TOG, http://www.acm.org/tog, has actually caught up (its publishing schedule had once been more than a year behind) and is back on schedule, due to Andrew Glassner's fine whip hand and the suffering of numerous editorial board members (not including me, I've just been webslaving for it). Through the web site we have been able to offer additional materials for articles printed in TOG, such as MPEG movies showing algorithm behavior. We have also started to offer electronic versions of the latest TOG articles on an experimental basis. Late breaking news: Holly Rushmeier has taken over the Editor in Chief position for TOG, as Andrew has become busy with Microsoft's MSNBC TV channel.
I have recently added new resource links to ACM TOG's web pages. Under the "Resources" area you will find a number of interesting new programs, such as the GIMP (a free Photoshop-like program for Unix/Linux systems, with source code and plug-in interface). There are also links to other resources such as bibliographies (I was amazed to learn the Computational Geometry bibliography now has over 8000 entries), FAQs, links to on-line papers and tutorials, etc. If you know of other resources on the Net that deserve a link, please tell me. I am focussing on the better free resources directly useful to researchers and educators; for example, programs listed on the web page generally have source code available.
ACM TOG's site has also become the official home of two software resources, the Graphics Gems code and the Standard Procedural Databases package. I am the archivist for the Gems code, logging bug fixes and maintaining the errata. Craig Kolb has quietly and diligently provided a home for the Gems code base at Princeton for years now. His access to princeton.edu is becoming limited (he's now at Stanford) and he is also in danger of graduating, so I have moved the Gems code to http://www.acm.org/tog/GraphicsGems/. The Standard Procedural Databases code has also moved, to http://www.acm.org/tog/resources/SPD/. The SPD is code which produces various databases for testing ray tracer efficiency. Over the years Alexander Enzmann and others have added a wide variety of output formats (e.g. RenderMan, Wavefront OBJ, DXF) and translators. The latest release includes output into the VRML 2.0 and 3DMF file formats.
Also, I should note I've taken advantage of ACM's free membership benefit of having an email address from which I can forward. My new email address is<EMAIL_ADDRESS>This is actually handy; for example, I can forward mail to my free Juno email account during the Christmas vacation. See http://www.acm.org/account/ for details.
George Kyriazis is in Greece's army for a year, so I've taken over his duties as maintainer of WUArchive's graphics archive site (ftp or http://wuarchive.wustl.edu/graphics/graphics). "Benign neglect" has been my mantra so far, unfortunately. I would like to change this in the future, updating the site with newer graphics software and information. If you have resources such as code or papers you would like to see available at WUArchive, let me know. It's a free way to keep your works alive at a permanent site.
The computer graphics community has joined the "API of the Month" club. Here, you too can make up your own new API name; simply pick one from each column:
prefix suffix ------ ------ Direct VRML Open X Shock GL Active Script Java Movie Cosmo Draw Cyber Wave Visual 3D
BTW and FYI, there's no doubt a good TIA (Three Initial Acronym) API generator could be made PDQ, IMO, given the existence of PCI, MMX, OLE, RDX, VFW, GDI, RSX, OCX, ICM, MFC, and AGP (and that's only a small taste of what just Microsoft and Intel have been up to). Actually, we're running out of acronyms: I just ran into two uses of STL (contest time: be the first to tell me what the two uses are and you win some random computer graphics CD laying on my desk).
In the same vein, here is a trademark alert: I recently noticed that the phrase "Old Number 5" is trademarked (I forget by who), so remember, when you use 5's, only use new ones. And don't forget that "the color Pink is a trademark of Owens-Corning Fiberglas Corp.".
Lastly, something I keep forgetting to mention: if you're a C coder, check out "Obfuscated C and Other Mysteries" by Don Libes, Wiley Books. I bought this on a lark with some book credit money I had, and it's one of the best things I ever got. The Obfuscated C contest winning programs are interesting, of course; I'm in awe of the program that solves differential equations and reverses code, and when applied to its own code creates a sort program, which when again applied to itself creates a Fibonacci sequence generator (no, I can't explain it better - check out http://reality.sgi.com/csp/ioccc/index.html for the Obfuscated C contest results, http://reality.sgi.com/csp/ioccc/1990/theorem.hint for the program description). However, some of the explanations of the code in these programs drag on. What's great about this book is all the "stuff they never taught you in school" techniques presented. There are some excellent pieces on allocating memory faster than malloc does, about efficient bit flag array creation and access, about signals, and many other topics which are useful for efficient and effective programming.
back to contents
Name: Jim Roedder Organization: McDonnell Douglas Interests: acceleration methods, fast intersection tests for bi-cubic patches Methods Used: SEADS, hierarchical SEADS, Newton-Raphson for cubic surfaces Phone:<PHONE_NUMBER> E-mail<EMAIL_ADDRESS>Snail mail: Jim Roedder/MC 064-2263/PO Box 516/St Louis MO 63166
I have done ray tracing for about 7 years as a small fraction of my time. I apply RT to the calculation of radar cross section (electromagnetic scattering) for aircraft. I use the '3D billiards' techniques of ray tracing for tracking ray bounces on a geometrical model. My principal objects are parametric bicubic patches (PBCs) & flat facets. I use the point in polygon algorithm for general facets and the 3 planes algorithm for triangular facets. I use 2 dimensional Newton-Raphson for intersection tests on the PBCs and SEADS for geometry walk through. I optionally use 2 levels of SEADS for reducing memory requirements when memory is limited.
Since about 1989 I have used a technique for PBC tracing similar to Rick Turner's (RTNews Nov 18 '91) where I subdivide my PBCs. This technique yields SpeedIndeed. Normally, the volume of the bounding boxes encompassing the subdivisions is much less than the volume of a single bounding box containing the entire surface. Further, knowing which subdivision is being tested provides a better starting point to begin 2D Newton-Raphson.
With this logic, my ray tracer is only 3 to 6 times slower on curved surface geometry than on a comparable faceted model. This is measured on a geometry where the bounces are not between close neighbors. Staying with the original surfaces also increases my accuracy relative to triangulating. Are any RTNews readers getting better speeds than this? DOES ANYBODY HAVE FAST ASSEMBLY LANGUAGE for 4by4 matrix multiplies (either double or single precision) on the following machines:
Workstations: SG, HP, IBM RISC , Sun Supercomputers: Intel Hypercube, Paragon
back to contents
In "An introduction to ray-tracing" we can find this results from Heckbert's formulas:
|sqrt| / | * | + | --------------------- n = n1 / n2 | | 1 | | | c1 = -I.N | | | 3 | 2 | c2 = sqrt(1 - n * n * (1 - c1 * c1)) | 1 | | 3 | 2 | T = n * I + (n * c1 - c2) * N | | | 7 | 4 | --------------------- | 1 | 1 | 13 | 8 |
We can do better: Bec's method (?) |sqrt| / | * | + | --------------------- n = n1 / n2 | | 1 | | | c1 = -I.N | | | 3 | 2 | w = n * c1 | | | 1 | | c2 = sqrt(1 + (w - n) * (w + n)) | 1 | | 1 | 3 | T = n * I + (w - c2) * N | | | 6 | 4 | --------------------- | 1 | 1 | 11 | 9 |
result: 2 * less, 1 + more
Any comments?
[I mentioned that on a few machines addition can be more expensive than multiplication. Xavier replied:]
I don't know if adds may be more expensive than multiplies, but if it's the case on some machines, one can write a simplier reformulation :
|sqrt| / | * | + | --------------------- n = n1 / n2 | | 1 | | | c1 = -I.N | | | 3 | 2 | w = n * c1 | | | 1 | | c2 = sqrt(1 + w * w - n * n) | 1 | | 2 | 2 | T = n * I + (w - c2) * N | | | 6 | 4 | --------------------- | 1 | 1 | 12 | 8 |
result: 1 * less and nothing more. Not so good as the previous one but there is no operation added.
____
[We also discussed light passing through colored transmitting objects and how to best control it. -EAH]
It appears that there is two ways for filtering colors.
1) the first solution is, as you say, filter by the color of the object and then the formula looks like this:
result_color = kt * light_color * object_color
Of course, if you don't want the filtering color you have to put the object_color to white.
2) the second solution is the one used by Softimage, for example. As kt goes to 1.0, the object disappears. So, even if you have defined the object as red, the object will be invisible and there will be no filtering effect at all.
result_color = kt * (kt * light_color + (1-kt) * object_color)
[A somewhat surprising formula, since there's a kt*kt term in there. -EAH]
An analogous problem appears with illumination models:
One use additive formulation, another (softimage) use multiplicative formulation:
result_color = local_color + ks * reflected_color + kt * refracted_color
result_color = (1-kt) * ((1-ks) * local_color + ks * reflected_color) + kt * refracted_color
In the second solution, refraction is dominant.
I don't know what is better, but I think you are right. It's more easy to control the transparencies with the first solution: combining kt and the object's color. Maybe this is more difficult when the object is mapped because the object's color is given by the map and if you want a small color attenuation you have to transform all the map (to white)?
[Personally, I use a method between these two methods: things like diffuse and ambient and reflection get scaled by Kt, but the specular highlight does not. This makes it easier to control the highlight (which is a hack, anyway - you should really be reflecting the light source itself). -EAH]
By the way, when working on the special effects for the movie "The City of The Lost Children" a problem arose: When you compose a computer generated image on a real image you use a mask (alpha plane) for object occlusions. But what is the correct solution for mixing the object's shadows, too, and the reflection of that object on mirrors... We can do it all in a single image but we have never seen articles about such processes to know if we are wrong or right.
[I sort of understand this problem. Compositing is definitely a pain: for example, it's common to allow a texture map to act as a backdrop which fills the background. However, this backdrop has no physical location in the scene, so if you put a reflective or refractive object in the scene the map is not seen. Usually no big deal if you also just use the backdrop as a reflection/refraction map used when nothing else is hit, or perhaps actually give the texture a real location in space. -EAH]
____
Paul Heckbert<EMAIL_ADDRESS>comments:
Yes, that is a nice little improvement. And I guess we would have to call it Bec's method!
As far as translucency, I suggest a formula like:
final_color = transparency*light_color + (1-transparency)*filter_color
where transparency = exp(-alpha*thickness)
and alpha is a parameter something like kt, controlling how much scattering there is, and thickness is the distance the ray travels through the transparent object.
I think you'll find formulas analogous to that in many computer graphics books.
back to contents
I have another problem, again a useful result for ray tracing: what is the average cross-sectional area of the projection of a sphere vs. a bounding box around the sphere? In other words, given a sphere in a bounding box, what is the chance that an arbitrary ray (originating outside the bounding box) hitting the box will also hit the sphere?
The answer turns out to be the ratio between the sphere's surface area and the bounding box's area. In fact, surprisingly, the chance of hitting any convex object with a random ray is proportional to its surface area. Goldsmith & Salmon's automatic bounding volume hierarchy article was the first place I heard of this theorem, but I hadn't seen a proof, so I asked around.
________
From: Jim Arvo<EMAIL_ADDRESS>To answer your question, yes, the average projected area of a convex body is 1/4 its surface area. You can check out my SIGGRAPH course notes from 1990 for a (nearly) rigorous proof, or almost any book on geometric probability. I gave at least one reference to the theorem in my chapter of the ray tracing book. The 1990 course notes are not available on my web page yet, but they will be as soon as I find the file!!! I'm such a pack rat I know I have it somewhere!
[And indeed he found it, check out http://www.cs.caltech.edu/~arvo/papers.html and get the "Ray Tracing with Meta-Hierarchies" paper. There are other great ray tracing (and other) papers here which have appeared only in course notes or hard to find proceedings, e.g. "The Ray Tracing Kernel" and "Backward Ray Tracing". -EAH]
________
It turned out that the first entry I received won:
From: Han-Wen Nienhuys<EMAIL_ADDRESS>http://www.stack.nl/~hanwen
I'm not sure this is what you want, but the expectancy of the area of a projection of any convex object compared to the area of its surface is a fixed ratio. The ratio can be easily calculated, take a sphere:
projection: pi R^2 object area: 4 pi R^2
ratio: 1/4
The area of the boundingbox is 6*(2*R)^2, =24*R^2 and the expected area of the projection is 24*R^2/4=6R^2, so the ratio of sphereprojection vs. cubeprojection is pi/6.
I am just doing this from the top of my head. Last year's Dutch University Mathematics Competition had a similar question (expected area of an isotropic projection of a cube).
The answer suggested partitioning the convex object in triangles and then proving the theorem for arbitrary triangles.
The idea is this (let ExpArea be the expected area of a projection along a isotropically distributed direction, and "f" is the ratio we are trying to find):
1. For any triangle T.
ExpArea(T) = f * Area(T)
f does not depend on T.
2. For any convex polytope (made of triangles T_i)
P = Union_i T_i
So ExpArea(P) = ExpArea(Union T_i) = Sum_i ExpArea(T_i) = Sum_i f*Area(T_i) = f * Area(Union_i T_i) = f * Area(P)
(maybe I am losing a factor 2 somewhere, because a convex set has back and/or front side. It doesn't matter, any factors will be absorbed in f)
3. If C is a convex object, it can be approximated by a triangularization P, so
ExpArea(C) = ExpArea(P) = f*Area(P) = f * Area(C) ~ ~
The triangles can be made smaller, and the approximations (~) will be better. In the limit,
ExpArea(C) = f * Area(C)
for any convex C. f is fixed (does not depend on C)
4. f can be easily calculated: A sphere is (radius 1) is convex,
ExpArea(Sphere) = pi Area (Sphere) = 4 * pi
So f is 1/4
5. Area(BoundingCube) = 4 * 6 = 24, So ExpArea(BoundingCube) = 1/4 * 24 = 6
ExpArea(Sphere) / ExpArea(BoundingCube) = pi / 6
I know that this is only a so-so proof (if it is worth the name), step 1 and especially step 3 would involve some advanced math, but this is how you would prove it elegantly.
The result also generalizes to lower (2) and higher dimensions.
________
In case you didn't follow that, here's a talk through:
To state this a little more loosely, step one says that an arbitrary triangle and its average projected area have a constant ratio. This could use a little more proof, as he says, but here's an intuitive way to know that this is true. First, this is definitely true for the class of all equilateral triangles - there is some answer to what the average projected area is for some one equilateral triangle, and scaling up this equilateral triangle to a different size won't change the ratio "f" between the new area and new average projected area. So, now make an arbitrary triangle out of a million tiny equilateral triangles; sure, the edges won't be perfect (add another billion tiny triangles, then, i.e. take it to the limit) but the point is that the ratio "f" for equilateral triangles then applies to arbitrary triangles (or any 2D figure, in fact). So, now we informally know step 1 is true, that "f" is a constant.
Step 2 says that a convex object made of polygons will have a constant "f" ratio, too, same as in step 1. This is because from any angle, no part of the object covers another forward facing part of the object (it's convex). So, you can sum up all the triangles' areas since they do not interfere with each other.
Step 3 is sort of like my step 1 informal proof: it says that any convex object (e.g. curved) can be tessellated into triangles, something I think we all believe.
Step 4 is the clever part: a sphere is a convex object, and the nice thing about a sphere is that its projected area is the same from any direction. So now we simply work backward through the steps. For a sphere the projected area vs. the surface area is 1/4th, so "f" must be 1/4, and since we proved this "f" is constant we now know that it holds for all convex objects, so we can compute the answer to the problem in Step 5. If this proof seems bass-ackwards to you, check Arvo's paper for a formal integration of the projected area of an arbitrary triangle. I personally like the (looser) proof as is, since we never had to even integrate to prove it.
Note that the value of 1/4th is for a convex 3D object. The ratio is 1/2 for an arbitrary 2D figure's average projected area to its actual area (because we do not compute its actual area by adding its front area to its backface area), if both sides of the 2D figure are visible (i.e. no culling).
This result is handy for all sorts of things. Goldsmith and Salmon use it to compute a cost function for the relative chances of hitting a bounding volume, so helping them to optimize their hierarchy. Or, say you want to test a graphics rasterizer by tossing arbitrarily oriented polygons on the screen which will cover an average of 50 pixels each. By this theorem you know that (using a parallel projection) the triangles need to cover 100 pixels when viewed straight on.
________
And the "all mimsy were the borogoves" comment of the day on this problem...
From: Ken Musgrave<EMAIL_ADDRESS>Just got back from a visit to Pixar, where Ronen remarked that they were having a conversation recently, the conclusion of which was "there's very little volume of a 48-dimensional sphere in a unit bounding box." Think about it: as the dimension D goes to infinity, the sphere's volume goes to zero. "All those corners to cut off," Ronen credited someone (I forget whom) with noting.
back to contents
________
Internet Raytracing Competition
The Internet Raytracing Competition is an open competition held every two months. Participants may use any 3D rendering program.
http://www.povray.org/irtc
[This is kinda fun, and overwhelming in the number of entries submitted, e.g. I see about 110 images in the latest contest. You can vote on the entries; something to do while waiting for compiles to finish. Many images have "how I did it" information attached. -EAH]
________
POV-Ray Mirrors
This is a list of known mirrors of ftp.povray.org and ways you can access the mirrored files.
ftp or http://wuarchive.wustl.edu/graphics/graphics/mirrors/ftp.povray.org
ftp://ftp.shu.ac.uk/pub/computing/packages/raytrace/ftp.povray.org
ftp or http://www.hensa.ac.uk/ftp/mirrors/povray
ftp or http://ftp.nectec.or.th/pub/mirrors/ray-tracing
ftp://ftp.etsimo.uniovi.es/pub/raytrace
NB: not all sites carry all files. For example, etsimo does not carry the competition, mirrors, images or Hall-Of-Fame. The shu UK mirror, as far as I know, only carries a subset also.
________
Errata for "Principles of Digital Image Synthesis"
You can find the errata listing on the web at:
http://www.research.microsoft.com/research/graphics/glassner/work/projects/pdis/errata.htm
Thanks to all the bug-spotters on the To: line!
-Andrew Glassner<EMAIL_ADDRESS>________
It is my pleasure to announce that my PhD dissertation is now available on the net. The dissertation is entitled:
It's all about global illumination models, Monte Carlo methods, variance reduction techniques, path tracing, light tracing and bidirectional path tracing. You can find the abstract, an overview of the chapters, the table of contents, the colour images and the dissertation itself at:
http://www.cs.kuleuven.ac.be/~ericl/thesis/
Even if you're not interested in the text you can just have a look at the pretty pictures. Enjoy! Kind regards,
Eric Lafortune
________
RayTraced Evolution
For info about RTEvol (RayTraced Evolution), a free package for procedural-modelling using Lindenmeyer-grammars and interpreted C-like macros/functions, look at this URL:
http://www.rz.tu-ilmenau.de/~juhu/GX/RTEvol/
Primarily I use this package to test some raytracing-acceleration techniques, but now it expands to a fully programmable system. It is an ideal tool for quick generation of test-scenes.
Have fun,
--JuHu<EMAIL_ADDRESS>________
Pete Shirley's moved to Utah, and his useful page has moved with him:
http://www.cs.utah.edu/~shirley
This page includes a focussed link list for Monte Carlo rendering techniques and a list of computer graphics related periodicals and conferences.
________
Grammar of Ornament now on CD ROM
I love the Dover book "The Grammar of Ornament" by Owen Jones. So I was happy to find that this book is now available on CD ROM; see
http://www.dimagin.com
This CD ROM is a labor of love; the creator, Stephen Hubbard, says it took 5 man years, $65K, and 3 girl friends to make.
________
Flatland now on the Web
While I'm on the topic of classics, the classic volume "Flatland" has been put on the web by Tom Banchoff, check out:
http://www.geom.umn.edu/~banchoff/Flatland/
You might also want to look at the projects Banchoff has been involved with (he's well-known for his visualizations related to topology, 4D spaces, etc):
http://www.geom.umn.edu/~banchoff/projects.html
________
ZRend
[ZRend is also mentioned in RTNv7n5; it is part of the Graphics Gems V distribution, and it has been improved since then by the author. -EAH]
The key features of this program are:
(a) Reads a variant of the standard Neutral File Format (NFF) as input (b) Outputs a 24 bit color TARGA file (c) Uses accurate fixpoint arithmetic in all its calculations (d) Works on X windows environment. We have tested it on Sun Sparc machines. (e) High Performance. The renderer has almost realtime performance.
This software is available through the Web and via anonymous ftp. The software includes sample files, including the teapot. We would appreciate any feedback you can give us on this software. We are quite impressed by the quality of the images produced. Enjoy the use of this utility!
http://www.cerc.wvu.edu/public_domain_sw.html
- Raghu Karinthi<EMAIL_ADDRESS>________
Application Challenges to Computational Geometry
This tech. report is now available at:
http://graphics.lcs.mit.edu/~seth/pubs/taskforce/techrep.html
- Seth Teller
[it's a report on the challenge of applying computational geometry to practical problems, among other things. Also check out http://www.cs.duke.edu/~jeffe/compgeom/ for comments on this report and for many other computational geometry resource links.  %J IEEE Computer Graphics and Applications %V 16 %N 5 %D Sept. 1996 %P 21-25
I found this is also on the web at http://ada.computer.org:80/pubs/cg&a/articles/g50021.pdf - very nice! See http://ada.computer.org:80/pubs/cg&a/backissu.htm for other IEEE CG&A back issues and articles/abstracts available online.
If you render, read this one. They point out many common bugs you'll run across. I had already run into many of these bugs, but a few were new ones I hadn't hit yet - it's great to get a warning of what to watch out for, sort of an "FBI's Most Wanted" list of rogues. Their "poor texture interpolation" bug (where a textured quadrilateral with one short side is badly rendered if split into two triangles) actually has an interesting limiting case: a tessellation of a cone. A good textured cone tessellation needs to have quadrilaterals for the faces, not triangles: at the cone tip you need two vertices, with the XYZ locations identical but the normals and texture coordinates different. Systems which show textures by splitting up quads into triangles and rendering these will improperly display such quadrilaterals.
____
%A Krzysztof S. Klimaszewski %A Thomas W. Sederberg %T Faster Ray Tracing Using Adaptive Grids %J IEEE Computer Graphics and Applications %V 17 %N 1 %D Jan/Feb 1997 %P 42-51
The short summary is: automatic bounding volume hierarchy with grids at each level. To make this scheme more profitable the authors discuss methods of merging bounding volumes and of nesting grids directly within voxels. It's nice to see some serious ray tracing efficiency research still being done, and the techniques and results are interesting and well-presented. Even if you just use grids, their section on setting the resolution of grids is a nice take-away (the gist is an idea I've heard of before, but I don't recall seeing in print: instead of giving a box of dimensions of say 1,4,9 a constant grid resolution along each axis, instead scale the resolutions proportionally with the box's dimensions. Timing results are given showing this to be a better method.)
____
%A Frederic Cazals %A George Drettakis %A Claude Puech %T Filtering, Clustering and Hierarchy Construction: a New Solution for Ray Tracing Complex Scenes %J Computer Graphics Forum (Eurographics '95) %V 14 %N 3 %C Maastricht, Netherlands %D 1995 %P C371-C382
This one's available on-line at http://flamingo.stanford.edu/~cazals/xfc_research.html. It's got some interesting ideas on forming efficient access structures. Specifically, it uses techniques such as histogramming and filtering of the object sizes to split up and then cluster objects of differing scales in order to efficiently ray trace scenes. I enjoyed it because it's a new way of thinking about the problem.
back to contents
You make a great point about the fickleness of genetic algorithms. One problem is that if you the human need to judge each image, you have to see all these garbage tests. Using some automatic quality selection algorithm instead will prune for you, so while the generation effort is still wasted, it's automatic and you just let things cook a bit longer. But as we said, the quality of texture is more a human subjective thing. We need to stay in the loop! Here a fast CPU is still good for fast updates so the human can make their choices faster I guess...
But a more promising method of using genetic algorithms is to limit their scope. By feeding in a set of very complex primitives, simple combinations can make new and impressive surfaces using only simple combinations. Consider the impossibility of making a fractal noise cloudy surface with a genetic algorithm that can do only + - / *, if, and floor. It just wouldn't happen, though those operations are sufficient. But when it has noise() as a primitive, magic can happen!
So I see a way in which say a limited number of complex primitives (say two fractal noises, a sawtooth, and a radial ramp) and a limited number of simple operations (+-/* if.. sin,) get mixed together, with rules to prevent super-concatenation. 3*noise(x)+x+noise(sawtooth(x)) is fine, but sawtooth(noise(x+4*sin(noise(radial(x+1))))) is not. Maybe even limit it to simple binomial combinations.
The idea of this is that by limiting the genetic forms, you can limit the complexity of the textures (keeping them efficient) and you also limit the number of changes that can occur during a mutation or breeding. You give up some of the rich number of possible surfaces you might get by surprise, but the extra control may be reasonable. Have you used Kai's Power Tools texture explorer? It seems to have only a very few base algorithms, with only a few controls, though they also use a large selection of spline color maps. It's not overly complex, yet people play with it for hours.
Another aspect of genetic algorithms is perhaps more interesting. Forget changing the ALGORITHM, take any current man-made texture. Nearly all are driven by a list of parameters like "turbulence value" or "scale size", etc. What set of parameters looks best? Answer: jiggle a test test of parameters some way and let the user pick images until these parameters get set to some local user maximum happiness value. I mention this a bit in the postscript of my chapter in the texturing book. There's something to this. I don't know just how to do it yet. But it'd be very useful, both for end user as well as for developer.
[and here's another interesting bit from another note from Steve. -EAH]
My main idea is that the algorithm for choosing the new parameters is not obvious, and depending on the application it may even vary. So I may write a METAalgorithm which basically has a bunch of methods to try. It tries them all and notices which ones tend to make better pictures (as scored by the user). Then it starts using those selection methods more often. This can happen adaptively even as the user plays around. Maybe at first the user is just exploring, looking for many different types of appearances, until he finds a cool one he wants to refine. Suddenly his goals change; he wants one that's "like THAT but better", as opposed to "something cool not like these". Anyway, just a long-deferred project. I haven't thought about it for a year or so.
back to contents
Basically I've compiled a list of reasons why would one use raytracing at all. Here it goes:
I doubt these (or other) reasons will ever push scanline based renderers like 3DS out of the picture.
Real world animation (visualization, games, ...) will always need faster results even with god knows how fast machines, academic research will without a doubt move to global methods like path tracing and particle tracing.
There is no easy (cheap) way to avoid aliasing in raytracing. This is going to be a dominating factor when raytracing moves (and it will, I'm sure) into mainstream production software. In production, quality is very important.
[Incidentally, check out Blue Sky Productions, http://www.blueskyprod.com/, for a company which uses pure ray tracing for production work. -EAH]
back to contents
...a neat sampling scheme specifically for soft shadows. If a pixel is in shadow but its neighbor is not, both are sampled even more. If one of the pixels is in PARTIAL shadow, its neighbors are also sampled more. Pass #1 basically uses a single sample per pixel, but it identifies any shadow boundaries. The recursive "fill" algorithm used in pass #2 helps a lot since it works very hard on the soft areas but doesn't fire much more in solid light or solid dark regions. It worked surprisingly well. I meant to do the same for depth of field, but it was trickier and I never got around it. However, I really find the shadow "area growth" sampling to work exceedingly well; looking at a grey scale image of the number of samples taken for each pixel, the soft shadow regions are easily noticed.
This is good; you only do the horrible soft shadow work where the shadow really is soft.
back to contents
As discussed in RTNv8n2, this "soft reflection" idea can actually be used in object space (instead of image space, as above). Microcosm (reviewed in RTNv7n5) (now called Megahedron, and available from Syndesis http://www.syndesis.com) actually implements this technique.
back to contents
"Radiosity" is a computer graphics technique that enables you to synthesize photorealistic images. Whereas ray tracing techniques excel in the rendition of point light sources, specular reflections, and refraction effects, radiosity methods accurately model area light sources, diffuse reflections, color bleeding between surfaces, and detailed shading within shadows. They are in a sense complementary approaches to photorealistic rendering.
Folklore had it that you needed a graphics workstation with gigabytes of RAM or even a supercomputer to do radiosity rendering. This is no longer true: You can use your personal desktop computer -- a '386 IBM-PC with a math coprocessor, 4 MB of RAM, and a 256-color SVGA display will do nicely -- to experiment with radiosity methods. A 66-MHz '486DX machine will render a simple scene (540 polygons) in less than three minutes. A more complex scene with 2,700 polygons can be rendered in a little over six minutes.
Commercial radiosity renderers are slowly making their way into the marketplace. Take a look, for example, at the incomparable Lightscape Visualization system (http://www.lightscape.com) to see what is available now for Windows NT. (Other interesting sites on the Web for commercial radiosity renderers are http://www.bentley.com/products/masterpiece/ -- download the Microstation MasterPiece Technical Profile -- and the Italian http://www.atma.it/. [also Lightworks, http://www.lightwork.com/products/rad_over.htm. -EAH])
In the meantime, you can download HELIOS to experiment with the possibilities of radiosity rendering using MS-Windows 3.1 or Windows 95. The Web site is:
http://www.ledalite.com/software/software.htm
where you will find a demonstration version of HELIOS Version 1.03A (144 KB) and the complete C++ development package (700 KB), including four different executable versions of HELIOS, fully- commented C++ source code (over 12,700 lines), make files for Microsoft Visual C++ 1.5 and Borland C++ 4.5, online help files, two demonstration environments, demo images, and more.
(While you are perusing our Web site, you might want to look at http://www.ledalite.com/library-/ledapub.htm -- we have an eclectic variety of academic papers and articles on computer graphics and related topics available online for downloading.)
The HELIOS development package is *not* in the public domain. It is copyrighted material that may be freely copied, redistributed, and/or modified for personal, non-commercial use ONLY, provided the copyright notice is included with all source code files.
HELIOS was first developed in:
Ashdown, I. 1994. Radiosity: A Programmer's Perspective. New York, NY: John Wiley & Sons, Inc. Softcover, 498 pages, 12 color plates. http://www.wiley.com.
ISBN 0-471-30444-1 (without diskette) $39.95 US ISBN 0-471-30488-3 (with 3.5-inch MS-DOS diskette) $54.95 US
[brief review and table of contents in RTNv7n3. -EAH]
This book provides a detailed explanation of radiosity theory and its associated algorithms (no knowledge of higher mathematics required!) More important, it also includes complete, fully documented, and compiler-independent C++ source code (over 7,500 lines) for HELIOS Version 1.00A, a fully-functional radiosity- based rendering program for MS-Windows 3.1, Windows 95, and Windows NT.
The radiosity-related code presented in the book is identical to that now offered online. If you want to fully understand how HELIOS (and radiosity) works, you more or less need to buy the book.
back to contents
Carlo Sequin's group at UC Berkeley has done some good work in the area of culling scenes using cells and portals, the URL for his home page with related links is:
http://HTTP.CS.Berkeley.EDU/~sequin/
A good reference for this technical area is:
S. J. Teller and C. H. Sequin, ``Visibility Preprocessing for Interactive Walkthroughs,'' Proc. ACM SIGGRAPH'91, Las Vegas, Aug. 1991, and Computer Graphics, Vol 25, No 4, pp 61-69, (1991).
Seth Teller is now at MIT, and here is the URL for his PhD Thesis which is focused on the cells and portals culling area:
http://graphics.lcs.mit.edu/~seth/pubs/pubs.html
David Leubke at UNC has implemented a cell-based culling system for Performer, see his URL at:
http://www.cs.unc.edu/~luebke/publications.html
back to contents
Two books I've worked on last year are Keith Rule's "3D Graphic File Formats: A Programmers Reference", Addison-Wesley (see http://www.europa.com/~keithr/) and and Bridget Testa Mintz' "Graphical Treasures of the Internet", Academic Press (http://www.apnet.com/). I've also done some editing for parts of Rob Glidden's "Graphics Programming with Direct3D: Techniques and Concepts," Addison-Wesley.
"3D Graphic File Formats" is about the only book in its field. Murray and vanRyper's "Encyclopedia of Graphics File Formats" is about the only book that comes close at this point, and their volume is primarily about image file formats. Rule's book discusses VRML 1.0, DXF, 3DS, Wavefront OBJ, TrueSpace, WTK-NFF, POV-Ray 2.2, and RAW formats. For most readers Rule provides something no other book does: a working program for reading and writing each of these 3D formats and translating from one to another. It is written in C++, with a Windows framework to read/view/write models, along with an OCX custom control. The CD ROM also includes over 100 models not normally found on the web and trial versions of TriSpectives and TrueSpace. The best thing about the book: the DXF format is explained in English, not tech-ese. Credit for this accomplishment is shared by Rule and Zap Andersson, who has worked with the format for years.
Some limitations of the book should be mentioned. First, the software converts basic geometry, but currently does not support translations of surface vertex normals (i.e. any smoothing information is lost when moving between formats) or texture coordinates. It also does not have a serious polygon tessellator. So, you may have to get a professional translation program (Syndesis' InterChange, Okino's Polytrans, etc), for higher quality translations. Also, the book is not meant to be the final word on each specification; much of the book is dedicated to explaining how the software works, not how the format works. However, given the page limitations, this book is quite a feat. It is more than adequate for those who want to get under the hood and understand various 3D file formats, and for those who want to convert from their own file formats to others. Adding new format readers and writers is a fairly straightforward process; usually one of the formats Rule covers is similar to what you want to add, so that code can simply be regrooved to read in the new format.
Mintz' "Graphical Treasures of the Internet" is on the non-technical end of the spectrum. While a fair bit of the book is dedicated to explaining to beginners many of the basics of Internet, commercial services, and non-commercial alternatives (and I would bet that almost no one has tried all the resources she covers), there is also a fair bit of meat about other topics. There are interviews with a number of well-known computer graphics and Internet people and many different perspectives are presented. Personally, I found the chapter on copyright and software patents particularly interesting; it was something I felt confident passing on to our company lawyer for his own edification. There is also information here found nowhere else. For example, she presents a history of the comp.graphics.* hierarchy back as far as could be done. Mintz is an engineer turned professional writer, and it shows: this book is both well-written and well-informed.
Glidden's "Graphics Programming with Direct3D", from Addison-Wesley (http://www.aw.com/) is a pleasure to read, which is surprising given that the topic sounds dry as can be. His book talks about the place of 3D in the marketplace, motion capture, how to manage multi-user spaces, and other interesting topics which do not directly bear on the topic of Direct3D. The author is a long-time technical reporter on computer graphics and related topics, so his prose is readable and he can't resist commenting on many aspects of the field. He gives a great top-level view of various areas of the field, along with solid advice on Direct3D, e.g. whether to go with retained mode vs. immediate mode. There is also some information on 3D file formats such as DirectX, DXF, and 3DS, on the basics of 3D vector math, and on the fundamentals of graphics PC hardware. Given that the Direct3D API is still in flux (e.g. today I read how a new command, DrawTriangle, was just added to it), it means to me that this book actually could have a longer life-span than could be expected, as Glidden's discussions on more than just the nitty-gritty of using D3D will last well beyond the next beta release.
Many other books came out during 1996, of course. API books were a noticeable trend, witness "3D with HOOPS" by William Leier and Jim Merry, Addison-Wesley, with a CD-ROM with a personal version of the HOOPS library for the Mac, Unix, and Windows. Such software used to cost hundreds, if not thousands, of dollars for a single person license, but in the new market for mind-share prices have dropped. Same story for "Learn 3D Graphics Programming on the PC" by Richard Ferraro, Addison-Wesley, which is essentially a nicely done explanation of 3D graphics using the RenderWare API and includes a personal copy on CD-ROM - again, a few years ago a personal copy of this software would cost you about $1000.
Certainly of note is "Jim Blinn's Corner", from Morgan Kaufmann Publishers (http://www.mkp.com/). Finally, many of Blinn's IEEE CG&A column articles are assembled in one place. I personally wish they had just gone for it and published all 45 of his columns to date, but having these 20 in one place saves me a lot of flipping through old issues of CG&A. In case you've been missing out on this column, think "Graphics Gems" meets "Programming Pearls". Each chapter is around 10 pages long and focusses on a particular topic, like "How Many Ways Can You Draw A Circle?", "Subpixelic Particles", and "Backface Culling Snags". There is a lot of useful "here's what I think is the best/fastest/cleanest way to do this" type of advice. If you're a graphics programmer, why you don't have this book I cannot imagine.
What else is new? Well, there's a second edition of Murray & vanRyper's "Encyclopedia of Graphics File Formats", from O'Reilly, (http://www.ora.com/), which has bulked out a bit more with information on new formats like PNG and more on 3D file formats like 3DS. I still consider this primarily a 2D file format book (esp. now that Rule's book is out), but it's definitely the first place I look for information on such formats. Other than that, hmmm, I haven't gone wild buying new books this year I guess. There are a ton of new books on specific topics (e.g. I'd guess around 50+ on just VRML itself), but nothing else pops out at me as of general interest - if you know anything good I've missed, let me know!
Another book of note is Watkins & Mallette's "Stereogram Programming Techniques", from Charles River Media (http://www.charlesriver.com/). I beat this topic to death in RTNv8n1, reviewing two books in the process, so I have to admit that I've only skimmed through this new volume (the fad's past, right? Stereogram pictures are destined to be remembered as the black light posters of the 90's). This new entry in the field looks pretty good: it stresses the theory and programming behind the technique, and there's no hidden agenda to sell you any additional software. This book is considerably longer that the other two books I reviewed (it's about 450 pages), and so can take its time in presenting theory, code listings, etc. The stress is put on stereo pairs, SIRDS, and SIS (i.e. there are no text stereograms). All in all, it looks good, and also points the reader at other articles and resources.
For more book recommendations, try Brian Hook's page:
http://www.wksoftware.com/publications/3dbooks.html
Tastes vary, and I disagree with a few of his reviews, but the great thing for me was to hear about some books I've never even run across. Such a list gives you a chance to get some titles to page through at the bookstore and see if they look worthwhile (Also, there are some interesting HTML pages on Direct3D and OpenGL under the "publications" category at this site, if you're in to such things).
back to contents


The tastiest little town in the south has a new addition to the Brunch Scene. Plant-Based, Alkaline and Southern Cuisine come together in this celebration of food and health. Join us on Sundays to experience The Bull City's Pop-up Vegan Brunch on the BLVD.
About UsChef April of Chef April's Enterprise and Chef LaMana of Culinary Healing combine their culinary skills and passion for healing with food to present a menu that is both good and good for you!
Mushroom Bacon
Black Bean and Walnut Sausage
Burro Banana Hash
Kale Salad
Grits
Fonio
4125 Durham-Chapel Hill Blvd
Durham, NC 27707
Pop-up Brunch Location is inside of Soul Good Vegan (formerly Souly Vegan Cafe)
Email us


code {{ error['code'] }}
error {{ error['error'] }}
This form will log in using the credentials in the {{ table }} table of {{ url }}.
{{ table }}
{{ url }}
You can log in as alpha, beta, gamma or delta. The password is the same as the username.
alpha
beta
gamma
delta
Forgot your password?
Sign up as new user


How to Create a Task to Synchronize
Tapir Lab.
December 2020
How to Create a Task to Synchronize
Steps:
- Log into your OpenProject account and go to the work packages page.
- Click, “+Create” button on the right upper side of the page.
- Enter a task subject. The subject should not include any “:” (colons).
- Specify the description of the task, then, press enter and start a new line.
- If the first line includes only three “!” (“!!!”), it will not be synchronized!
- To clarify, the first line should be in the form of “!!!\n” to not to synchronize
- Specify the time that you want to create your task on the Calendar as below:
- dueHour=HH:MM:SS
- For example, it should be “22:00:00” to create an event between 10 pm–11 pm.
- Tasks should be assigned to one of the members.
- If not, ‘Not assigned to anyone’ will be written into the explanation of the event.
- Specify the “Finish Date” of the task.
- If “Finish Date” is not specified, an event will be set on the creation time of the task.
- If you get an error, please check the whether requirements are satisfied or not.
- Refer to the following pages for an example of task creation.
Create a Task on OpenProject
Fill in the Details of the Task
An Example Task After Creation
// reveal.js plugins


Our Vision: To be the number one online website seeking
online orders for delivery of Flowers , Cakes ,Chocolates , and other assorted gift
items across Jordan!
Gallery
1 / 6
Different Sets
2 / 6
Mini chocolate box
3 / 6
Our Gifts
4/ 6
Candy present
5/ 6
Flower Gifts
6/ 6
For every Occasion
❮
❯
Candy pipe
Lavender boucquet
Journal Set
Chocolate Box


Sign up
Verifying with phone number
Enter your phone number and verification code
{% csrf_token %} {{ auth_phone_verification_form.as_p }}
Verify


Introduction
Project builds a jar-based app that reads in Climate Research Unit Time Series 2.1 files gridded files, parses and transforms them, and writes them to a variety of outputs (flat-file; SQL database; distributed filesystem). A large test file is available online, but you can also download smaller samples here: sample1.pre; sample2.pre. Details of the licensing of the data can be found on the data homepage.
Project notes are available describing the software internals, data outputs, and design reasoning (see menu, left). The application is written in the Java language for portability.
To run the application, you’ll need the latest Java install: download site. If your computer already has Java installed, please make sure it is the latest version.
Then download this jar file somewhere convenient.
If Java has installed properly (and it doesn’t always), you should then be able to double-click the jar file to run it. If this fails, open a command prompt / terminal in the directory where you have saved the file*, and enter:
java -jar dbexamples-1.0-jar-with-dependencies.jar
(*You can do this in Windows by navigating to the directory in Windows Explorer and typing cmd
in the address bar. For Macs, open Terminal, type cd
(with a space after it) and then drag the folder from Finder into Terminal. Press enter.)
The application should be fairly self-explanatory. You can set the output type and location under the Options
menu. The outputs will appear in your home directory unless you choose otherwise under Options
. The directories and files it produces should be relatively self explanatory (any databases files will obviously be complicated in detail but the directories should be obvious), but if you’d like more information on these, see notes on data and metadata. Database entries can be confirmed in the user interface: the first and last records of any given table are listed.
Although the code should adapt to large, memory hungry, files, this will be much slower. You can improve the memory for a standard run by (instead of the above) typing:
java -jar -Xmx4g dbexamples-1.0-jar-with-dependencies.jar
where the “4g” is the amount of memory you’d like to allocate to the process in gigabytes.
Building and testing the source code
If you want to rebuild the application, the simplest (indeed only practical) way to build the source code is to download Maven - again, if you have it installed, make sure you have the latest version. If you haven’t got it installed, you’ll need to download and install the latest Oracle Java Development Kit (JDK) (or less restrictive Open JDK) first, install it, and then follow the Maven install instructions.
You can then download the source code repository somewhere convenient.
Find the download and extract it. Go into the directory produced, and you should find a file called pom.xml
. Open a command prompt within this directory, and type:
mvn package
This will download the other code libraries needed for the application (for example, the database code) and compile the code. As it does this, it will also run a series of unit tests to confirm the code runs ok.
Although Maven will generate a target
directory, ignore this; if, instead, you now look in the src
directory (which should be in the same directory as the pom.xml
) and then resources
and releases
you should find a newly built jar file that you can run as above. If you want to rebuild this website including all the JavaDocs for the code as well, locally, you can type:
mvn site
This will generate the site on your local drive. If you look in the target
directory mentioned above, you should see a site
directory. Go into this and open the index.html
to open this page.


Now that we have covered the important aspects of ggplot
, meaning getting the actual plot you wanted, let us now look into secondary elements of the plot.
If we look at the iris
data plot that we made before:
The continuous x axis breaks are with 2,4,6 and so on. If we would like to have 1,2,3… We change this using scale_x_continuous()
and breaks
.
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width))+
geom_point(aes(size=Sepal.Width, color=Species))+
geom_smooth(method="lm") +
scale_x_continuous(breaks = 1:7)
plot
You can do the same with y-axis
.
By using limits
, we can also decide on the parts to plot to be shown:
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width))+
geom_point(aes(size=Sepal.Width, color=Species)) +
geom_smooth(method="lm") +
scale_x_continuous(limits=c(3, 7))
plot
We can do the same with discrete x values like in the case of our gene counts
dataset.
gc_long %>%
group_by(Time, Replicate) %>%
summarise(mean=mean(log10(count +1)),se=se(log10(count +1))) %>%
ggplot(aes(x=Time, y=mean, fill = Replicate)) +
geom_col() +
scale_x_discrete(limits=c("t0","t24"))
plot
One can also use xlim()
and ylim()
functions that function the same as limits
with scale_x_continous()
or scale_x_discrete()
You can also customize the axis labels using the name
option within scale_x_continous
and scale_y_continous
.
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width))+
geom_point(aes(size=Sepal.Width, color=Species))+
geom_smooth(method="lm") +
scale_x_continuous(name = "Length", breaks = 1:7) +
scale_y_continuous(name = "Width", breaks = seq(0,3,0.5))
plot
with labels
in combination with the scales
package, one can change or make the unit of the axis look more comprehensible, when needed. Like using percentage
option or scientific
option.
There are many ways to control the legends, below are some of the examples:
First by using guides()
function.
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width))+
geom_point(aes(color=Species,size=Sepal.Width))+
guides(size="none")
plot
We can also turn off legends by geom.
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width))+
geom_point(aes(color=Species,size=Sepal.Width),show.legend=FALSE)
plot
The legends can be edited by scale_<aesthetic>_<discrete or continous>
function that we have been using. Take the below figure for example, we have the Sepal.Width
and the Species
with the size
and color
aestheitcs respectively.
Let’s try to edit the legends here like mentioned before:
Now that we started into theme()
, it is possible to much more editing of the plot with this function. Let us look into some of the parameters that would be very helpful to work with.
You can change the style of the axis texts in the following way:
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width)) +
geom_point(aes(color=Species,size=Sepal.Width)) +
scale_x_continuous(name = "Length", breaks = 1:7) +
scale_y_continuous(name = "Width", breaks = seq(0,3,0.5)) +
theme(axis.text.x = element_text(face="bold", color="#993333", size=14, angle=45),
axis.text.y = element_text(face="bold", color="#993333", size=14, angle=45))
plot
It is also possible hide the ticks
.
ggplot(data=iris,mapping=aes(x=Petal.Length,y=Petal.Width)) +
geom_point(aes(color=Species,size=Sepal.Width)) +
scale_x_continuous(name = "Length", breaks = 1:7) +
scale_y_continuous(name = "Width", breaks = seq(0,3,0.5)) +
theme(axis.text.x = element_text(face="bold", color="#993333", size=14, angle=45),
axis.text.y = element_text(face="bold", color="#993333", size=14, angle=45),
axis.ticks = element_blank())
plot
There are many things one can use to style the axis and/or axis labels. Just use ?theme()
to look for all the different one can use to stylize the plots.
Let’s consider the plot below and save it as an object P
for the sake of simplicity.
P <- gc_long %>%
group_by(Time, Replicate) %>%
summarise(mean=mean(log10(count +1)),se=se(log10(count +1))) %>%
ggplot(aes(x= Time, y= mean, fill = Replicate)) +
geom_col(position = position_dodge2()) +
geom_errorbar(aes(ymin=mean-se, ymax=mean+se), position = position_dodge2(.9, padding = .6)) +
theme(axis.ticks = element_blank())
P
plot
theme_light()
, theme_minimal()
, theme_classic()
and theme_bw()
are a couple of themes that are used very often in publications.
Task Try to replicate the plot below if you have enough time.
plot
Tip: 1 geom_line()
is a bit tricky when you use it together with groups
. It tries to draw lines within the group. In this case, if you would like to draw lines between the groups (like in the above plot, between t0
through t2
to t24
), you initate the ggplot with aesthetics for the line and add geom_line(aes(group=1))
this way.
Tip: 2 This figure has theme_light()
## R version 3.6.3 (2020-02-29)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.1 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] ggthemes_4.2.0 scales_1.1.1 forcats_0.5.0 stringr_1.4.0
## [5] purrr_0.3.4 readr_1.3.1 tidyr_1.1.2 tibble_3.0.4
## [9] tidyverse_1.3.0 reshape2_1.4.4 ggplot2_3.3.2 dplyr_1.0.2
## [13] captioner_2.2.3 bookdown_0.20 knitr_1.29
##
## loaded via a namespace (and not attached):
## [1] tidyselect_1.1.0 xfun_0.18 lattice_0.20-40 splines_3.6.3
## [5] haven_2.3.1 colorspace_1.4-1 vctrs_0.3.4 generics_0.0.2
## [9] htmltools_0.5.0 mgcv_1.8-31 yaml_2.2.1 blob_1.2.1
## [13] rlang_0.4.8 pillar_1.4.6 glue_1.4.2 withr_2.3.0
## [17] DBI_1.1.0 dbplyr_1.4.4 modelr_0.1.8 readxl_1.3.1
## [21] lifecycle_0.2.0 plyr_1.8.6 munsell_0.5.0 gtable_0.3.0
## [25] cellranger_1.1.0 rvest_0.3.6 evaluate_0.14 labeling_0.4.2
## [29] fansi_0.4.1 broom_0.7.0 Rcpp_1.0.5 backports_1.1.10
## [33] jsonlite_1.7.1 farver_2.0.3 fs_1.5.0 hms_0.5.3
## [37] digest_0.6.27 stringi_1.5.3 grid_3.6.3 cli_2.1.0
## [41] tools_3.6.3 magrittr_1.5 crayon_1.3.4 pkgconfig_2.0.3
## [45] Matrix_1.2-18 ellipsis_0.3.1 xml2_1.3.2 reprex_0.3.0
## [49] lubridate_1.7.9 assertthat_0.2.1 rmarkdown_2.3 httr_1.4.2
## [53] rstudioapi_0.11 R6_2.5.0 nlme_3.1-144 compiler_3.6.3
End of document


ETHICS AND THE PRINCIPALSHIP
by Anthony J. Oliveira
Dissertation submitted to the Faculty of the Virginia Polytechnic Institute and State University
in partial fulfillment of the requirements for the degree of
DOCTOR OF EDUCATION in
Educational Administration APPROVED:
/ D4 OPI
Wayne M. Worner, Chairman AaeDL C Bw EC
M. David Alexander Jim Cc. Fortune
ene LG Led Js
Thomas C. Hunt Richard ‘G. Salmon
November, 1990
Blacksburg, Virginia


yes and you can also add a block heigth as a 4th param
to start the rescan from
I added that, and was wondering if somehoe it broke things
daemonfox13-Jun-19 04:47 PM
nope just needed to know the syntax changes
ComputerGenie 👴👴👴13-Jun-19 04:48 PM
didn't we have this same "" issue with mm/iguana creation when we 1st started? (edited)
daemonfox13-Jun-19 04:48 PM
that one seems straight forward why
the sendmany has been driving me nuts
blackjok3r13-Jun-19 04:49 PM
@zatJUM
I'm pretty sure I know what happened there, it happens when the chain reorgs, atm, the code just deletes the staking tx from the wallet, I think I know a way to fix it, but we need to put up with it for a bit, may need to rescan the wallet ever few days if its "losing: lots of funds.
zatJUM13-Jun-19 04:49 PM
ok
Next problem: no iguana connections
I let it run a few hours, but still no connections. I just pkill'ed it and reran. Let's see
phm8713-Jun-19 04:51 PM
How do you check that there is no iguana connections ? (I wonder why my KMDLabs NN setup doesn't work since beginning, maybe I did sth wrong)


Defined Type: environment_variable::variable
- Defined in:
- manifests/variable.pp
Overview
Environment_variable::Variable
Manage an environment variable with Puppet.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'manifests/variable.pp', line 8
define environment_variable::variable (
$value = undef,
$variable = $title,
Enum['present','absent'] $ensure = present,
) {
# Attempt to parse variable name and value from title if it is in the form X=x
if $title =~ /.+=.+/ {
$split = split($title, '=')
$_variable = $split[0]
$_value = $split[1]
} else {
$_variable = $variable
$_value = $value
}
case $facts['kernel'] {
"windows": {
# progressively build up the path with seperate resources. if the provider
# doesn't allow this will have to rewrite to be a concat
windows_env { "${_variable}=${_value}":
ensure => present,
mergemode => clobber,
}
}
"Linux": {
$file_ensure = $ensure ? {
"present" => "file",
default => "absent",
}
file { "/etc/profile.d/environment_variable__variable__${_variable}.sh":
ensure => $file_ensure,
owner => "root",
group => "root",
mode => "0644",
content => "export ${_variable}=${_value}",
}
}
default: {
fail("#{module_name} does not support ${facts['os']['family']}")
}
}
}
|


A list style for emphasising parts of a list item, useful for repeating phrases across that list’s items.
yarn add @gov.au/keyword-list
npm install @gov.au/keyword-list --save-dev
keyword-list
├─ core
└─ link-list
├─ core
└─ body
└─ core
The visual test: http://uikit.apps.staging.digital.gov.au/packages/keyword-list/tests/site/
Copyright (c) Commonwealth of Australia. Licensed under MIT.


Movie catalogue
Sort by
Country
Director
Rating
Resolution
Title
Year of release
Order
↑
↓
Preparing data…


This is the Client App details page. Use this page to modify the Client App's meta-data, policies, and contracts. There is no need to follow the tabs in order, but note that you will need to fill out a minimum amount of data before the Client App can be registered with the Gateway. In particular, the Client App must have at least one API Contract (see the "Contracts" tab).
The 'Contracts' tab is where you can manage all of the API Contracts for this Client App. A API Contract is simply a link between this Client App and a provided API the the Client App consumes.
The 'Policies' tab allows you to manage the Client-level policies that should be applied whenever a request is made to any API consumed by this Client App.
The 'APIs' tab lists all of the APIs consumed by this Client App, including showing the API Key and live endpoint for each. Go here if you want to figure out how to invoke an API once you have a Contract for it.
The 'Change Log' tab shows a history of all the changes made to the Client App. Essentially it is an audit log.


6
The Indictment of the LORD
1 Hear what the LORD says:
Arise, plead your case before the mountains,
and let the hills hear your voice.
2 Hear, you mountains, the indictment of the LORD,
and you enduring foundations of the earth,
for the LORD has an indictment against his people,
and he will contend with Israel.
3 “O my people, what have I done to you?
How have I wearied you? Answer me!
4 For I brought you up from the land of Egypt
and redeemed you from the house of slavery,
and I sent before you Moses,
Aaron, and Miriam.
5 O my people, remember what Balak king of Moab devised,
and what Balaam the son of Beor answered him,
and what happened from Shittim to Gilgal,
that you may know the saving acts of the LORD.”
What Does the LORD Require?
6 “With what shall I come before the LORD,
and bow myself before God on high?
Shall I come before him with burnt offerings,
with calves a year old?
7 Will the LORD be pleased with thousands of rams,
with ten thousands of rivers of oil?
Shall I give my firstborn for my transgression,
the fruit of my body for the sin of my soul?”
8 He has told you, O man, what is good;
and what does the LORD require of you
but to do justice, and to love kindness,
and to walk humbly with your God?


CrimPapers
Articles published on 14 January 2017
On 14 January 2017, 8 new articles were published in 4 journals.
The Historical Origins of Corruption in the Developing World: A Comparative Analysis of East Asia
The Questionable Legitimacy of Non-State Anti-Corruption Bodies: A Case Study of the Tennis Integrity Unit
An Exception to the Rule: Belief in Redeemability, Desistance Signals, and the Employer’s Decision to Hire A Job Applicant With A Criminal Record by Suzanne E. Reich
Challenges to Implementing Culturally Specific Models in Juvenile Corrections by Rachel Feinstein, Mark Magidson
Hispanic Exconvicts’ Perceptions of Challenges and Reintegration by Yok-Fong Paat, Trina L. Hope, Laura Cristina Lopez, Hector Zamora, Christian M. Salas
The Collateral Consequences of Gps-Led Supervision in Hot Spots Policing by Neil Wain, Barak Ariel, Justice Tankebe
The Decision to Become A Police Officer in A Legitimacy Crisis by Natalie Todak
Effective Parenting and Self-Control: Difference By Gender by Nicole Shoenberger, Gregory C. Rocheleau


Outputs a uibuilder _ui
configuration object.
Each output element is wrapped in a containing <div>
tag
(except for the add table/list rows and the title element). It is that
tag that has the id
on it.
Send the output to a uibuilder main node and the resulting page(s) will have some new UI elements added dynamically without the need for any coding. Use the default "Blank" template to get a simple web page that will "just work". However, any of the templates should easily accept the output of this node without coding needed.
The output of the node can be further processed for more complex requirements. uib-element
nodes can also be chained together, simply use a change or function node to replace the
msg.payload
in readiness for the next uib-element
node. Leave
the msg._ui
property as-is and the next uib-element
node will
add to it.
NOTE: Does not work with the old uibuilderfe
client library.


{% load organizing_hub_tags %}
Don't have an Our Revolution account? Create one now.
Need more help? Visit our Organizing Hub Documentation


Forum agent settings
Forum Agent URL:
Forum Agent Username:
Forum Agent Password:
Province Name:
Save


This page tracks the new paper links made to my list of Shape Modeling International 2006 papers.
Page maintained by Ke-Sen Huang. If you have additions or changes, send an e-mail.


{% extends "base.html" %}
{% comment %}
# Copyright (C) 2013 Ilya Baryshev
# richard -- video index system
# Copyright (C) 2012, 2013 richard contributors. See AUTHORS.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see
No video to show.
{% endif %} {% else %} {% if html5_formats %} {% elif embed %} {{ embed|safe }} {% else %}No video to show.
{% endif %} {% endif %}{% for s in v.speakers.all %} {{ s.name }} {% empty %} Unknown {% endfor %} {{ v.recorded|date:"d.m.Y" }}
{% with urls=v.related_urls.all %} {% if urls %}


{% extends "admin/admin_base.html" %} {% load static %} {% block content-area %}
Machine Learning Model Results
{{ model_results }}
Machine Learning Model Performance Graphs
Precision Recall Curve
ROC Curve
Confidence Accuracy Graph
Learning Curve
Top Features


Space Exploration is so interesting that
Project Chronos'
application exceeded given resources quotas for today.
Try the
backup instance
.
Or try again in 24 hours (or decide to fund project's activities :).


Are you lacking the skill of creativity in your life?
Do you want someone to show you the ways?
Take a look at KSB design for your future project. Do you need advertisement? Flyers? New logos? A new and improved website? Photographs for your holiday card? KSB design can put many things you can imagine to life.


Nowadays, we keep hearing about how bad the current state of the environment is: global warming, the massive death of animals, air pollution and so on. The encouragement about reusing items or recylable materials has spread. Although we have been informed a lot about this issues on a large scale, and we thought we had enough motivation to make the world better, we have yet to act. There is one small piece of information that has not been discovered. The most realistic information than ever that would strongly change our behavior! Have you ever wondered? How much would a person's daily routine affect the environment? Or in another word, how much trash do you personally produce daily? Is it as much as you expect?
Each of us collected data of how much trash we produce for a week.
Everytime we discarded something, we took a picture and note about it. The information was what the item was, what it was made of, the discarded time, if it was recycled, and side note about why we used it. Each of us could took some other aspects into account regarding to our personal lives. For example, Maura differentiated the trash produced by her cat and herself; while Phuc focused on the amount of individual trash and if she did recycle it or not. The trash was categorized into 7 types: plastic, cardboard, paper, glass, aluminum, compost and trash.
Each leaf represents a category coded by color of the dot on the leaf tip. The flower is coded with the same concept by the color of the flower. Each flower represents a item that was put in the recycled bin. Each item which was thrown to trash can is illustrated by a hole on leaf as a caterpillar eats it.
Every action is driven from thought, but thought cannot solve the problem, only action can! Want to know more about the current status of the trash recycling in United State and wonder how you could lend a hand? You can do much more you would imagine. Please take a look on this infographic made by EPA - United States Environmental Protection Agency: "Together, we can make a difference."


Chicago goes over 24 hours without a shooting, for the first time in several months
by Morgan PhillipsChicago went more than a full day without one reported shooting-- from Sunday night into early Tuesday.
There were no reported gunshot victims from 10:02 p.m. Sunday until 12:43 a.m. Tuesday, according to Chicago Sun-Times and Chicago police records.
Fourteen people were shot Sunday, the last of which was a 17-year-old on the southwest side. The boy was inside a vehicle around 10 p.m. when an SUV approached and someone inside fired shots, striking the boy in the leg. He was taken to a hospital and is in good condition.
CHICAGO GANG LEADER ACCUSED OF SUPPORTING ISIS
About 26 hours later, a 15-year-old boy was walking and heard gunfire. He was shot in the lower back and remains in serious condition.
The last time Chicago went so long without a reported shooting was on March 21, when the city recorded 28 hours without a shooting victim, according to WBBM Radio.
The first day Chicago did not report a shooting in 2019 was Jan. 14.
FORMER LAPD CHIEF CHARLIE BECK TO BE INTERIM HEAD OF CHICAGO FORCE: REPORTS
Chicago police said that as of the 12:42 a.m. shooting on Tuesday, there have been 1,924 shootings in the city in 2019 and 450 people have been killed as a result of gun violence, according to Sun-Times records.
Murders and shootings reported last month in Chicago were down from October 2018. There were 38 murders reported in October, a 20% decrease from this time last year, and shootings were down 6.2 percent.
“While we will never allow ourselves to become complacent in combating violence throughout our city, we’re encouraged to see our vision for a safer Chicago materialize,” Police Supt. Eddie Johnson said.
At the same time, 9,300 illegal guns were seized by police in 2019 as of Nov. 1. That’s a 19 percent increase from the same period last year.
CLICK HERE TO GET THE FOX NEWS APP
Police said other crimes such as robberies, burglaries and vehicle theft were at a 20-year low through the end of October.


No internet
Try:
Checking the network cables, modem, and router
Reconnecting to WI-FI
Running Network Diagnostics
ERR_INTERNET_DISCONNECTED


-
August 05, 2019. Pictures of Jenny 5 (v3) here.
-
August 05, 2019. Testing the new platform in garden (v3).
-
August 05, 2019. Jenny 5 (v3) running in garden.
-
August 05, 2019. Testing the new arm (v3).
-
August 07, 2018. Jenny 5 (v3) lifting 3.5 kg at 40 cm.
-
April 30, 2017. @RoboManiacs in Timisoara. Pictures here.
-
April 28, 2017. @Cadet INOVA in Sibiu. Pictures here.
-
April 22, 2017. Jenny 5 (v2) @ Robot Challenge Oradea 2017: Lifting a bottle of Pepsi Cola.
-
April 22, 2017. @Robot Challenge in Oradea. Pictures here.
-
April 04, 2017. Alex Donea has created a cool poster for the Jenny5 robot. You can download it from here.
-
March 29, 2017. Open Doors Days at "1 Decembrie 1918" University of Alba Iulia. Pictures and videos here.
-
March 25, 2017. @RoboTEC in Timisoara. Pictures and videos here.
-
March 24, 2017. Made demo at "Iancu de Hunedoara" highschool. Pictures here.
-
March 22, 2017. Made demo at ProInvent in Cluj-Napoca. Pictures and videos here.
-
March 21, 2017. Jenny 5 robot (v2) grabbing a bottle of water.
-
February 4, 2016. Jenny 5 robot (v1) waving hand.


It is relatively easy to define a new language module to allow SoS to exchange variables with a kernel. To make the extension available to other users, you can either create and distribute a separate package, or extend SoS and send us a pull request.
SoS needs to know a few things before it can support a language properly,
ir
kernel for language R
.It is important to understand that, SoS does not tranfer any variables among kernels, it creates independent homonymous variables of similar types that are native to the destination language. For example, for the following two variables
a = 1
b = c(1, 2)
in R, SoS execute the following statements to create variables a
and b
in Python
a = 1
b = [1, 2]
Note that a
and b
are of different types in Python although they are of the same type numeric
in R
.
To support a new language, you will need to write a Python package that defines a class, say mylanguage
, that should provide the following class attributes:
supported_kernels
: a dictionary of language and names of the kernels that the language supports, such as {'R': ['ir']}
. If multiple kernels are supported, SoS will look for a kernel with matched name in the order that is specified (e.g. {'JavaScript': ['ijavascript', 'inodejs']}
). Multiple languages can be specified if a language module supports multiple languages (e.g. Matlab
and Octave
).background_color
: a name or #XXXXXX
value for a color that will be used in the prompt area of cells that are executed by the subkernel. An empty string can be used for using default notebook color.options
: A Python dictionary with options that will be passed to the frontend. Currently two options variable_pattern
and assignment_pattern
are supported. Both options should be regular expressions in JS style. variable_pattern
is used to identify if a statement is a simple variable (nothing else). If this option is defined and the input text (if executed at the side panel) matches the pattern, SoS will prepend %preview
to the code. This option is useful only when %preview var
displays more information than var
.assignment_pattern
is used to identify if a statement is an assignment operation. If this option is defined and the input text matches the pattern, SoS will prepend %preview var
to the code where var
should be the first matched portion of the pattern (use ( )
). This mechanism allows SoS to automatically display result of an assignment when you step through the code.An instance of the class would be initialized with the sos kernel and the name of the subkernel, which does not have to be one of the supported_kernels
(could be self-defined) and should provide the following attributes and functions:
init_statements
: a statement that will be executed by the sub-kernel when the kernel starts. This statement usually defines functions to convert object to Python.get_vars
: a Python function that transfer a Python variable to the subkernel.put_vars
: a Python function that put one or more variables in the subkernel to SoS or another subkernel.sessioninfo
: a Python function that returns information of the running kernel, usually including version of the language, the kernel, and currently used packages and their versions. For R
, this means a call to sessionInfo()
function. The return value of this function can be a string, a list of strings or (key, value)
pairs, or a dictinary. The function will be called by the %sessioninfo
magic of SoS.The get_vars
function should be defined as
def get_vars(self, var_names)
where
self
is the language instance with access to the SoS kernel, andvar_names
are names in the sos dictionary.This function is responsible for probing the type of Python variable and create a similar object in the subkernel.
For example, to create a Python object b = [1, 2]
in R
(magic %get
), this function could
b <- c(1, 2)
)b
in it.Note that the function get_vars
can change the variable name because a valid variable name in Python might not be a valid variable name in another language. The function should give a warning if this happens.
The put_vars
function should be defined as
def put_vars(self, var_names, to_kernel=None)
where
self
is the language instance with access to the SoS kernelvar_name
is a list of variables that should exist in the subkernel. Because a subkernel is responsible for sharing variables with names starting with sos
to SoS automatically, this function should be called to pass these variables even when var_names
is empty.to_kernel
is the destination kernel to which the variables should be passed.Depending on destination kernel, this function can:
sos
, the function should return a dictionary of variables that will be merged to the SoS dictionary.So basically, a language can start with an implementation of put_vars(to_kernel='sos')
and let SoS handle the rest. If need arises, it can
For example, to send a R
object b <- c(1, 2)
from subkernel R
to SoS
(magic %put
), this function can
"{'b': [1, 2]}"
.The R
sos extension provides a good example to get you started.
NOTE: Unlike other language extension mechanisms in which the python module can get hold of the "engine" of the interpreter (e.g. saspy
and matlab's Python extension start the interpreter for direct communication) or have access to lower level API of the language (e.g. rpy2
), SoS only have access to the interface of the language and perform all conversions by executing commands in the subkernels and intercepting their response. Consequently,
Also, although it can be more efficient to save large datasets to disk files and load in another kernel, this method does not work for kernels that do not share the same filesystem. We currently ignore this issue and assume all kernels have access to the same file system.
SoS makes extensive use of entry points, which allows external modules to register their features in the file system to make them available to other modules. It can be confusing initially but this stack overflow ticket explains it quite well.
To register additional language with SoS, you either need to extend entry_points
of the setup.py
script of SoS, or create your own package with these entry_points
. Option extras_require
can be used to specify additional dependent packages for these features. For example, you can create a package with the following entry_points to provide support for ruby.
entry_points='''
[sos-language]
ruby = sos-ruby.kernel:sos_ruby
[sos-targets]
Ruby_Library = sos-ruby.target:Ruby-Library
'''
With the installation of this package, sos
would be able to obtain a class sos_ruby
from module sos-ruby.kernel
, and use it to work with the ruby
language.


INTERVIEW: How Nollywood can curb internet crimes–Kenneth Okonkwo
by Jayne AugoyeKenneth Okonkwo, a Nollywood veteran, landed his breakout role as Andy in the 1992 classic, ‘Living in Bondage’. About 27 years after, he secured a major role in the movie’s sequel which was directed by Ramsey Nouah.
The movie premiered at the Filmhouse Cinema in Lagos on Saturday with the cast and crew in attendance. Premium Times interviewed the actor at the occasion. He spoke about his career and the industry
PT: You starred in the sequel of ‘Living in Bondage’ 27 years after you featured in the original version. How does this make you feel?
Kenneth: It makes me feel fulfilled, it makes me feel that what I took the decision to enter (Nollywood) 27 years ago, against all odds would turn out this way.
So if 27 years after, the first movie has sustained the tempo and crescendo to the point that the younger generation yearns for a sequel, I feel honoured. The fact that my face still features prominently in the sequel, makes me fulfilled.
PT: Having featured in both movies, what has changed?
Kenneth: Technology-wise, it is like comparing the stone age with the modern age but in terms of artistic perfection, it is almost the same thing.
The depth of acting when we started is actually way better than what is obtainable today because a lot depended on the creativity and dexterity of the actor.
Back in the day, the depth in the acting sold a movie. Remember, there was nothing like a film trick, so, the depth of acting when we started was quite deep.
But in terms of technology, it’s exceptional. So what you have today is a modern form that has those actors that had the depth imparting on the new ones, so this sequel is having the double portion of the anointing of the first living in bondage.
PT: Where was the original version shot?
Kenneth: We shot it in Lagos, Adeshina Street in Surulere and several other locations. During that time we had no scripts so we had to come up with our entire lines ourselves.
For instance, to introduce a scene, the director can say, “And Andy walked in angrily and spoke to his wife”. We the actors would now have to develop the dialogue ourselves. It was really tough.
The sequel was shot all over the world.
PT: Are you impressed with the final work?
Kenneth: From day one when I starred in ‘Living in Bondage’ I made up my mind that I was going to maintain the standard.
I read all my scripts before taking up the role. When they came up with this sequel, the script took the producers about three years to write.
They kept rewriting it and I was involved in the entire process from the beginning until they came up with a fantastic script.
PT: Are you earning any royalties from the movie?
Kenneth: These guys (the producers) are brilliant, they made me earn royalty from it and I had that ownership, no matter how small the royalty is.
PT: Where there any major deviation from the original version?
Kenneth: Not really, because this sequel is a continuation and recreation of the first part. We simply recreated the original ‘Living in Bondage’ which has kept everyone captivated from the beginning to the end.
So, we are now watching in a new way, what was done in the 20th century, speaking about the same thing, passing the same message but in a different container.
This time around, content is able to generate the same interest with a double portion.
PT: Will there still be a third part?
Kenneth: When we shot the first one, I never knew there would be a sequel to it, so when we see the Almighty God we will ask him.
PT: What is your assessment of this sequel?
Kenneth: When I was watching the film with the journalists, the confrontation scene between Ramsey Nouah and I drew the greatest applause.
This meant that everybody who watched the film was captivated.
When we shot the original version, the script came like a story, every scene was not dialogued. This meant that a lot depended on the creativity of the actors who came up with a fictional story.
But this one is detailed and dialogued and the artiste can just come in to take the dialogue. The first one, we had to rehearse for more than one month because we had to generate the dialogue ourselves.
PT: What message does this sequel pass across?
Kenneth: The main fact that the major themes of the movie (rituals and internet scam) still exists almost 30 years after shows that a lot still needs to be done.
This means that Nigerian filmmakers need to keep emphasing and highlighting the consequences of these crimes.
You can see that the consequences of the lead actor’s actions are relatable even in our present times. Aside from showcasing wealth, riches etc in movies, filmmakers need to emphasise the need for honest living.
When you sell your soul to the devil, he comes after everything, including your lineage. We need to keep emphasing on the dangers of crime and the quick rich syndrome.
So many societal ills can be corrected and reduced if filmmakers produce more films for the greater good.