--- layout: post title: "How to get the value out of the monad" description: "How do I get the value out of my monad? You don't. You inject the desired behaviour into the monad." date: 2019-02-04 7:45 UTC tags: [Software Design, Functional Programming] --- {% include JB/setup %}
{{ page.description }}
A frequently asked question about monads can be paraphrased as: How do I get the value out of my monad? This seems to particularly come up when the monad in question is Haskell's IO
monad, from which you can't extract the value. This is by design, but then beginners are often stumped on how to write the code they have in mind.
You can encounter variations of the question, or at least the underlying conceptual misunderstanding, with other monads. This seems to be particularly prevalent when object-oriented or procedural programmers start working with Maybe or Either. People really want to extract 'the value' from those monads as well, despite the lack of guarantee that there will be a value.
So how do you extract the value from a monad?
The answer isn't use a comonad, although it could be, for a limited set of monads. Rather, the answer is mu.
Before I attempt to address how to work with monads, I think it's worthwhile to speculate on what misleads people into thinking that it makes sense to even contemplate extracting 'the value' from a monad. After all, you rarely encounter the question: How do I get the value out of my collection?
Various collections form monads, but everyone intuitively understand that there isn't a single value in a collection. Collections could be empty, or contain many elements. Collections could easily be the most ordinary monad. Programmers deal with collections all the time.
Yet, I think that most programmers don't realise that collections form monads. The reason for this could be that mainstream languages rarely makes this relationship explicit. Even C# query syntax, which is nothing but monads in disguise, hides this fact.
What happens, I think, is that when programmers first come across monads, they often encounter one of a few unit containers.
What's a unit container? I admit that the word is one I made up, because I couldn't detect existing terminology on this topic. The idea, though, is that it's a functor guaranteed to contain exactly one value. Since functors are containers, I call such types unit containers. Examples include Identity, Lazy, and asynchronous functors.
You can extract 'the value' from most unit containers (with IO
being the notable exception from the rule). Trivially, you can get the item contained in an Identity container:
> Identity<string> x = new Identity<string>("bar"); > x.Item "bar"
Likewise, you can extract the value from lazy and asynchronous values:
> Lazy<int> x = new Lazy<int>(() => 42); > x.Value 42 > Task<int> y = Task.Run(() => 1337); > await y 1337
My theory, then, is that some programmers are introduced to the concept of monads via lazy or asynchronous computations, and that this could establish incorrect mental models.
There's another category of monad that we could call semi-containers (again, I'm open to suggestions for a better name). These are data containers that contain either a single value, or no value. In this set of monads, we find Nullable<T>, Maybe, and Either.
Unfortunately, Maybe implementations often come with an API that enables you to ask a Maybe object if it's populated or empty, and a way to extract the value from the Maybe container. This misleads many programmers to write code like this:
Maybe<int> id = // ... if (id.HasItem) return new Customer(id.Item); else throw new DontKnowWhatToDoException();
Granted, in many cases, people do something more reasonable than throwing a useless exception. In a specific context, it may be clear what to do with an empty Maybe object, but there are problems with this Tester-Doer approach:
If you throw an exception when the object is empty, you'll likely have to deal with that exception further up in the call stack.
If you return a magic value (like returning -1
when a natural number is expected), you again force all callers to check for that magic number.
If you set a flag that indicates that an object was empty, again, you put the burden on callers to check for the flag.
This leads to defensive coding, which, at best, makes the code unreadable.
Interestingly, programmers rarely take a Tester-Doer approach to working with collections. Instead, they rely on APIs for collections and arrays.
In C#, LINQ has been around since 2007, and most programmers love it. It's common knowledge that you can use the Select
method to, for example, convert an array of numbers to an array of strings:
> new[] { 42, 1337, 2112, 90125 }.Select(i => i.ToString())
string[4] { "42", "1337", "2112", "90125" }
You can do that with all functors, including Maybe:
Maybe<int> id = // ... Maybe<Customer> c = id.Select(x => new Customer(x));
A previous article offers a slightly more compelling example:
var viewModel = repository.Read(id).Select(r => r.ToViewModel());
Common to all the three above examples is that instead of trying to extract a value from the monad (which makes no sense in the array example), you inject the desired behaviour into the context of the data container. What that eventually brings about depends on the monad in question.
In the array example, the behaviour being injected is that of turning a number into a string. Since this behaviour is injected into a collection, it's applied to every element in the source array.
In the second example, the behaviour being injected is that of turning an integer into a Customer
object. Since this behaviour is injected into a Maybe, it's only applied if the source object is populated.
In the third example, the behaviour being injected is that of turning a Reservation
domain object into a View Model. Again, this only happens if the original Maybe object is populated.
The marvellous quality of a monad is that it's composable. You could, for example, start by attempting to parse a string into a number:
string candidate = // Some string from application boundary Maybe<int> idm = TryParseInt(candidate);
This code could be defined in a part of your code base that deals with user input. Instead of trying to get 'the value' out of idm
, you can pass the entire object to other parts of the code. The next step, defined in a different method, in a different class, perhaps even in a different library, then queries a database to read a Reservation
object corresponding to that ID - if the ID is there, that is:
Maybe<Reservation> rm = idm.SelectMany(repository.Read);
The Read
method on the repository has this signature:
public Maybe<Reservation> Read(int id)
The Read
method returns a Maybe<Reservation>
object because you could pass any int
to the method, but there may not be a row in the database that corresponds to that number. Had you used Select
on idm
, the return type would have been Maybe<Maybe<Reservation>>
. This is a typical example of a nested functor, so instead, you use SelectMany
, which flattens the functor. You can do this because Maybe is a monad.
The result at this stage is a Maybe<Reservation>
object. If all goes according to plan, it's populated with a Reservation
object from the database. Two things could go wrong at this stage, though:
candidate
string didn't represent a number.idm
is empty.
You can now pass rm
to another part of the code base, which then performs this step:
Maybe<ReservationViewModel> vm = rm.Select(r => r.ToViewModel());
Functors and monads are composable (i.e. 'chainable'). This is a fundamental trait of functors; they're (endo)morphisms, which, by definition, are composable. In order to leverage that composability, though, you must retain the monad. If you extract 'the value' from the monad, composability is lost.
For that reason, you're not supposed to 'get the value out of the monad'. Instead, you inject the desired behaviour into the monad in question, so that it stays composable. In the above example, repository.Read
and r.ToViewModel()
are behaviors injected into the Maybe monad.
When we learn something new, there's always a phase where we struggle to understand a new concept. Sometimes, we may, inadvertently, erect a tentative, but misleading mental model of a concept. It seems to me that this happens to many people while they're grappling with the concept of functors and monads.
One common mental wrong turn that many people seem to take is to try to 'get the value out of the monad'. This seems to be particularly common with IO
in Haskell, where the issue is a frequently asked question.
I've also reviewed enough F# code to have noticed that people often take the imperative, Tester-Doer road to 'a option
. That's the reason this article uses a majority of its space on various Maybe examples.
In a future article, I'll show a more complete and compelling example of behaviour injection.
Comments
Hi Mark, was very interested in your post as I do try and use Option Monads in my code, and I think I understand the point you are making about not thinking of an optional value as something that is composable. However, I recently had a couple of situations where I reluctantly had to check the value, would really appreciate any thoughts you may have?
The first example was where I have a UI and the user may specify a Latitude and a Longitude. The user may not yet have specified both values, so each is held as an Option. We then need to calculate the rhumb bearing to a fixed location, so I wrote:
Having read your article, I realise I could change this to a Select statement on latitude, but that lambda would still need to check longitude.HasValue. Should I combine the two options somehow before doing a single Select?
The second example again relates to a UI where the user can enter values in a grid, or leave a row blank. I would like to calculate the mean, standard deviation and root mean square of the values, and normally all these functions would have the signature: double Mean(ICollection values)
If I keep this then I need a function like
Or some equivalent Where/Select combination. Can you advise me please, how you recommend transforming an IEnumerable> to an enumerable? Or should I write a signature overload double Mean(ICollection> possibleValues) and ditto for SD and RMS?
Thanks, Sean
Sean, thank you for writing. The first example you give is quite common, and is easily addressed with using the applicative or monadic capabilities of Maybe. Often, in a language like C#, it's easiest to use monadic bind (in C# called
SelectMany
):If you find code like that disagreeable, you can also write it with query syntax:
Here,
Bearing
is a Maybe value. As you can see, in neither of the above alternatives is it necessary to check and extract the values.Bearing
will be populated when bothlatitude
andlongitude
are populated, and empty otherwise.Regarding the other question, being able to filter out empty values from a collection is a standard operation in both F# and Haskell. In C#, you can write it like this:
This example is based on the Church-encoded Maybe, which is currently my favourite implementation. I decided to call the method
Choose
, as this is also the name it has in F#. In Haskell, this function is calledcatMaybes
.Hi Mark, did you ever think about publishing a Library containing all these types missing in .net Framework like
Either
? Or can you recommend an existing library?Achim, thank you for writing. The thought has crossed my mind, but my position on this question seems to be changing.
Had you asked me one or two years ago, I'd have answered that I hadn't seriously considered doing that, and that I saw little reason to do so. There is, as far as I can tell, plenty of such libraries out there, although I can't recommend any in particular. This seems to be something that many people create as part of a learning exercise. It seems to be a rite of passage for many people, similarly to developing a Dependency Injection container, or an ORM.
Besides, a reusable library would mean another dependency that your code would have to take on.
These days, however, I'm beginning to reconsider my position. It seems that no such library is emerging as dominant, and some of the types involved (particularly Maybe) would really be useful.
Ideally, these types ought be in the .NET Base Class Library, but perhaps a second-best alternative would be to put them in a commonly-used shared library.
Hi Mark, thank you for the interesting article series.
Can you maybe provide guidance of how asynchronous operations can become part of a chain of operations? How would the 'functor flattening' be combined with the built Task/Task types? Extending your example, how would you go about if we would like to enrich the reservation retrieved from repository with that day's special, which happens to be async:
I tried with your Church encoded Maybe implementation, but I got stuck with the Task wrapping/unwrapping/awaiting.
Ralph, thank you for writing. Please see if my new article Asynchronous Injection answers your question.


Welcome to the gautam.cc Developers page! You can sign up here to apply for the gautam.cc developers team.
Welcome to the gautam.cc Developers page! You can sign up here to apply for the gautam.cc developers team.
Calling All Programmers, Designers, and Creators!
What is a Developer?
Well, it doesn’t get any simpler. A developer is a person who is part of an organization and develops something. In our case developers will be creating apps for gautam.cc.
Is there Anything else I need to Know?
Every applying developer should have a good amount of knowledge about HTML, a basic understanding of JavaScript, and a good understanding of CSS. Remember, you will develop most of the skills required through making apps. Any information that is falsely given means that you will not receive any of the Developer Team emails, and failure to participate on the gautam.cc Developer Team. Any inappropriate or already used screen names will be changed a more appropriate name.
Developer Team Launch
We will be launching the Developer Team in Summer 2012. Any applicants that apply now will start receiving emails after the launch date. Any applicants that join after the launch date will still be eligible to work on the Developer Team. The launch date has not yet been planned will hopefully be in June. Remember, the Developer Team is still currently in BETA, we won’t be able to accept and handle too many applicants now.


Install and configure Ghost with NGINX - Arch Linux, CMS, Ghost, NGINX
Install and configure Ghost with NGINX - Arch Linux
Difficulty: 2
Time: 1.0 hrs
Ghost is simple blogging platform, fast to setup and easy to use. Besides, it provides good customization options to the users. This article will assist you with the steps to set up a Ghost blogging platform with nginx on your Arch Linux platform.
Note: It is assumed that you are logged in as a root user.
Step 1: Prepare the machine
Login into the Fedora or CentOS machine and perform these steps using the commands described here. It is assumed that you have logged in as root user when performing the following tasks:
- Update your Fedora or CentOS server (for the interactive installations, you might need to respond regarding the confirmation for installation)
pacman –Syu
- Install base development tools
pacman –S base- devel
When asked about the selection of member of base-devel, select all members by simply pressing Enter.
pacman -S zip unzip unrar
pacman -Sy git
pacman -Sy nodejs
pacman -Syu npm
Step 2: Install and Configure Ghost
- Download the latest version of Ghost from the site Ghost.org
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
- Unzip the Ghost to some suitable folder location (Recommended location is /var/www/ghost)
mkdir –p /var/www
unzip -uo ghost.zip -d /var/www/ghost
- Install the Ghost in the new ghost directory
cd /var/www/ghost && npm install --production
- Start the Ghost (production environment) using the following command
npm start --production
The default port used by Ghost is <IP_ADDRESS>:2368.
When it starts, it should give a message “your blog is now available on http://<provided URL>.
This value of URL can be updated in the config file config.js.
To shut down the blog, and return to command prompt, press CTRL+C
Step 3: Install and Configure nginx
Nginx, an open-source, high performance HTTP Server, is used to enable connections from the outside on port 80 to connect through to the port that Ghost is running on, so that people can see your blog.
- Install nginx using the following command
pacman -Syu nginx
- Open the ghost config file /var/www/ghost/config.js for editing
vim /var/www/ghost/config.js
- Put the following code into the Ghost file (content highlighted in red needs to be updated). The URL could be your domain name (http://your-domainname.com) or the public IP address of your droplet
production: {
url: 'http://<IP_ADDRESS>',
mail: {},
database: {
client: 'sqlite3',
connection: {
filename: path.join(__dirname, '/content/data/ghost.db')
},
debug: false
},
server: {
// Host to be passed to node's `net.Server#listen()`
host: '<IP_ADDRESS>',
// Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
port: '2368'
}
}
- Start the Ghost (production environment) using the following command
cd /var/www/ghost
npm start --production
- Now the Ghost blog should be available on the web browser via the specified url.
In your browser, open the page (red highlighted text needs to be updated)
http://<IP_ADDRESS>:2368/
Conclusion
The Ghost blogging platform, with its ease of deployment and use, can help individuals and organizations setup and extend their content management infrastructure. When used with nginx, and with availability of options for setting up and supporting multiple environments like production, development or testing, it can be easily adapted for any environment.


New version will be made with Unity3D, due to unreal engine 4 on linux can not export to windows or mac.:(
UE4 it's a excelent game engine but for linux users it's a pain the arse :(
Wolf3D, Remaster Wolfestein3D with Unreal Engine
Features
8K Textures
Build on top of the Unreal Engine 4
Build for Windows, Linux, Posibily Mac and WebGl
New Levels
And muuuuuuuuch more...
Grab the latest dev build 05072020
Source
Bruh! Seems like UE4 doesn't build for Linux out of box
You can use Wine
Know Issues:
AI missing
Level design sucks
No shooting
For moment you just can walk on the map


The distance between consecutive perfect squares is not uniform:
The size of the space between $n^2$ and $(n+1)^2$ is $2n + 1$, intuitively evidenced by the growth in the spacing of the visualization above.
Now, take a look at the distance between consecutive integer square roots:
In particular, observe the spacing of integer square roots between $4$ and $9$ - at one degree of precision, they are uniformly distributed!
To me, this trend is significantly less intuitive. It makes sense in the "what else is expected?" kind-of way, but that expectation isn't very satisfying. So here are a few other ways of understanding the spacing.
1: From the Spacing of Squares
For $n \in \mathbb{N}$, between $n^2$ and $(n+1)^2$ are the natural numbers $n^2+1, n^2+2, \ldots, n^2 + 2n$. So between $n$ and $n+1$, there is a set of integer square root reals $S = \left\{\sqrt{n^2+1}, \sqrt{n^2+2}, \ldots, \sqrt{n^2 + 2n}\right\}$, and $|S| = 2n$. Now, because $S_{i+1} > S_i$, we can make an argumentsomewhat similar to the pigeonhole principle that for $n$ large, there are a large number of integer square roots in the 1-unit interval $(n, n+1)$, giving the perception of uniformity of the monotonically increasing set $S$.
But this explanation is not rigorous, and leaves one hungry for a more elegant explanation.
2: From Tangents
Take a look at $f(x) = \sqrt{x}$:
Observe that for $n$ large, the slopes of the tangents of $f(x)$ at $n$ and $n+1$ are small and very similar, implying
- that there is little variation in the value of the function at $n$ and $n+1$, and
- the variation between $n$ and $n+1$ is very similar to the variation between $n+1$ and $n+2$.
And that's enough needed for a beautiful reasoning of the relative uniformity of integer square roots!
The great thing about this kind of reasoning is it also explains the increasing spacing between nodes of an exponential function, like $x^2$ or $e^x$. In both of these cases, the slopes of pointwise tangent lines are increasing, corresponding to the increasing rate of change in the spacing between e.g. perfect squares.
3: A remix
To understand the previous reasoning a different way, consider $f(x) = \sqrt{x + 1} - \sqrt{x}$.
The difference between consecutive integer square roots decreases asymptotically, and thus we have that there is a relative uniformity in their spacing -- especially at large integer values.
An Application
A friend asked what practical purpose knowing the spacing of integer square roots serves. One useful application is in square root approximation - knowing that integer square roots are approximately uniform especially at large numbers, we can say that for an integer $q$, $\sqrt{q} \approx n + \frac{q-n^2}{2n+1}$, where $n = {\lfloor{\sqrt{q}}\rfloor}$For example, $10.724 = \sqrt{115} \approx 10.714 = \sqrt{100} + \frac{15}{21}$..


If the bottle lists any of the following, check all that apply.
Check the box below if the kill claim is listed on the bottle.
Are there efficacy claims for ONE or more of the following pathogens on the disinfectant bottle?
Check the box below if the kill claims are listed on the bottle.
Check the boxes for any of the following kill claims listed on the disinfectant bottle.
Check the boxes for any of the following kill claims listed on the disinfectant bottle.


Password request form
The name and photo associated with your google account will be recorder when you upload files and submit this form. Not<EMAIL_ADDRESS>Switch account
*Required
Please fill your name*
What color you like
RedGreen
Blue
Black
White
Other:
What town you like more?*
Please describe (at least 50 symbols on symbols) your favorite programming language*
What years of education did you really like*
FirstSecond
Third
Fourth
Please send any image*
Set last Monday Monday*
Date
Never submit passwords through Google Forms


Real Time Messaging Protocol (RTMP) is one of the most popular way for streaming video, audio or data between a Flash player and a server. You can easily have a private RTMP server using Nginx and a module of it called nginx-rtmp-module. This post will help you to setup a RTMP server following some simple steps. So no more chit-chat lets jump into it.
Prerequisites
You must have root privilege to complete this steps. I am on Ubuntu and using apt-get as my package manager but for other distribution of Linux I strongly hope that all command will be valid just replacing with the package manager and appropriate package name.
Installing dependencies
Run the following commands to compile Nginx
with nginx-rtmp-module
sudo apt-get update;
sudo apt-get install -y build-essential git libpcre3 \
libpcre3-dev openssl libssl-dev zlibc zlib1g zlib1g-dev
Compiling Nginx with RTMP Module
Now we compile Nginx with RTMP module. I use following configure command to compile Nginx.
Configure RTMP Application
Configuring simple live RTMP application is so simple. To configure a RTMP live streaming application you need to edit nginx configuration file
sudo nano /etc/nginx/nginx.conf
and under HTTP block paste the following piece of RTMP block to make a RTMP live streaming application called live.
rtmp {
server {
listen 1935;
application live {
live on;
}
}
}
Restart nginx server by running the following command
sudo /usr/sbin/nginx -s stop && sudo /usr/sbin/nginx
That all!! Now you have a private live streaming RTMP server running with Nginx. You can push your live video or audio stream to rtmp://your-ip-or-domainName:1935/live/{your-stream-name}
using FFMpeg
or GStreamer
.
There are lots of directive to fine tune the RTMP
application. You can find it from the Directive page of nginx-rtmp-module
.
If you face any problem please leave a comment... I will respond for sure.


If you were on the Titanic...
Please input your gender, age information and choose the class you could afford.
Male
Female
0-10
10-30
30-50
50-60
60-80
Class 1
Class 2
Class 3
Calculate your survive rate


hassleriana expression genes floral thaliana gene transcriptome flower expressed orthologs qRT-PCR stage leaf reads analysis data homologs specific development using TSE putative contigs file Figure observed flowers seed sequencing {border-style GO: involved Cleomaceae protein px;} sequences #ffffff;} Arabidopsis Expression Plant embryo) lineage mapped Table anthocyanin flowering leaf, shared transcriptome. ROXY genome regulators Brassicaceae low sequence thaliana, transcription compared family hybrid regulation Genes bud case high leading length ortholog plant stages thaliana. transcripts (Additional Cleome analyzed based biosynthesis class developmental fold number suggesting (Figure Brassicales Tarenaya annotated hassleriana, like organ performed similar RNA cell contig early expression. identified normalized rarefaction seeds size species young Additional SPL annotations cDNA coding differences different downstream growth identify male method papaya, px; transcript {font-family Biol Cell Genomics However, Rarefaction according anther biological cotyledon detected embryo font-size homeotic homolog late leaves levels lost model regulating showed shows silico time tissue transcriptome, trichocarpa used value (.%), (subset BLASTX CDS MYB S). Senescent Young annotation aspects buds carried comparative curves data. double; factors green higher long meristem papaya pink plants rapa related sister sterile synthesis traits transcriptomes values various (TSE) (globular ./tpc.. Analysis AtMYB BMC Bot Buds, Gene Germany) PCR Sci Sequencing TCP, TT, Transcriptome Weber abundance anthesis assigned bold border-color border-width calculated complex control curve depth difference distinct families flower, function genes. governing large lower mRNA mapping members mm), molecular novo obtained organs pattern patterning plotted pollen presence present processes provided putatively rapa, read regulated represent reproductive required senescent silique, small solid; study thaliana[ unlike vegetative {font-style {font-weight (curled (heart ABCDE ATC ATGE__A, Becker Bhide BlastGO® Comparative Comparison DYT FLC Flower New Online TAIR WGD Zhang analysis. analyzed. apex approach assembled cauline chosen closely composed constructed core correlation cotyledon, courier; coverage development. em; evolution experiments factor fertile flower. following generated group hermaphroditic highest highly independently indicated known levels. libraries library light merged microarray moderate multiple nucleotides order orthologous parent petal petal, pigmentation plant. primer proliferation pt;} pyrosequencing ratio reason recent replicates response role selected set sets shown significant siliques, strong torpedo walking work °C,


Function
This program is used to index all your games into the database for use by the Frontend
General Operation
Gives help on the general operation of DatabaseManager, see General Operation
Menus
Gives help on the various menu options within the DatabaseManager, see Menus
Steam Games
Gives help on adding steam games to the database, see Steam Games
Optimizer
Optimize the fan art and box art for use in Frontend, see Optimizer


EXO-PREFERRED-APPLICATIONS(1) User Commands EXO-PREFERRED-APPLICATIONS(1) NAME exo-preferred-applications - Xfce Preferred Applications Framework DESCRIPTION This should never be run by the user but the interested user may find /usr/share/xfce4/doc/C/exo-preferred-applications.html enlightening. REPORTING BUGS Report bugs to<EMAIL_ADDRESS>COPYRIGHT Copyright © 2005 Simon Huggins This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. exo <IP_ADDRESS>rc1 September 2006 EXO-PREFERRED-APPLICATIONS(1)


Graphics Emulation:
The gameboy uses the tile and sprite method of storing and drawing graphics to the screen.
The tiles are what form the background and are not interactive. Each tile is 8x8 pixels. The sprites are the interactive
graphics on the display. An example is the game Mario. The character mario is a sprite. The graphic
can move and it can collide with the other sprites. The bad guys are also sprites as they can fly around and attack mario.
The tiles are the background which defines the level and its terrain.
As stated previously the resolution of the gameboy is 160x144 however this is just what can be displayed on the screen. The
real resolution is 256x256 (32x32 tiles). The visual display can show any 160x144 pixels of the 256x256 background, this allows
for scrolling the viewing area over the background.
Aswell as having a 256x256 background and a 160x144 viewing the display the gameboy has a window which appears above the background
but behind the sprites (unless the attributes of the sprite specify otherwise, discussed later). The purpose of the window is to
put a fixed panel over the background that does not scroll. For example some games have a panel on the screen which displays the characters
health and collected items, (notably links awakening) and this panel does not scroll with the background when the character moves. This is the window.
This part of the site shows how to emulate everything I have just discussed. The examples I give below were designed to give the easiest understanding
of how the tile and sprite system works but it is far from efficient. Luckily graphic emulation is the area where most speed optimization can be achieved
with the least amount of effort (by using dirty rectangles and the likes) but this would not give a good demonstration.
The LCD Control Register:
In the LCD chapter I briefly touched upon the LCD Control register. This register contains a lot of data that we need to understand before we can emulate graphics. This is the breakdown of the 8-bit special register:
Taken from the pandocs:
Bit 7 - LCD Display Enable (0=Off, 1=On)
Bit 6 - Window Tile Map Display Select (0=9800-9BFF, 1=9C00-9FFF)
Bit 5 - Window Display Enable (0=Off, 1=On)
Bit 4 - BG & Window Tile Data Select (0=8800-97FF, 1=8000-8FFF)
Bit 3 - BG Tile Map Display Select (0=9800-9BFF, 1=9C00-9FFF)
Bit 2 - OBJ (Sprite) Size (0=8x8, 1=8x16)
Bit 1 - OBJ (Sprite) Display Enable (0=Off, 1=On)
Bit 0 - BG Display (for CGB see below) (0=Off, 1=On)
Bit 6: This is where to read to read the tile identity number to draw onto the window
Bit 5: If this is set to 0 then the window is not enabled so we dont draw it
Bit 4: You use the identity number for both the window and the background tiles that need to be draw to the screen here to get the data of the tile that needs to be displayed. The important thing to remember about this bit is that if it is set to 0 (i.e. read from address 0x8800) then the tile identity number we looked up is actually a signed byte not unsigned (explained fully later)
Bit 3: This is the same as Bit6 but for the background not the window
Bit 2: This is the size of the sprites that need to draw. Unlike tiles that are always 8x8 sprites can be 8x16
Bit 1: Same as Bit5 but for sprites
Bit 0: Same as Bit5 and 1 but for the background
You may remember that the UpdateGraphics function called the DrawScanLine function which I've yet to implement. However with the above lcd control register info I now can:
void Emulator::DrawScanLine( )
{
BYTE control = ReadMemory(0xFF40) ;
if (TestBit(control,0))
RenderTiles( ) ;
if (TestBit(control,1))
RenderSprites( ) ;
}
Rendering the Tiles Part 1:
As previously stated the background is made up of 256x256 pixels (32x32 tiles) however as we only display 160x144 pixels there is no need to draw the rest. Before we can start drawing the background we need to know where to draw the background, i.e. which of 160x144 of the 256x256 background is going to be displayed?
ScrollY (0xFF42): The Y Position of the BACKGROUND where to start drawing the viewing area from
ScrollX (0xFF43): The X Position of the BACKGROUND to start drawing the viewing area from
WindowY (0xFF4A): The Y Position of the VIEWING AREA to start drawing the window from
WindowX (0xFF4B): The X Positions -7 of the VIEWING AREA to start drawing the window from
So now we know where to draw the background and the window we need to determine what we need to draw. The gameboy has two regions of memoory for the background layout which is shared by the window. The memory regions are 0x9800-0x9BFF and 0x9C00-9FFF. We need to check bit 3 of the lcd contol register to see which region we are using for the background and bit 6 for the window. Each byte in the memory region is a tile identification number of what needs to be drawn. This identification number is used to lookup the tile data in video ram so we know how to draw it.
Looking at bit 4 of the LCD control register we can see that there are two places where the tile date is located 0x8000-0x8FFF and 0x88000x97FF. Each of these memory regions gives us 4096 (0x1000) bytes of data to store all the tiles. Each tile is stored in memory as 16 bytes. Remember that a tile is 8x8 pixels and that in memory each line of the tile requires two bytes to represent, hence the 16 bytes per tile. So now we know where the tile data is stored and where the background layout is stored. The background layout gives the tile identification number to look up the tile in the tile data area. However this is the tricky part, if the tile data memory area we are using is 0x8000-0x8FFF then the tile identifier read from the background layout regions is an UNSIGNED BYTE meaning the tile identifier will range from 0 - 255. However if we are using tile data area 0x8800-0x97FF then the tile identifier read from the background layout is a SIGNED BYTE meaning the tile identifier will range from -127 to 127. The is the algroithm to locate the tile in memory region 0x8000-0x8FFF
const WORD memoryRegion = 0x8000 ;
const int sizeOfTileInMemory = 16 ;
WORD tileDataAddress = memoryRegion + (tileIdentifier*sizeOfTileInMemory) ;
const WORD memoryRegion = 0x8800 ;
const int sizeOfTileInMemory = 16 ;
const int offset = 128 ;
WORD tileDataAddress = memoryRegion + ((tileIdentifier+offset)*sizeOfTileInMemory) ;
How to draw a tile/sprite from memory:
This area follows on from the above tile data rendering but it is also the same for sprites as you will see later on.
So what do we now know about the tile data? First is that the background layout region identifies each tile in the current background that needs to be drawn.
The tile identity number obtained from the background layout is used to lookup the tile data in the tile data region. We know that each tile is 8x8 pixels
and that each horizontal line in the 8x8 takes up two bytes of memory meaning that each tile in memory needs 16 bytes of data.
So if two bytes of data form one line of the tile then we need to combine these two bytes to form a break down of each pixel in the 8 pixel line. So if byte 1 looked like so:
00110101 and data 2 looked like this 10101110 then we can combine the two together to get the following colour information:
pixel# = 1 2 3 4 5 6 7 8
data 2 = 1 0 1 0 1 1 1 0
data 1 = 0 0 1 1 0 1 0 1
Pixel 1 colour id: 10
Pixel 2 colour id: 00
Pixel 3 colour id: 11
Pixel 4 colour id: 01
Pixel 5 colour id: 10
Pixel 6 colour id: 11
Pixel 7 colour id: 10
Pixel 8 colour id: 01
The background tiles only have the one monochrome colour palette stored in memory address 0xFF47. However sprites can have two palettes (discussed later). They work exactly the same as the background palettes except that colour white is actually transparent. The sprite palettes are located 0xFF48 and 0xFF49.
Every two bits in the palette data byte represent a colour. Bits 7-6 maps to colour id 11, bits 5-4 map to colour id 10, bits 3-2 map to colour id 01 and bits 1-0 map to colour id 00. Each two bits will give the colour to use like so:
00: White
01: Light Grey
10: Dark Grey
11: Black
Pixel 1 colour id: 10: Means look at bits of palette data 5-4 gives colour white
Pixel 2 colour id: 00: Means look at bits of palette data 1-0 gives colour light grey
Pixel 3 colour id: 11: Means look at bits of palette data 7-6 gives colour black
Pixel 4 colour id: 01: Means look at bits of palette data 3-2 gives colour dark grey
Pixel 5 colour id: 10: Means look at bits of palette data 5-4 gives colour white
Pixel 6 colour id: 11: Means look at bits of palette data 7-6 gives colour black
Pixel 7 colour id: 10: Means look at bits of palette data 5-4 gives colour white
Pixel 8 colour id: 01: Means look at bits of palette data 3-2 gives colour dark grey
Rendering the Tiles Part 2:
So now we have all the information needed to render the background and the window. So taking all this information we can implement it:
void Emulator::RenderTiles( )
{
WORD tileData = 0 ;
WORD backgroundMemory =0 ;
bool unsig = true ;
// where to draw the visual area and the window
BYTE scrollY = ReadMemory(0xFF42) ;
BYTE scrollX = ReadMemory(0xFF43) ;
BYTE windowY = ReadMemory(0xFF4A) ;
BYTE windowX = ReadMemory(0xFF4B) - 7;
bool usingWindow = false ;
// is the window enabled?
if (TestBit(lcdControl,5))
{
// is the current scanline we're drawing
// within the windows Y pos?,
if (windowY <= ReadMemory(0xFF44))
usingWindow = true ;
}
// which tile data are we using?
if (TestBit(lcdControl,4))
{
tileData = 0x8000 ;
}
else
{
// IMPORTANT: This memory region uses signed
// bytes as tile identifiers
tileData = 0x8800 ;
unsig= false ;
}
// which background mem?
if (false == usingWindow)
{
if (TestBit(lcdControl,3))
backgroundMemory = 0x9C00 ;
else
backgroundMemory = 0x9800 ;
}
else
{
// which window memory?
if (TestBit(lcdControl,6))
backgroundMemory = 0x9C00 ;
else
backgroundMemory = 0x9800 ;
}
BYTE yPos = 0 ;
// yPos is used to calculate which of 32 vertical tiles the
// current scanline is drawing
if (!usingWindow)
yPos = scrollY + ReadMemory(0xFF44) ;
else
yPos = ReadMemory(0xFF44) - windowY;
// which of the 8 vertical pixels of the current
// tile is the scanline on?
WORD tileRow = (((BYTE)(yPos/8))*32) ;
// time to start drawing the 160 horizontal pixels
// for this scanline
for (int pixel = 0 ; pixel < 160; pixel++)
{
BYTE xPos = pixel+scrollX ;
// translate the current x pos to window space if necessary
if (usingWindow)
{
if (pixel >= windowX)
{
xPos = pixel - windowX ;
}
}
// which of the 32 horizontal tiles does this xPos fall within?
WORD tileCol = (xPos/8) ;
SIGNED_WORD tileNum ;
// get the tile identity number. Remember it can be signed
// or unsigned
WORD tileAddrss = backgroundMemory+tileRow+tileCol;
if(unsig)
tileNum =(BYTE)ReadMemory(tileAddrss);
else
tileNum =(SIGNED_BYTE)ReadMemory(tileAddrss );
// deduce where this tile identifier is in memory. Remember i
// shown this algorithm earlier
WORD tileLocation = tileData ;
if (unsig)
tileLocation += (tileNum * 16) ;
else
tileLocation += ((tileNum+128) *16) ;
// find the correct vertical line we're on of the
// tile to get the tile data
//from in memory
BYTE line = yPos % 8 ;
line *= 2; // each vertical line takes up two bytes of memory
BYTE data1 = ReadMemory(tileLocation + line) ;
BYTE data2 = ReadMemory(tileLocation + line + 1) ;
// pixel 0 in the tile is it 7 of data 1 and data2.
// Pixel 1 is bit 6 etc..
int colourBit = xPos % 8 ;
colourBit -= 7 ;
colourBit *= -1 ;
// combine data 2 and data 1 to get the colour id for this pixel
// in the tile
int colourNum = BitGetVal(data2,colourBit) ;
colourNum <<= 1;
colourNum |= BitGetVal(data1,colourBit) ;
// now we have the colour id get the actual
// colour from palette 0xFF47
COLOUR col = GetColour(colourNum, 0xFF47) ;
int red = 0;
int green = 0;
int blue = 0;
// setup the RGB values
switch(col)
{
case WHITE: red = 255; green = 255 ; blue = 255; break ;
case LIGHT_GRAY:red = 0xCC; green = 0xCC ; blue = 0xCC; break ;
case DARK_GRAY: red = 0x77; green = 0x77 ; blue = 0x77; break ;
}
int finaly = ReadMemory(0xFF44) ;
// safety check to make sure what im about
// to set is int the 160x144 bounds
if ((finaly<0)||(finaly>143)||(pixel<0)||(pixel>159))
{
continue ;
}
m_ScreenData[pixel][finaly][0] = red ;
m_ScreenData[pixel][finaly][1] = green ;
m_ScreenData[pixel][finaly][2] = blue ;
}
}
void COLOUR Emulator::GetColour(BYTE colourNum, WORD address) const
{
COLOUR res = WHITE ;
BYTE palette = ReadMemory(address) ;
int hi = 0 ;
int lo = 0 ;
// which bits of the colour palette does the colour id map to?
switch (colourNum)
{
case 0: hi = 1 ; lo = 0 ;break ;
case 1: hi = 3 ; lo = 2 ;break ;
case 2: hi = 5 ; lo = 4 ;break ;
case 3: hi = 7 ; lo = 6 ;break ;
}
// use the palette to get the colour
int colour = 0;
colour = BitGetVal(palette, hi) << 1;
colour |= BitGetVal(palette, lo) ;
// convert the game colour to emulator colour
switch (colour)
{
case 0: res = WHITE ;break ;
case 1: res = LIGHT_GRAY ;break ;
case 2: res = DARK_GRAY ;break ;
case 3: res = BLACK ;break ;
}
return res ;
}
Rendering the Sprites:
Rendering the sprites is a bit more difficult then the tiles but luckily the sprite data is located in memory address 0x8000-0x8FFF which means the sprite identifiers are all unsigned values which makes finding them easier. There are 40 tiles located in memory region 0x8000-0x8FFF and we need to scan through them all and check their attributes to find where they need to be rendered. The sprite attributes are found in the sprite attribute table (DUH!) located in memory region 0xFE00-0xFE9F. In this memory region each sprite has 4 bytes of attributes associtated to it, these are:
0: Sprite Y Position: Position of the sprite on the Y axis of the viewing display minus 16
1: Sprite X Position: Position of the sprite on the X axis of the viewing display minus 8
2: Pattern number: This is the sprite identifier used for looking up the sprite data in memory region 0x8000-0x8FFF
3: Attributes: These are the attributes of the sprite, discussed later.
Bit7: Sprite to Background Priority
Bit6: Y flip
Bit5: X flip
Bit4: Palette number
Bit3: Not used in standard gameboy
Bit2-0: Not used in standard gameboy
Y flip: If this bit is set then the sprite is mirrored vertically. This will be used in the game to turn sprites upside down.
X flip: If this bit is set then the sprite is mirrored horizontally. This will be used in the game to change the direction of the characters etc
Palette Number: Sprites can either get their monochrome palettes from 0xFF48 or 0xFF49. If this bit is 0 then it gets it palette from 0xFF48 otherwise 0xFF49
I find the best way to handle the X and Y flipping is to read the sprite data in backwards as this will give the flip effect.
We now have enough information to render the sprites. This is done almost identically to the rendering of the tiles, except that instead of looping through a layout region in memory to get the next identifier of the tile to draw, we have to loop through all 40 sprites and detect which ones are visible and are intercepting with the current scanline.
void Emulator::RenderSprites( )
{
bool use8x16 = false ;
if (TestBit(lcdControl,2))
use8x16 = true ;
for (int sprite = 0 ; sprite < 40; sprite++)
{
// sprite occupies 4 bytes in the sprite attributes table
BYTE index = sprite*4 ;
BYTE yPos = ReadMemory(0xFE00+index) - 16;
BYTE xPos = ReadMemory(0xFE00+index+1)-8;
BYTE tileLocation = ReadMemory(0xFE00+index+2) ;
BYTE attributes = ReadMemory(0xFE00+index+3) ;
bool yFlip = TestBit(attributes,6) ;
bool xFlip = TestBit(attributes,5) ;
int scanline = ReadMemory(0xFF44);
int ysize = 8;
if (use8x16)
ysize = 16;
// does this sprite intercept with the scanline?
if ((scanline >= yPos) && (scanline < (yPos+ysize)))
{
int line = scanline - yPos ;
// read the sprite in backwards in the y axis
if (yFlip)
{
line -= ysize ;
line *= -1 ;
}
line *= 2; // same as for tiles
WORD dataAddress = (0x8000 + (tileLocation * 16)) + line ;
BYTE data1 = ReadMemory( dataAddress ) ;
BYTE data2 = ReadMemory( dataAddress +1 ) ;
// its easier to read in from right to left as pixel 0 is
// bit 7 in the colour data, pixel 1 is bit 6 etc...
for (int tilePixel = 7; tilePixel >= 0; tilePixel--)
{
int colourbit = tilePixel ;
// read the sprite in backwards for the x axis
if (xFlip)
{
colourbit -= 7 ;
colourbit *= -1 ;
}
// the rest is the same as for tiles
int colourNum = BitGetVal(data2,colourbit) ;
colourNum <<= 1;
colourNum |= BitGetVal(data1,colourbit) ;
WORD colourAddress = TestBit(attributes,4)?0xFF49:0xFF48 ;
COLOUR col=GetColour(colourNum, colourAddress ) ;
// white is transparent for sprites.
if (col == WHITE)
continue ;
int red = 0;
int green = 0;
int blue = 0;
switch(col)
{
case WHITE: red =255;green=255;blue=255;break ;
case LIGHT_GRAY:red =0xCC;green=0xCC ;blue=0xCC;break ;
case DARK_GRAY:red=0x77;green=0x77;blue=0x77;break ;
}
int xPix = 0 - tilePixel ;
xPix += 7 ;
int pixel = xPos+xPix ;
// sanity check
if ((scanline<0)||(scanline>143)||(pixel<0)||(pixel>159))
{
continue ;
}
m_ScreenData[pixel][scanline][0] = red ;
m_ScreenData[pixel][scanline][1] = green ;
m_ScreenData[pixel][scanline][2] = blue ;
}
}
}
}


Alien (1979) A movie review by Serdar Yegulalp (C) 1997 by Serdar Yegulalp
CAPSULE: THE trend-setter for crossbreeds of horror and SF; still retains all of its original power and vision. Indispensible.
"All fear is ultimately the fear of death." -- A.S. Neill
ALIEN is a "haunted house movie in space" the way CASABLANCA was "a WWII movie about a cabaret in Morocco". Categorizing it doesn't come close to describing its power and unrelentingly near-sadistic psychic pressure. It is easily the best movie of its kind, and has yet to be surpassed in its capacity for creating giant, silent spaces of horror in viewer's minds.
The plot is direct and unadorned. A group of space pilots who're on the way home -- "truckers in space" was the way the press kit described them -- get pulled out of suspended animation because of a distress beacon. The company they work for stipulates that they have to respond to any such call "on penalty of total forfeiture of shares", as one of the crew members icily explains it. They're not scientists or adventurers; they're just a gang of ordinary beer-drinking Joes who wanna go home.
The signal turns out to be emanating from a derelict craft on a lifeless planet. On closer inspection, they find what they believe to be the pilot -- in a shot that is by itself immortal -- and something... more correctly a whole mess of somethings... in the cargo hold. And beyond that I will not go, if only for the sake of the ones lucky enough to have not seen the movie yet. See it in widescreen if you can manage it: much of the film's remarkable Panavision photography loses a lot when cropped by almost fifty percent for a TV screen.
Director Ridley Scott -- this was only his second feature-length film, after THE DUELLISTS! -- keeps the movie fluid and calm for the most part. He has eschewed using too many obvious horror-movie cliches: the false alarm, the having-someone-jump-suddenly-into-the-frame shock, etc. When he does, he turns them on his ear -- such as the scene with Dallas (Tom Skerritt) in the tunnel, or the scene with Harry Dean Stanton in the bowels of the ship. Both end with a shock, but take their time to deploy the shock properly, with surgically-precise timing. He also keeps the acting toned way down -- no one's reaching for effect here, except near the end when sweat and whites of the eyes and flat-out hysteria are required. Sigourney Weaver, of course, is most often remembered, but look also at the other actors, even in the quietest moments.
And then there is the alien itself, which is a slithering anthology of everything we ever imagined lived under our beds and in our closets as scared children. H.R. Giger, the artist responsible for the movie's cliche-shattering look, once told an interviewer that while brushing his teeth one night on the ALIEN set, he bumped into a light bulb and sent it swinging. This caused shadows to move, and made the alin sculpture in the corner appear animated. He screamed.
The reason a movie like ALIEN still scares us -- REALLY scares us, not just gives us cleverly gory barf-em-up shots -- isn't due to any one thing, but an amalgam of elements. Films are collaborative; the best films are the product of many great minds, not just one, and ALIEN had a truly golden collection of people working together to bring us something that not only entertains, not only scares, but that has defined a place in our collective minds for many others to follow.
Four out of four eggs.
<EMAIL_ADDRESS>EFNet IRC: GinRei http://www.io.com/~syegul another worldly device... you can crush me as I speak/write on rocks what you feel/now feel this truth =smilin' in your face, all the time wanna take your place, the BACKSTABBERS=
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


You have found the website for Strange Loop, LLC - a tech company based out of Knoxville, Tenneessee.
Specializing in web technology, but with experience in all areas of technology and design, Strange Loop offers services varying from that of an advisory consultant to outright developing tailor-made websites.
Click one of the tabs above to learn more about the company or how to contact us.


Start Date:
06.01.2000End Date:
19.07.1907Project Leader:
Fatih Sultan Mehmet HanOverall Status:
Istanbul Not Constantinopleposted by Erdem Tuna (Yesterday)
posted by Eray Tüzün (Yesterday)
| # | Task | Deadline | Time Left |
|---|---|---|---|
| Assignment-1 | Mark | Otto | @mdo |
| Assignment-2 | Jacob | Thornton | @fat |
| Assignment-3 | Larry | the Bird | |
| Assignment-4 | Bu | Gün | Bayram |
Friday, December 15
150 days
-Group 1
Send Join Request-Group 2
Send Join Request-Group 3
Send Join Request-Group 4
Send Join Request-Group 5
Send Join Request-Group 6
Send Join Request


Durable goods
Check goods
Status: online
Contract NO. ##
Home
(current)
Link
Disabled
Search
Product
Sizes
Price
Discounted Price
{{ name }}
{{ size }}
{{ '$' + price }}
{{ '$' + discount }}


--- title: Ruth Rendell book added date: 2003-07-12T10:00:00.000Z ---
Ruth Rendell's 'A Demon in my View' just added to the library, and now featuring on the front page, under 'most recent'. Also, added a link to a Star Trek site in the links section.


list-component works!
You've clicked This {{ clickCounter }} times.
You said: {{ name }}
The Click Counter IS GREATER than 4.
Keep Going!


This module allows to integrate ORTC service with Titanium Mobile applications.
The ORTC (Open Real-Time Connectivity) was developed to add a layer of abstraction to real-time full-duplex web communications platforms by making real-time web applications independent of those platforms.
ORTC provides a standard software API (Application Programming Interface) for sending and receiving data in real-time over the web.
For information how to use Titanium Modules, please follow the guide here.
To access this module from JavaScript, you would do the following:
var ORTC = require("co.realtime.ortc");
The ORTC variable is a reference to the Module object.
The cluster server URL
Example:
ORTC.clusterUrl = 'http://ortc-developers.realtime.co/server/2.1';
The server URL
Example:
ORTC.url = 'http://ortc-developers-euwest1-S0001.realtime.co/server/2.1';
The client connection metadata
Example:
ORTC.connectionMetadata = 'Titanium Client';
The client announcement subchannel
Example:
ORTC.announcementSubchannel = 'announcementSubchannel';
The client session identifier
Example:
alert(ORTC.sessionId);
Event fired whenever exception occurs. The event parameter passed on the callback function has defined following property: - info [string]: description of the exception
Example:
ORTC.addEventListener('onException', function(e) {
alert('Exception: '+e.info);
});
Event fired whenever module connects.
Example:
ORTC.addEventListener('onConnected', function(e) {
alert('Connected');
});
Event fired whenever module disconnects.
Example:
ORTC.addEventListener('onDisconnected', function(e) {
alert('Disconnected');
});
Event fired whenever module reconnects.
Example:
ORTC.addEventListener('onReconnected', function(e) {
alert('Reconnected');
});
Event fired whenever module connects.
Example:
ORTC.addEventListener('onReconnecting', function(e) {
alert('Reconnecting');
});
Event fired when module subscribes to a channel. The event parameter passed on the callback function has defined following property: - channel [string]: the channel name
Example:
ORTC.addEventListener('onSubscribed', function(e) {
alert('Subscribed to channel: '+e.channel);
});
Event fired when module unsubscribes from a channel. The event parameter passed on the callback function has defined following property: - channel [string]: the channel name
Example:
ORTC.addEventListener('onUnsubscribed', function(e) {
alert('Unsubscribed from: '+e.channel);
});
Event fired when module receives a message on the subscribed channel. The event parameter passed on the callback function has defined following properties: - channel [string]: the channel name - message [string]: the message
Example:
ORTC.addEventListener('onMessage', function(e) {
alert('(Channel: '+e.channel+') Message received: '+e.message);
});
Event fired as a response for presence request. The event parameter passed on the callback function has defined following properties: - channel [string]: the channel name - result [string]: JSON string containing the presence response - error [string]: the error description, if occurs, otherwise empty string
Example:
ORTC.addEventListener('onPresence', function(e) {
if (e.error != ""){
alert('(Channel: '+e.channel+') Presence error: ' + e.error);
} else {
alert('(Channel: '+e.channel+') Presence: '+e.result);
}
});
Connects the client using the supplied application key and authentication token. Parameters: - application_key [string]: Your ORTC application key. - authentication_token [string]: - Your ORTC authentication token (this parameter is optional).
Example:
ORTC.connect('yourApplicationKey');
or
ORTC.connect('yourApplicationKey', 'yourAuthenticationToken');
Disconnects the client.
Example:
ORTC.disconnect();
Subscribes to the supplied channel to receive messages sent to it. Parameters: - channel [string]: The channel name. - subscribe_on_reconnect [bool] -Indicates whether the client should subscribe to the channel when reconnected (if it was previously subscribed when connected).
Example:
ORTC.subscribe('yellow', true);
Unsubscribes from the supplied channel to stop receiving messages sent to it. Parameter: - channel [string]: The channel name.
Example:
ORTC.unsubscribe('yellow');
Sends the supplied message to the supplied channel. Parameters: - channel [string]: The channel name. - message [string]: The message to send.
Example:
ORTC.send('yellow', 'This is the message');
Returns boolean value which indicates whether the client is subscribed to the supplied channel. Parameter: - channel [string]: The channel name.
Example:
alert(ORTC.isSubscribed('yellow'));
Returns boolean value which indicates whether the client is connected.
Example:
alert(ORTC.isConnected());
Gets a dictionary indicating the subscriptions number in the specified channel and if active the first 100 unique metadata. Parameter: - channel [string]: The channel name with presence data active.
Example:
ORTC.presence('yellow');
Please see the examples files included in the directory 'example'


This is a collection of music clips with guitar parts I like. Not all are all by the world's best guitarists; not all are from the world's best songs.
I narrowed all the videos in on a (usually) brief time selection.
I like the lick between each line of the verse. I suspect that Chris Walla might have helped on this one.
I like that fast up-and-down strumming of the rhythm guitar.
Because of license restrictions, you'll have to click the YouTube logo in the bottom right corner of the video to watch it on their site.


Bitcoin Gold, the spinoff currency from Bitcoin, has been hit by hackers who stole at least $18m worth of cryptocurrency and showed that a '51 per cent attack', long used as a theoretical threat to cryptocurrencies, is a genuine threat. Click here to read more.


MY SUBREDDITS
ANNOUNCEMENTS
ART
ASKREDDIT
ASKSCIENCE
AWW
BLOG
BOOKS
CREEPY
DATAISBEAUTIFUL
DIY
DOCUMENTARIES
EARTHPORN
EUROPE
EXPLAINLIKEIMFIVE
FOOD
FUNNY
FUTUROLOGY
GADGETS
GAMING
GETMOTIVATED
GIFS
HISTORY
IAMA
INTERNETISBEAUTIFUL
JOKES
LIFEPROTIPS
LISTENTOTHIS
MILDLYINTERESTING
MOVIES
MUSIC
NEWS
NOSLEEP
NOTTHEONION
OLDSCHOOLCOOL
PERSONALFINANCE
PHILOSOPHY
PHOTOSHOPBATTLES
PICS
SAKARTVELO
SCIENCE
SHOWERTHOUGHTS
SPACE
SPORTS
TELEVISION
TIFU
TODAYILEARNED
TWOXCHROMOSOMES
UPLIFTINGNEWS
VIDEOS
WORLDNEWS
WRITINGPROMPTS
EDIT SUBSCRIPTIONS
HOME
-
POPULAR
-
ALL
-
RANDOM
-
USERS
|
ASKREDDIT
-
WORLDNEWS
-
VIDEOS
-
FUNNY
-
TODAYILEARNED
-
PICS
-
GAMING
-
MOVIES
-
NEWS
-
GIFS
-
MILDLYINTERESTING
-
AWW
-
SHOWERTHOUGHTS
-
TELEVISION
-
JOKES
-
SCIENCE
-
OLDSCHOOLCOOL
-
EUROPE
-
SPORTS
-
IAMA
-
DOCUMENTARIES
-
TWOXCHROMOSOMES
-
EXPLAINLIKEIMFIVE
-
PERSONALFINANCE
-
BOOKS
-
TIFU
-
FUTUROLOGY
-
DATAISBEAUTIFUL
-
WRITINGPROMPTS
-
NOTTHEONION
-
FOOD
-
MUSIC
-
PHOTOSHOPBATTLES
-
EARTHPORN
-
PHILOSOPHY
-
ART
-
NOSLEEP
-
GETMOTIVATED
-
ASKSCIENCE
-
LIFEPROTIPS
-
SPACE
-
UPLIFTINGNEWS
-
DIY
-
HISTORY
-
GADGETS
-
CREEPY
-
LISTENTOTHIS
-
BLOG
-
ANNOUNCEMENTS
-
SAKARTVELO
-
INTERNETISBEAUTIFUL
EDIT »
best
hot
new
rising
controversial
Nikooo (242)
|
Msg
|
preferences
|
stats
|
help
|
blog
|
logout
1
40.9k
The U.K. Just Went 55 Hours Without Using Coal for the First Time in History
(www.bloomberg.com)
submitted 21 minutes ago by
mvea
tagged:
UK
,
funny
,
coal
,
news
,
green
,
electricity
218 comments save hide report
2
40.8k
The future of racing
(i.imgur.com)
submitted 21 minutes ago by
OzeemOnan
tagged:
vr
,
racing
,
funny
,
gaming
218 comments save hide report
3
27.8k
He turned himself in
(i.redditmedia.com)
submitted 21 minutes ago by
69sloth
tagged:
norton
,
usage
,
funny
,
image
218 comments save hide report
4
10.2k
Clever Overwatch.
(i.redd.it)
submitted 21 minutes ago by
WarlockOPain77
tagged:
overwatch
,
clever
,
gaming
218 comments save hide report
5
6326
A Japanese Take on American Sushi - JunsKitchen
(www.youtube.com)
submitted 21 minutes ago by
alex_dlc
tagged:
sushi
,
video
,
american
,
kitchen
,
cuisine
218 comments save hide report
6
3929
John Oliver Bought Russell Crowe's Jockstrap for Alaska's Last Blockbuster Video
(www.hollywoodreporter.com)
submitted 21 minutes ago by
njwatson32
tagged:
John Oliver
,
funny
,
onion
,
blockbuster
,
video
218 comments save hide report
7
3817
If there were a mediocre version of Heaven called ' 'Eh'ven ', what kinds of things would you expect to happen there?
(self.AskReddit)
submitted 21 minutes ago by
semi-terrestrial
tagged:
heaven
,
AskReddit
,
funny
218 comments save hide report
8
714
An international study of alcohol consumption has found no overall health benefits from moderate drinking and calls into question the U.S. guidelines that say men can safely drink twice as much as women
(www.washingtonpost.com)
submitted 21 minutes ago by
Quanttek
tagged:
science
,
alcohol
,
research
,
health
218 comments save hide report
9
494
Ketamine has "shown promise" in the rapid treatment of major depression and suicidal thoughts, a US study says. The double-blind, randomized, placebo-controlled study found use of the drug via a nasal spray led to "significant" improvements in depressive symptoms in the first 24 hours.
(www.bbc.com)
submitted 21 minutes ago by
mvea
tagged:
future
,
ketamine
,
health
218 comments save hide report
10
234
Harvey Causon -- Worn You [Contemporary R&B] (2018)
(www.youtube.com)
submitted 21 minutes ago by
BlackestPanther
tagged:
R&B
,
Music
218 comments save hide report
11
50
[IMAGE] "It Makes Me Feel Human" (#12)
(i.imgur.com)
submitted 21 minutes ago by
alfaguara27
tagged:
motivation
,
love
,
sadness
,
south park
,
GetMotivated
,
image
218 comments save hide report
Customize Your Reddit
POLITICS
ENVIRONMENT
ATHEISM
BESTOF
MUSIC
BACON
REDDIT.COM
GAMING
COMICS
WORLDPOLITICS
YOURWEEK
MODTALK
Popular Tags
funny
video
image
south park
science
clever
gaming
John Oliver
health
electricity
heaven
motivation
sadness
sushi
research
AskReddit
blockbuster
R&B
vr
Music
UK
coal
GetMotivated
news
Submit a link >>
to anything interesting: news article, blog, entry, video, picture...
Create your own reddit >>
...because you love freedom.
...for your WoW guild.


3418
Your Money or Your Life!
Hobbes and Rousseau had somewhat different definitions of freedom, with Hobbes giving a very narrow view, claiming that freedom was doing what you wish without physical restraint, even going so far as saying someone would be free to choose in a "money or your life" situation.
Rousseau, on the other hand, thought freedom was using your reason to give your freedom over your own base animal instincts. So the robber himself wouldn't be free in the situation, because a rational being would exist in society peacefully by rationally agreeing to obey the general will.
Both were social contract theorists and thought the State had legitimate power to force its citizens to obey, in various ways.
Hobbes and Rousseau had somewhat different definitions of freedom, with Hobbes giving a very narrow view, claiming that freedom was doing what you wish without physical restraint, even going so far as saying someone would be free to choose in a "money or your life" situation.
Rousseau, on the other hand, thought freedom was using your reason to give your freedom over your own base animal instincts. So the robber himself wouldn't be free in the situation, because a rational being would exist in society peacefully by rationally agreeing to obey the general will.
Both were social contract theorists and thought the State had legitimate power to force its citizens to obey, in various ways.
Permanent Link to this Comic: https://existentialcomics.com/comic/490
Support the comic on Patreon!


{% extends '_base.html' %} {% block title %}Password reset complete{% endblock %} {% block content %}
Your new password has been set.
You can log in now on the log in page.


The pattern to use to search for ivy module descriptor files (usually named ivy.xml) in this project. Specified using ant-include pattern syntax.
Leave blank to use the default value of "**/ivy.xml".


I may not win many friends by commenting on the emperor's nudity, but let's charge ahead anyway. I am not a clever man.
Possibly you've not heard of Douglas Hubbard. If you're interested at all in estimating the value of IT projects, his works should be required reading. In fact, his books are required reading for the Society of Actuaries if you want to pass their exams and become an actuary. Douglas Hubbard is a clever man.
But we'll come back to him in a moment.
If there's one key thing I've learned in consulting, it's that potential clients who start discussions by talking about building value for their customers have usually been better clients than those who start conversations with "what's your rate?" Why? Because the "what's your rate" clients are focused on controlling costs, not building value. I've found that their approach problems is different and those who are paying more attention to minimizing risk than maximizing value simply have different ideas about how to approach a project.
And you know what? I get it. If you want to go out to dinner and you only have £15 in your pocket, you're probably not going to a fancy restaurant. You just might grab a pint at a pub and hit a kebab shop after. Budget constraints are real.
But curiously, while development costs on a project are one of the first things we look at, they're also one of the worst metrics you can use to judge the value of a project. It's part of a problem that Hubbard refers to as the IT Measurement Inversion. Specifically:
The variables having the greatest impact on project success are the variables we measure the least.
So what sort of variables are there? There are the ongoing development and maintenance costs when the project is delivered. There are marketing costs. There are costs to have your people learn the new system. And so on. The costs are myriad and complex, but if we're going to judge the value of a new system, which variables matter the most? Those are the ones we should be focusing on.
Hubbard's work will guide you here. In particular, you might want to consider his book How to Measure Anything (that's not an affiliate link, by the way), where he teaches you how to break problems down to things that can be measured and how to measure them. You'll learn quite a bit about statistical analysis and running Monte Carlo simulations. In fact, one of the things you'll learn is that of the various techniques which have been developed to estimate project success, Monte Carlo simulations win hands down.
In fact, Monte Carlo simulations are so powerful that Hubbard talks about research at NASA showing that, for over 100 projects, the accountants outperformed the subject matter experts (scientists and engineers) on project estimates because the accountants used Monte Carlo simulations rather than other methodologies.
But for the purposes of our article, the key takeaway is that Hubbard has done a lot of this work for you and has nailed down what your real risks are. And it's almost intuitive once you think of it. Let's start with the most important.
The greatest risk to project success is whether or not it will be canceled.
That seems so brain-dead obvious that it's almost insulting to say, but when was the last time you quantified that risk? When was the last time you looked at the potential value of a large project and said "there's a 25% that this project will be canceled" and then factored that into your risk estimates? It's the single most important variable, but most people ignore it!
The next most important variable is system utilization. This is actually complex and includes how fast your product will roll out, whether people will use it, their rate of adoption, and so on. Again, this seems so obvious given 20/20 hindsight. Sure, your project took six months to develop instead of three, but customers will be using it for many years. When it's put that way, it's obvious that estimating system utilization is more valuable than estimating development costs. But people still ignore it.
So let's look at development costs.
Of course you have to factor in development costs; I'd be insane to suggest otherwise. You have a budget and when you're looking at backing your project with Oracle or PostgreSQL, most of the time you find that Oracle isn't a terribly cost-effective solution. So yes, costs are important, but consider this: if the first version of Amazon's code cost twice as much to develop, Jeff Bezos would probably still be insanely rich. Uber would still be dominating their space. Facebook would still be selling your pesonal data to dodgy companies. I can confidently say that because these companies are providing real value to people (you might disagree about Facebook, but I can offer you 2.32 billion rebuttals). The fact that these projects weren't canceled and are being used far, far outweighs the initial project costs. Or to restate all of this:
Initial development costs are incurred once. Your revenue stream is continuous. That's why development costs are less important.
"But Curtis, I don't know how to do Monte Carlo simulations or estimate projected system utilization!"
Well ... that's actually a fair point. These articles are intended, if nothing else, to be practical.
Since the two most importance variables in project success are the odds of it being canceled and system utilization, we need to reduce the risk of each of those. How do we do that?
 Figure out the smallest possible work you can do which would add value and build that.  If it turns out your customers have zero interest in your "Recycled Food" project, it's better to find out after a month instead of a year.
But let's say there's some interest. What now? Well, you've greatly reduced the chance of project cancelation because it looks viable, so you need to focus on system utilization. Amongst the key factors, getting customers to actually use the damned thing is incredibly important. You will be amazed at the ideas they come up with and the feedback they give you. As you push forward, you address customer concerns and have a lower risk of building features on top of things they say aren't working. You're constantly pushing new versions of the product in front of your customers and iterating based on their feedback. Every step of the way, you're improving your project based on customer behavior, not your hunches or market research.
This, incidentally, is why Lean Startups are such a powerful movement in business today. They assume they're not canceling their entire business, so they need to maximize system utilization. That means rolling the product out quickly and immediately responding to customer feedback. By doing this, assuming your product isn't canceled, you've now reduced the single greatest risk your project faces.
If you have any thoughts about this, please leave a comment below.
Please leave a comment below!
If you'd like top-notch consulting or training, email me and let's discuss how I can help you. Read my hire me page to learn more about my background.
Copyright © 2018-2023 by Curtis “Ovid” Poe.


{% extends "main.html" %} {% block styles %} {{ super() }} {% endblock %} {% block content %}
You must have taken a wrong turn! There's nothing but the stars here...


Introduction
What is SuperSight ?
SuperSight is made to display Matplotlib plots and Pandas data tables within a static HTML report. This report (we could also call it a website) is composed of several sections which can be used to organize topics and subjects.
Each section can contain one or several pages. These pages will then contain plots and data tables. Both are elements of the page. You can enrich elements with headings, comments and math equations.
Below is a simplified view of an example of the output :
Report
|
|---Section 1
| |---Page 1
| |---Page 2
|
|---Section 2
| |---Page 1
| |---Page 2
| |---Plot 1
| |---Plot 2 (with one below comment)
| |---Data Table 1
| |---Plot 3 (with one headings)
Features
- Static output (folders and files) hence no need of a web server to host it
- Generates a tree of folders according to your sections (one folder by section).
- Multi sections/pages to allow analysts to structure their ideas
- Natively works with Matplotlib and Pandas
- Plots are saved as files in dedicated section folder
- Possibility to insert external SVGs (for compagnies logos ...)
- HTML template built on the top of Bootstrap 4 hence easily customizable
- Possibility to choose a custom theme/template at render time
Use Case
SuperSight can be used as the final step of your data analysis. It allows, for instance, to convert your notebook in a sharable report. You will be able to easily add logic through sections/pages, customize the layout and hide the code to report your work to a larger audience.


Sign up for a teacher or student account
Select the type of account you want to create
I'm a student
I'm a teacher


At least one project and branch pattern needs to be specified for a build to be triggered, and you can specify as many Gerrit projects to trigger on as you want.
Start by specifying the name of the Gerrit project in the left hand text field. You can specify the name pattern in three different ways, as provided by the "Type" drop-down menu.
Then provide the name of the branch(es) to trigger on. The same "pattern types" are available as above. So for example to trigger on all branches in the project you can specify:
You can add more branch patterns by clicking on "Add Branch"
Then you can optionally provide the name of the specific file path(s) and topic names to trigger on.
So for example to trigger on all files in any folder structure under a sub-folder called java:
You can add more file path patterns by clicking on "Add File path"
Disabling strict forbidden file verification


Edit This Page
What is Kubernetes?
Kubernetes is an open-source platform for automating deployment, scaling, and operations of application containers across clusters of hosts.
With Kubernetes, you are able to quickly and efficiently respond to customer demand:
- Scale your applications on the fly.
- Seamlessly roll out new features.
- Optimize use of your hardware by using only the resources you need.
Our goal is to foster an ecosystem of components and tools that relieve the burden of running applications in public and private clouds.
Kubernetes is:
- lean: lightweight, simple, accessible
- portable: public, private, hybrid, multi-cloud
- extensible: modular, pluggable, hookable, composable
- self-healing: auto-placement, auto-restart, auto-replication
The Kubernetes project was started by Google in 2014. Kubernetes builds upon a decade and a half of experience that Google has with running production workloads at scale, combined with best-of-breed ideas and practices from the community.
Why containers?
Looking for reasons why you should be using containers?
Here are some key points:
- Application-centric management:
Raises the level of abstraction from running an OS on virtual hardware to running an application on an OS using logical resources. This provides the simplicity of PaaS with the flexibility of IaaS and enables you to run much more than just 12-factor apps.
- Dev and Ops separation of concerns:
Provides separation of build and deployment; therefore, decoupling applications from infrastructure.
- Agile application creation and deployment:
Increased ease and efficiency of container image creation compared to VM image use.
- Continuous development, integration, and deployment:
Provides for reliable and frequent container image build and deployment with quick and easy rollbacks (due to image immutability).
- Loosely coupled, distributed, elastic, liberated micro-services:
Applications are broken into smaller, independent pieces and can be deployed and managed dynamically – not a fat monolithic stack running on one big single-purpose machine.
- Environmental consistency across development, testing, and production:
Runs the same on a laptop as it does in the cloud.
- Cloud and OS distribution portability:
Runs on Ubuntu, RHEL, on-prem, or Google Container Engine, which makes sense for all environments: build, test, and production.
- Resource isolation:
Predictable application performance.
- Resource utilization:
High efficiency and density.
What can Kubernetes do?
Kubernetes can schedule and run application containers on clusters of physical or virtual machines.
It can also do much more than that.
Kubernetes satisfies a number of common needs of applications running in production, such as:
Even though Kubernetes provides a lot of functionality, there are always new scenarios that would benefit from new features. Ad hoc orchestration that is acceptable initially often requires robust automation at scale. Application-specific workflows can be streamlined to accelerate developer velocity. This is why Kubernetes was also designed to serve as a platform for building an ecosystem of components and tools to make it easier to deploy, scale, and manage applications.
Labels empower users to organize their resources however they please. Annotations enable users to decorate resources with custom information to facilitate their workflows and provide an easy way for management tools to checkpoint state.
Additionally, the Kubernetes control plane is built upon the same APIs that are available to developers and users. Users can write their own controllers, schedulers, etc., if they choose, with their own APIs that can be targeted by a general-purpose command-line tool.
This design has enabled a number of other systems to build atop Kubernetes.
Kubernetes is not:
Kubernetes is not a PaaS (Platform as a Service).
- Kubernetes does not limit the types of applications supported. It does not dictate application frameworks, restrict the set of supported language runtimes, nor cater to only 12-factor applications. Kubernetes aims to support an extremely diverse variety of workloads: if an application can run in a container, it should run great on Kubernetes.
- Kubernetes is unopinionated in the source-to-image space. It does not build your application. Continuous Integration (CI) workflow is an area where different users and projects have their own requirements and preferences, so we support layering CI workflows on Kubernetes but don’t dictate how it should work.
- On the other hand, a number of PaaS systems run on Kubernetes, such as Openshift and Deis. You could also roll your own custom PaaS, integrate with a CI system of your choice, or get along just fine with just Kubernetes: bring your container images and deploy them on Kubernetes.
- Since Kubernetes operates at the application level rather than at just the hardware level, it provides some generally applicable features common to PaaS offerings, such as deployment, scaling, load balancing, logging, monitoring, etc. However, Kubernetes is not monolithic, and these default solutions are optional and pluggable.
Kubernetes is not a mere “orchestration system”; it eliminates the need for orchestration:
- The technical definition of “orchestration” is execution of a defined workflow: do A, then B, then C. In contrast, Kubernetes is comprised of a set of control processes that continuously drive current state towards the provided desired state. It shouldn’t matter how you get from A to C: make it so. This results in a system that is easier to use and more powerful, robust, and resilient.
What does Kubernetes mean? K8s?
The name Kubernetes originates from Greek, meaning “helmsman” or “pilot”, and is the root of “governor” and “cybernetic”. K8s is an abbreviation derived by replacing the 8 letters “ubernete” with 8.


http://action.vday.org/site/R?i=zLs52VkYGr8E8GQjhSMStQ
http://action.vday.org/site/R?i=y6ltAMtvp6-WifJOe6H-hA
http://action.vday.org/site/R?i=G0mt-CGbPhSIN_1PMLn59w
http://action.vday.org/site/R?i=2ixLjI0somdCdFXfnGCxkg
http://action.vday.org/site/R?i=kwxhK2WqfJ1AohpTY4ObdQ
http://action.vday.org/site/R?i=w6uGxwN9B12Lfj8eIeWlPQ
V-Day Taconic To Present Benefit Production of “The Vagina Monologues”
After their successful performance on April 22nd at Taconic
Correctional Facility the cast of V-Day Taconic, including formerly
incarcerated women, is headed to Cherry Lane Theater in NYC on Friday,
May 8th. Cherry Lane is donating their space so that all proceeds
will benefit the Blackbird Project at Women’s Prison Association.
http://action.vday.org/site/R?i=aU6xHl3jkdBuZx_8gXCNyw
http://action.vday.org/site/R?i=LdnTcFj9f2_Fe2r2etMl9A
The Blackbird Project is designed to integrate life coaching and
arts-based intervention to promote physical, emotional, mental, and
spiritual well-being for women who are currently involved in the
criminal justice system, re-entering the community following
incarceration, or living in one of WPA’s residences. Jenna
Worsham (Broadway’s The Heidi Chronicles) is directing and the cast
consists of formerly incarcerated women, professional actresses and
activists.
For more information & to purchase tix >
http://action.vday.org/site/R?i=_lB6mGDs3eUxrxQjLiz4Fg
READ a review of the performance at Taconic >
http://action.vday.org/site/R?i=TCvlCnLjsZZEUueJV7MnbA
WATCH the preview film >
http://action.vday.org/site/R?i=5wu3lrLdBrHFtlaBxX5hgQ
Celebrate Mother’s Day
Send a Mother’s Day Ecard
Celebrate Mother’s Day by supporting our rising work to end violence
against women and girls. Make a donation to V-Day on behalf of your
mother, friends, and loved ones, and V-Day will send the specially
designed 2015 Mother’s Day V-Card of your choice letting them know of
their unique gift in their honor.
CLICK HERE to give this V-Gift >
http://action.vday.org/site/R?i=AJfGtBJ2sUuB3XD6RbJXlw
To send a V-Card on the donate page, check the box next to “Donate on
behalf of a loved one?” labeled “Yes, I would like to send a V-Day
e-card,” chose the design you would like to send, and fill in the rest
of the information to finish designing your gift.
Support Our Sisters And Brothers In Nepal
nepal_earthquake_getty.jpg
Over a week out from the devastating earthquake in Nepal, the need for
support and solidarity is increasing. The road to rehabilitation after
such a tragic loss in ongoing and. “We appeal to One Billion
Rising activists all over the world, to stand and rise for our sisters
and brothers in Nepal - as we did for our sisters and brothers in
Bangladesh when the garment factory, Rana Plaza collapsed - and in the
Philippines last year, when Typhoon Haiyan devastated the city of
Tacloban and neighboring cities - with both tragedies claiming
thousands of lives. Your help and solidarity provided much needed
relief and support then, and we are appealing to you all once again
now, to donate so that the people of Nepal can continue to Rise”
stated Monique Wilson, One Billion Rising Director.
All funds will go directly to communities affected by the earthquake,
administered and facilitated by One Billion Rising Nepal groups on the
ground.
DONATE to the RISING FUND for Nepal >
http://action.vday.org/site/R?i=op5MuuBeUHZoMnvSu5wLjQ
Mary Jane Veloso’s Execution Temporarily Suspended
Thanks to widespread international solidarity of the “Save The
Life Of Mary Jane” campaign and the pressure put on the
Indonesian and Filipino governments, Mary Jane Veloso, the domestic
worker who was a victim of multiple violences and human trafficking
was granted a temporary stay of execution. We would like to thank the
One Billion Rising community for their ongoing support during the
run-up to the reprieve and who remain committed to her long term
freedom and security.
READ the update >
http://action.vday.org/site/R?i=YRepq66SD7BYRg5Hxqdh9g
http://action.vday.org/site/R?i=T7_WNIKgDOa2MVJQcZWoNg
http://action.vday.org/site/R?i=vpDtUu9hNYle0lRwGL6iUg
http://action.vday.org/site/R?i=ebYYSCsskuuxGK001BmEXw
http://action.vday.org/site/R?i=c7wuU7lICyhVy1uQ_gTDCQ
http://action.vday.org/site/R?i=RDRE3EcDylD1piaMa9dWng
http://action.vday.org/site/R?i=JxtciZH1yCx-mw1xYRrpgA
http://action.vday.org/site/R?i=rE1LSAbzYwwVVqnoAr2BMQ
http://action.vday.org/site/R?i=FY-lH5_mdhrxIf_USAh1Yg
unsubscribe
http://action.vday.org/site/CO?i=_aeHHcy5w44XbJZBDKFg1jeMI8Tj5nB-&cid=1062
Powered By Blackbaud


Chinese Mining Giant Trades First Day Flat as Crypto Markets Dump 5%
by Martin YoungThings are not looking rosy for Chinese bitcoin mining giant Canaan after day one of trading and they could get far worse today. BTC has dumped almost 4.5% in 24 hours and crypto markets have shed $10 billion in total so a red Friday is about to begin.
Mining Shares End Flat on Day 1
The long-awaited IPO for Chinese crypto mining hardware manufacturer Canaan kicked off with a $90 million listing. Bloomberg reported that the Hangzhou based firm sold 10 million American Depository Shares (ADS) for $9 apiece on Wednesday. An ADS is a USD denominated equity share of a foreign-based company available for purchase on an American stock exchange.
The valuation was way less than the $400 million slated by the company in October in Hong Kong. Additionally, its lead underwriter, Credit Suisse Group, pulled out before the IPO was launched leaving Citi, China Renaissance, and CMB International Capital to run the books.
Three Arrows Capital CEO Su Zhu noted that the shares actually opened at $13 but fell back to $9.5 pretty quickly.
By the end of the first day’s trading, the stock had fallen to just below the initial price at $8.99 according to Bloomberg. The report continued to add that there was a spike of around 44% which would have pumped prices to $13 initially. The price actually spent most of the first day below $9 but recovered to retouch it by the close of trading on Thursday.
Friday will be interesting but if crypto markets are anything to go by, Canaan has a rough day ahead as shares could dip further into the red.
Crypto Markets Dump $10 Billion
Since this time yesterday total crypto market capitalization has shrunk by 5%, or just over $10 billion. Bitcoin has led the selloff plunging through support at $8,000 in a slide down to an intraday low of $7,400 according to Tradingview.com.
BTC has since recovered to settle just over $7,600 at the moment which is a key support it must hold to prevent a larger collapse down into the high $6,000s. The $6,400 range was a strong level last year but bitcoin has spent very little time there in 2019 so could easily sink right through it.
Overall sentiment has been bearish all week as the king of crypto sheds all gains from its China induced pump late last month. Since it hit that high just below five figures, BTC has dumped 23% in less than a month.
Canaan is likely to have a red Friday if its price does anything close to what bitcoin has done over the past 24 hours.
Will Canaan shares dump alongside BTC? Add your comments below.
Images via Shutterstock, NASDAQ, Twitter: @zhusu
The Rundown


{% extends 'base.html'%} {% load static %} {% block content %}
We love photography! digital memory is our best kept jewel
{{photo.description}}
Taken: {{photo.year_taken | timesince}} ago in {{photo.location}}
Category:{{photo.category}}


WG
Classes
API
Dataset
NotFoundException
OperationStatus
Report
RequestException
UnauthorizedException
User


Single Select
January
February
March
April
May
June
July
August
September
October
November
December
Multiple Select
January
February
March
April
May
June
July
August
September
October
November
December
Group Select
January
February
March
April
May
June
July
August
September
October
November
December
Data Select 1
Data Select 2


Parallel Simulations¶
Running parallel simulations in Lotus is prety easy. The snipet of code below shows the relevant parts of a parallel simulation.
program parallel
use mympiMod
...
!
!  -- Initialize MPI (2D)
call init_mympi(2,set_blocks=b)
root = mympi_rank()==0
!
! -- Initialize grid (2D)
n = composite(DG*(/8,2,1/), prnt=.true.)
call xg(1)%stretch(n(1), -5*DG, -0.6*DG, 0.6*DG, 15*DG, h_max=15., prnt=.true.)
call xg(2)%stretch(n(2), -5*DG, -0.6*DG, 0.6*DG, 5*DG, prnt=.true.)
...
...
m = n/b ! number of points per block!!
...
if(root) ...
...
!
! check if the .kill file has been created
inquire(file=".kill", exist=kill)
if (kill) exit time_loop
!
end do time_loop
call flow%write()
call mympi_end()
contains
...
end program parallel
To run parallel simulations the midle block should be changed to the one below.
...
! -- Initialize MPI (3D)
call init_mympi(3,set_blocks=b,set_periodic=(/.false.,.false.,.true./))
root = mympi_rank()==0
!
! -- Initialize grid (3D)
n = composite(DG*(/8,2,1/), prnt=root)
call xg(1)%stretch(n(1), -5*DG, -0.6*DG, 0.6*DG, 15*DG, h_max=15., prnt=root)
call xg(2)%stretch(n(2), -5*DG, -0.6*DG, 0.6*DG, 5*DG, prnt=root)
xg(3)%h = 5.
...
The main difference is in telling the MPI initialiser that the simulation is in three dimensions.
Also, but this may not always be the case, that the flow through the the Z direction is repeated periodically by a distance equal to the domain. That is that flow that leaves the top Z boundary enters the domain again at the bottom Z.


| Execution ID | Target Machine / Group | Profile | Started On | Completed On | Status |
|---|---|---|---|---|---|
| CR-56a21a5f |<EMAIL_ADDRESS>| Demonstration Profile | Fri Jan 22 2016 12:02:39 | - - | |
| CR-12551a5f | Group 1 | Demonstration Profile | Fri Jan 22 2016 12:02:39 | - - | |
| CR-3838385f |<EMAIL_ADDRESS>| Demonstration Profile | Fri Jan 22 2016 12:02:39 | Fri Jan 22 2016 12:03:29 | |
| CR-56a21a5f |<EMAIL_ADDRESS>| Demonstration Profile | Fri Jan 22 2016 12:02:39 | - - |


Training of neural networks for classification and regression tasks using mini-batch gradient descent. Special features include a function for training autoencoders, which can be used to detect anomalies, and some related plotting functions. Multiple activation functions are supported, including tanh, relu, step and ramp. For the use of the step and ramp activation functions in detecting anomalies using autoencoders, see Hawkins et al. (2002) <doi:10.1007/3-540-46145-0_17>. Furthermore, several loss functions are supported, including robust ones such as Huber and pseudo-Huber loss, as well as L1 and L2 regularization. The possible options for optimization algorithms are RMSprop, Adam and SGD with momentum. The package contains a vectorized C++ implementation that facilitates fast training through mini-batch learning.
| Version: | 2.0 |
| Imports: | Rcpp (≥ 0.12.18), reshape2 (≥ 1.4.3), ggplot2 (≥ 3.0.0), viridisLite (≥ 0.3.0), methods |
| LinkingTo: | Rcpp, RcppArmadillo, Rcereal |
| Published: | 2018-12-11 |
| Author: | Bart Lammers |
| Maintainer: | Bart Lammers <bart.f.lammers at gmail.com> |
| License: | GPL (≥ 3) |
| URL: | https://github.com/bflammers/ANN2 |
| NeedsCompilation: | yes |
| Materials: | README |
| CRAN checks: | ANN2 results |
| Reference manual: | ANN2.pdf |
| Package source: | ANN2_2.0.tar.gz |
| Windows binaries: | r-devel: ANN2_2.0.zip, r-release: ANN2_2.0.zip, r-oldrel: ANN2_2.0.zip |
| OS X binaries: | r-release: ANN2_2.0.tgz, r-oldrel: ANN2_2.0.tgz |
| Old sources: | ANN2 archive |
Please use the canonical form https://CRAN.R-project.org/package=ANN2 to link to this page.


Select Date Sending
First name
Last name
Position
Office
Start date
Salary
First name
Last name
Position
Office
Start date
Salary


Linkup is a JavaScript library to set up WebRTC connections between peers using nothing but an id.
Github project: https://github.com/enmasseio/linkup
Try it out below:


Various MEME Suite programs (including MEME) construct a consensus sequence to be used as a name for a motif. The consensus sequence provides a convenient way to refer to the motif, but is not intended to be used as a replacement for the motif for searching for matches in sequences or other purposes. You should use the actual motif (PSPM or PSSM representation contained in the MEME Motif Format) for those purposes.
Note: DREME motif names are regular expressions, not consensus sequences, and are not constructed in this way.


A beautiful community to meet designers and developers around the world. Meet the creators that touches your creative heart.


{% from 'common/reference_to_list.html' import references_to with context %} {% from 'common/reference_by_list.html' import references_by with context %} {% from 'shared/anomalies_list.html' import anomalies_list with context %} {% from 'shared/procedures_list.html' import procedures_list with context %}


11.5. Implementation Details¶
11.5.1. Limitations¶
Currently, the Cassandra DataStore only supports point/time data. Fortunately, the vast majority of high volume spatio-temporal datasets are ‘event’ data which map directly to the supported data type. Additionally, the Cassandra DataStore expects queries to have bbox or ‘polygon within’ and time-between predicates. Additional predicates on any attribute are supported, but they are applied during a post-processing phase. See the TODO section for how to optimize these predicates.
11.5.2. Index Structure¶
The Cassandra DataStore has a 32-bit integer as the primary key and a 64 bit integer as the clustering key, each with the following structure.
Partition/Primary Key (pkz)
| Bytes 31...16 | Byte 15...0 |
|---|---|
| Epoch Week | 10-bit Z2 packed into 16 bits |
Clustering Key (z31)
| Bytes 63...0 |
|---|
| Full Z3 |
The week number since the epoch is encoded in the upper 16 bits of the primary key and a 10 bit Z2 index is encoded in the lower 16 bits of the primary key. This results in 1024 (10 bit Z2) primary partition keys per week. For example, a spatio-temporal point with lon/lat -75.0,35.0 and dtg 2016-01-01T00:00:00.000Z would have a primary key of 157286595. In addition to the primary key, the Cassandra DataStore encodes a Z3 index into the secondary sort index. The Z3 index interleaves the latitude, longitude, and seconds in the current week into a 64 bit long. See the TODO section for an item regarding parameterizing the periodicity (Epoch Week).
11.5.3. Query Planning¶
In order to satisfy a spatio-temporal query, the Cassandra DataStore first computes all of the row-keys that intersect the geospatial region as well as the temporal region. Then, for each coarse geospatial region, the Cassandra DataStore computes the Z3 intervals that cover the finer resolution spatio-temporal region. It then issues a query for each unique row and Z3 interval to get back the result sets. Each result set is post-processed with any remaining predicates on attributes.


Presented by Donovan Jones
Automation is about taking manual processes and placing technology around them to make them repeatable.
Automation is the key to speed, consistency, scalability and repeatability.
"Kubernetes is an open-source system for automating deployment, operations, and scaling of containerized applications."
Automate things!
Learn automation tools and practices because they are at the heart of todays IT
The types of automation you will be using will be largely dependent on the type of organisation you are working for
You will need to be following software development workflows even if you are a sysdamin or network engineer
No infrastructure in NZ and all our computing is done on AWS, Azure or Google Cloud Platform in Sydney?
Greenfields projects vs. supporting legacy systems
Software is eating the world. This includes the "old" IT world and hardware.
Container are the future but the future is not evenly distributed. We will be dealing with non containerised workloads for many years yet.


Born: 13 August 1975 (age 45 years), Rawalpindi, Pakistan
Test debut (cap 150): 29 November 1997 v West Indies
Spouse: Rubab Khan
Bowling: Right-arm express fast