Library: Foundation
Package: Streams
Header: Poco/DeflatingStream.h
Description
This stream compresses all data passing through it using zlib's deflate algorithm. After all data has been written to the stream, close() must be called to ensure completion of compression. Example:
std::ofstream ostr("data.gz", std::ios::binary); DeflatingOutputStream deflater(ostr, DeflatingStreamBuf::STREAM_GZIP); deflater << "Hello, world!" << std::endl; deflater.close(); ostr.close();
Inheritance
Direct Base Classes: std::ostream, DeflatingIOS
All Base Classes: DeflatingIOS, std::ios, std::ostream
Member Summary
Inherited Functions: rdbuf
Constructors
DeflatingOutputStream
DeflatingOutputStream(
std::ostream & ostr,
DeflatingStreamBuf::StreamType type = DeflatingStreamBuf::STREAM_ZLIB,
int level = (- 1)
);
Creates a DeflatingOutputStream for compressing data passed through and forwarding it to the given output stream.
DeflatingOutputStream
DeflatingOutputStream(
std::ostream & ostr,
int windowBits,
int level
);
Creates a DeflatingOutputStream for compressing data passed through and forwarding it to the given output stream.
Please refer to the zlib documentation of deflateInit2() for a description of the windowBits parameter.
Destructor
~DeflatingOutputStream
Destroys the DeflatingOutputStream.
Member Functions
close
int close();
Finishes up the stream.
Must be called when deflating to an output stream.
sync
virtual int sync();


A Layman's Philosophical Musings
A quick response to to polymath Chris DeLeon's thoughtful post exhorting the virtues of Philosophy.
A position of ignorance
Right off the bat I should qualify all this by saying that I don't know anything about Philosophy. I've never studied it. It seems at times to be an alien mismatch to the sensibilities of my left-brained mind, and worse, one that claims to be about logic and reasoning, topics that ostensibly should be right up my alley. I read Bertrand Russell's History of Western Philosophy last year, and although that was a fabulous, educational romp through the field, my complaints about it still stand. Now I'm reading a second book, Think : A Compelling Introduction to Philosophy by Simon Blackburn.
The Process
The process of thinking about things is a valuable and worthwhile endeavour. Some people enjoy it, some people don't. Amongst those who enjoy it, it becomes an end unto itself, and thought and discussions typically stray towards the more abstract, the more meta, the more foundational. Anyone who has gleefully participated in a pub discussion about religion, death, reality, consciousness, government, or any of a million other topics has participated in this process. It is joyful, sometimes enlightening, entertaining, and refines the individual's ability to meaningfully reason on all kinds of topics, from the abstract to the prosaic. In this sense, and especially from the perspective of the individual's active participation in the activity, I'm all in favour of philosophy. Presumably this is why I have been drawn back to read this second book.
The Content
If anything, I have had more objections to Think than I had to Russell's book. At first, I thought that my issue was simply that the discussed historical philosophers produced curiously shoddy work. Their premises seem shaky. Their arguments full of holes at best. Their conclusions entirely suspect. While there are some genuinely insightful ideas and arguments, they are often mutually contradictory, and the signal to noise is terrible.
Chris points out the importance of reading a decent translation of the original sources to gain enough insight to benefit from the arguments, and in this I defer to his experience. There certainly are some historical philosophers who seem to make a lot more sense to me than the others. I had not expected to have to pick and choose based so much upon my own personal preferences, so in some way my frustration here is perhaps indicative of an expectation mismatch.
As for Think, as I continue to read, it has slowly dawned on me that perhaps this impression is actually because the author himself is an appalling philosopher (sorry Simon!) Every few pages he makes what seems to me like a terrible logical blunder. If this were correct, that would presumably make his interpretation of historical philosophers equally suspect, and perhaps this is why they so often seem simply ludicrous to me.
I realise it is arrogant and bonkers for me to assume I can outclass the author, a man apparently of considerable knowledge and experience, at his own game. But this is how it seems to me, so what am I to make of that?
It seems to me that there are only three possibilities:
- Professor Blackburn's thinking is entirely defective. I am sure this cannot be the case. He is a professor of his subject, his book, while quite understandably not comparable to Russell, has garnered great reviews on Amazon and in the press, for whatever that's worth. As a layman I shall accord him the deference that is entirely his due.
- My own thinking is entirely defective. This is, of course, entirely possible, however distasteful it may be to me. How would I know? In defence of my sanity, I note that I seem to get by, more or less, in everyday life. Or at least, I don't seem to be any more confounded by the state of the world than the people around me.
- Perhaps, then, the problem lies not solely with myself, but is shared by us all. Perhaps human reasoning as expressed in the English language is generally not sufficiently precise, well-defined or powerful to support consistent philosophical arguments of the type that are being put forward. More generally, we aren't remotely as good at thinking as we think we are. Pretty much I'm saying that (1) and (2) are both true, but that both the professor and I can derive some comfort from the idea that the same applies to pretty much everybody else.
The Method
There is, of course, a method for dealing with the unreliability of our thoughts and perceptions - the scientific method, in its many forms and manifestations. I have friends who claim that the scientific method came out of philosophy, and while I have some reservations about the truth of this in the day-to-day reality of individual practitioners, of course in an abstract sense I can see that this lineage is real.
Application of the scientific method would be the normal way out of the morass of imprecise thoughts that, to date, characterise the majority of philosophy for me. Some aspects of ancient philosophy have proven tractable in this regard. These are the subjects that have subsequently calved off from philosophy to form whole new fields and sciences.
Of course, this has the curious effect of diluting the perceived value of philosophy. As soon as the application of the scientific method lets thinkers actually gain any traction and start to make real progress on their topic, we immediately snip that subject off from the realm of philosophy and give it a different name. Astronomy and cosmology, biology and psychology, chemistry, physics, and many more. Philosophy proper, then, consists of the left over bits - the topics upon which the scientific method has not proven applicable, and hence upon which no meaningful progress can be made.
Chris, and discussion with friends, has helped me see that in this dismissal, I was overlooking the value of philosophy as an incubator for other fields. This is of course critical to the development of human civilisation, and of interest to historians of the respective fields.
What it isn't
What I'm left with is the impression that my minor experiences of philosophy would have been much improved if my expectations had been very different at the outset.
My layman's impression of philosophy from the outside was that it claimed to be the study of tremendously insightful reasoning done by some of the most powerful minds in history. This expectation was naturally bound to lead me to be disappointed when my initial foray led me to discover that many philosophers, particularly ancient ones, distorted as they are by translation and interpretation, cultural mismatch, and lack of my modern knowledge of the world, appear to my sensibilities to be pretty poor. I hope to improve on this situation by taking on board Chris' advice about choosing particular philosophers who resonate for me personally, together with the idea of studying particular translations of original works, rather than quick summaries.
In addition, I had an expectation that all this intense thought might lead to some more definitive and objective conclusions. However ancient philosophers acted without the benefit of the scientific method, and modern philosophy is pruned of topics to which the scientific method is applicable. As a result, there is much bad mixed in with the good. Even the good parts cannot be trusted as a guide to any sorts of truth, since choosing 'the good parts' seems to be a subjective process.
This seems inevitable, since without the benefit of the scientific method, there is no utility function to be used as feedback, by which ideas could be judged and one school of thought meaningfully compared against another. There can be no definitive winners or losers, and without competition, ideas cannot improve by evolution. Instead, each contributor adds their own voice to the mutually contradictory babble, and it is left to the reader to sift through for the parts of value.
The lack of an objective means to prune the discussion of its less worthy branches mean that many philosophers are deified, their writings sacrosanct and studied for generations, even in cases where they were clearly absolutely wrong. (Plato's thoughts about the shapes of atoms, for example.) I accept that study of historical and ancient philosophers is valid for the perspective it gives on the process of philosophy, and as a study of the history of philosophy itself. However, I am appalled that so much of their actual, specific writings are studied and discussed in so much detail, in the same way I would be mortified by the prospect of scholars spending centuries reviewing the specifics of what me and my friends said in our philosophical discussions in the pub. There may be some value in there, but I came to this expecting a précis of the best minds in the world, not a mishmash of sometimes incoherent ideas.
The Upshot
I've done a lot of bitching, but don't take it as a wholesale rejection. In addition to the things I complain about, there are also a bunch of really great, stimulating ideas. I just didn't expect to have to do so much searching and interpretation to find them. Rather, interpret the above as the painful transitions in my understanding of what philosophy is, which parts of it are likely to be of value to me, and what I should expect from it. Thanks to Chris for his significant contributions towards my continuing education on this.


!Lady Claudia:
Yes, for now at least.
I need you to sneak into the Sanctum of Dawn, take the last page of the contract, and bring it back here to me. It won't be easy, but if Collin's notes are correct, then you should have all the skills you need to complete your mission.
[Quest _195_SevenSignsSecretRitualofthePriests claudiaathebaldt_q195_1c.htm|"You expect me to just waltz in there?"]


Reflection
What's your take on the DBC/EDA experience?
My take on the EDA experience so far is that it can at times be frustrating at other times be really rewarding. I have enjoyed this type of learning.
What are your Impressions
My impressions so far are pretty darn good. Everyone here is really supporitve.
How do you see yourself engaging with this type of culture?
It is easy to see myself engaging in this type of culture because I have already been involved in this culture.
Have your expectations of EDA changed? If so, how?
Yes my expectations of EDA have changed somewhat it is has a steep learning curve! You can choose how you want to learn which really awesome. What is expected out of me is not a mark but understanding of the material
Are you excited to participate in this kind of learning environment? Does it make you nervous?
I am eally excited to particpate in this learning environment with like minded people. I was a little bit nervous but I am not anymore I just want the bootcamp to start already!


Enter two numbers below, one goal number and one counting number. Example: goal number = 15, counting number = 5, answer: 5, 10, 15 Click submit and you will see the calculator work its magic!


Always striving to be the best, with every learning experience I can get.
This is a section in development. If I were to put anything here though, it would be that my years of photography and graphic design give me an advantage in developing and design.... too much? still working on this.


vignettes/belg1.Rmd
belg1.Rmd
Boltzmann entropy (also called configurational entropy) has been recently adopted to analyze entropy of landscape gradients (Gao et al. (2017), Gao et al. (2018)). The goal of belg is to provide an efficient C++ implementation of this method in R. It also extend the original idea by allowing calculations on data with missing values.
Let’s take two small rasters - complex_land
representing a complex landscape and simple_land
representing a simple landscape.
The main function in this package, get_boltzmann()
, calculates the Boltzmann entropy of a landscape gradient:
get_boltzmann(complex_land, method = "hierarchy") #> [1] 191.1567 get_boltzmann(simple_land, method = "hierarchy") #> [1] 104.8581
The results, unsurprisingly, showed that the complex landscape has a larger value of the Boltzmann entropy than the simple one.
The get_boltzmann()
function accepts a RasterLayer
, RasterStack
, RasterBrick
, matrix
, or array
object as an input. As a default, it uses a logarithm of base 10 (log10
), however log
and log2
are also available options for the base
argument.
get_boltzmann(complex_land, method = "hierarchy") # log10 #> [1] 191.1567 get_boltzmann(complex_land, method = "hierarchy", base = "log") #> [1] 440.1546 get_boltzmann(complex_land, method = "hierarchy", base = "log2") #> [1] 635.0089
It also allows for calculation of the relative (the relative
argument equal to TRUE
) and absolute Boltzmann entropy of a landscape gradient.
The main idea behind the Boltzmann entropy of a landscape gradient is to calculate an entropy in a sliding window of 2 x 2 pixels. The relative configurational entropy is a sum of entropies for all windows of the original data.
get_boltzmann(complex_land, method = "hierarchy", relative = TRUE) #> [1] 88.55451
It is possible to calculate an average value for each sliding window of 2 x 2 pixels and therefore create a resampled version of the original dataset:
The absolute configurational entropy is a sum of relative configurational entropies for all levels, starting from the original data to the resampled dataset with at least two rows or columns.
get_boltzmann(complex_land, method = "hierarchy", relative = FALSE) #> [1] 191.1567
Determining the number of microstates belonging to a defined macrostate in a crucial concept for calculation of the configurational entropy. We explore this topic using five different cases of 2 x 2 windows:
win_1 = raster(matrix(c(1, 3, 3, 4), ncol = 2)) win_2 = raster(matrix(c(1, 3, 3, NA), ncol = 2)) win_3 = raster(matrix(c(1, 3, NA, NA), ncol = 2)) win_4 = raster(matrix(c(1, NA, NA, NA), ncol = 2)) win_5 = raster(matrix(c(NA, NA, NA, NA), ncol = 2))
The configurational entropy for data without missing values is calculated using the analytical method by Gao et al. (2018).
Twenty-four different microstate are possible in the above case. The common (base 10) logarithm of 24 is equal to 1.380211. We can compare this result to the get_boltzmann()
output:
get_boltzmann(win_1, method = "hierarchy") #> [1] 1.380211
The generalized (resampled) version of this window has one value, 3
, which is a rounded average of the four original values.
The papers of Gao et al. (2017, 2018) only considered data without missing values. However, the belg package provides a modification allowing for calculation also for data with missing values. Cells with NA
are not considered when calculating microstates.
For example, three microstates are possible for the above case:
The common (base 10) logarithm of 3 is equal to 0.477121.
get_boltzmann(win_2, method = "hierarchy") #> [1] 0.6361617
The generalized (resampled) version of this window is 2.
The third window has two combinations. The common logarithm of 2 is equal to 0.30103.
get_boltzmann(win_3, method = "hierarchy") #> [1] 0.60206
The generalized (resampled) version of this window is also 2.
The fourth window has only one microstate, therefore its common logarithm equals to 0.
get_boltzmann(win_4, method = "hierarchy") #> [1] 0
The generalized (resampled) version of this window is the same as only existing value - 1.
Finally, the last window consists of four missing values. In these cases, the configurational entropy is zero.
get_boltzmann(win_5, method = "hierarchy") #> [1] NaN
Importantly, the generalized version of this window is represented by NA.


--- layout: home title: Adam Daigian · The World's Coolest Tech-bro. --- Hello Welcome to my website. Thanks for coming here to get to know me a little bit.


T9-Word Take-Home Interview
Before our touch-screen smartphones had full software keyboards for our typing pleasure, our thumbs were busy pounding out text messages using only the 12 buttons on our flip phones. The goal of this exercise is to encode strings of input into the sequence of digits that would have to be pressed on the number pad to produce that string, and then decode that sequence back into the input string.
Specifications
Letters will be represented by a standard 12-button phone pad as displayed below:
- Repeated characters will be separated in the numerical input by a hyphen. e.g. The string “AA” is represented by the sequence “2-2”
- Repeated numbers will wrap around the letters on the corresponding button. e.g. The sequences “32,” “33332,” and “33333332” all represent the string “DA”
Minimum Requirements
- Your code must demonstrate logic that accepts a String as input and returns the T9 numerical sequence that represents that string
- Your code must demonstrate logic that accepts a T9 numerical sequence as input and returns the String represented by that sequence
- Your code must demonstrate a reasonably complex input string being encoded into a T9 numerical sequence that is then decoded back into a string
- Your code must be able to encode and decode (at minimum) all 26 uppercase letters of the alphabet, plus a comma, space, and period.
Logistics
Create an empty command-line application in Xcode. You can go classic with Objective-C or live on the edge with Swift, whatever you're more comfortable with!
This will give you a main.m or main.swift file to begin working. You may add as many additional source files as necessary for your solution. When you have finished, simply zip up your project and attach it to an email reply.
Example inputs/outputs
encode(“hello”) => “4433555-555666”
encode(“remind”) => “777336444663”
decode(“444744666-6633”) => “IPHONE”
decode(“94447777222666-66777744466”) => “WISCONSIN”


--- layout: post title: Collection of Haikus date: '2010-10-26T22:22:00-04:00' tags: - haiku - poetry - spilled ink tumblr_url: http://poetry.liabogoev.com/post/54946155301/collection-of-haikus ---
Hot and heavy fall
Traitors from my eyes betray
liquid pearls of wet.
Pain wells in my heart
Frustration burning within
Time stops for no man.
Lost and scared she runs,
Bewildered by the knowledge,
Stealthily eludes.
Trembling heart she breathes
Breeze blowing calm on her brow
She presses onward.


|
ViennaCL - The Vienna Computing Library
1.5.2
|
Base class for mapping viennacl datastructure to generator-friendly structures. More...
#include <mapped_objects.hpp>
Public Member Functions | |
| mapped_object (std::string const &scalartype) | |
| virtual std::string & | append_kernel_arguments (std::set< std::string > &, std::string &str, unsigned int) const |
| std::string const & | scalartype () const |
| void | access_name (std::string const &str) |
| std::string const & | access_name () const |
| virtual std::string | generate (std::pair< std::string, std::string > const &index, int) const |
| virtual | ~mapped_object () |
Protected Member Functions | |
| virtual std::string | generate_default (std::pair< std::string, std::string > const &index) const =0 |
| virtual std::string | append_vector_size (std::string const &scalartype, unsigned int) const |
Protected Attributes | |
| std::string | access_name_ |
| std::string | scalartype_ |
Base class for mapping viennacl datastructure to generator-friendly structures.
| mapped_object | ( | std::string const & | scalartype | ) | [inline] |
| virtual ~mapped_object | ( | ) | [inline, virtual] |
| void access_name | ( | std::string const & | str | ) | [inline] |
| std::string const& access_name | ( | ) | const [inline] |
| virtual std::string& append_kernel_arguments | ( | std::set< std::string > & | , |
| std::string & | str, | ||
| unsigned int | |||
| ) | const [inline, virtual] |
Reimplemented in mapped_implicit_matrix, mapped_implicit_vector, mapped_handle, and mapped_host_scalar.
| virtual std::string append_vector_size | ( | std::string const & | scalartype, |
| unsigned int | |||
| ) | const [inline, protected, virtual] |
Reimplemented in mapped_buffer.
| virtual std::string generate | ( | std::pair< std::string, std::string > const & | index, |
| int | |||
| ) | const [inline, virtual] |
Reimplemented in mapped_buffer.
| virtual std::string generate_default | ( | std::pair< std::string, std::string > const & | index | ) | const [protected, pure virtual] |
Implemented in mapped_implicit_matrix, mapped_implicit_vector, and mapped_binary_leaf.
| std::string const& scalartype | ( | ) | const [inline] |
std::string access_name_ [protected] |
std::string scalartype_ [protected] |


The only way to
get rid of a tempatation is to
yield to it.
The only way to
get rid of a tempatation is to
yield to it.
level


Every Makerspace needs tools! However, the tools will really depend on your space and budget. Here's a list of tools that can help you get started: List of tools .
Remember the tools don't make the Makerspace, the people do!
During our research into the makerspace community we came accross a variety of resources that really helped pave our way into understanding makerspaces. We want to share these resources with you
In this secton you'll find all of our materials so you can print them and take them with you without needing an internet connection.
These are the instructions for some of the workshops you can run in your makerspace.
If your makerspace is still not ready, don't worry! We designed a couple of activities that you can run so that you can get an idea of what people want to see in the makerspace. We also have some guidelines for you to start thinking about the kind of workshops you can run in your space.
If you're interested in learning more about our story as well as our collaboration with Karkhana and what we learned about makerspaces you can download our report.
Making Education: Makerspace as Education Tools in the 21st Century


chrisnas/EffectiveDebugging Contribute to chrisnas/EffectiveDebugging development by creating an account on GitHub.
Blazor-State Tutorial This tutorial shows how to add Blazor-State to a Blazor hosted WebAssembly App application.
Windows Terminal Preview 1910 Release | Windows Command Line Another update to the Windows Terminal has just been released! As always, you can download the Terminal from the Microsoft Store, the Microsoft Store for Business, and GitHub. 👉 Note: In the About popup within the Terminal, this version will appear as v0...
1590810 - Sectigo: EV SSL Certificates with incorrect businessCategory ASSIGNED (Robin.Alden) in NSS - CA Certificate Compliance. Last updated 2020-01-24.
Competitive Pest Services Data Breach: What Happened and How We Plan to Fix It - Competitive Pest Control Recently we discovered that some data from all of our clients was compromised. This discovery came about when customers contacted us to advise they were approached by a third party. We’d like to thank...
Mei-Chin Tsai | Update Conference Prague 2019 Mei-Chin Tsai is a Group Principal Engineer Manager at Microsoft, responsible for .NET Languages and .NET Runtimes. She currently leads the charge to continuously evolve the .NET Runtime to handle modern workloads. Mei-Chin graduated from University of Il...
63 Cores Blocked by Seven Instructions I seem to have a habit of writing about super powerful machines whose many cores are laid low by misuse of locks. So. Yeah. It’s that again.But this one seems particularly impressive. I mean, how o…
.NET Conf in Tokyo 2019 (2019/10/27 11:00〜) # .NET Conf in Tokyo 2019 Microsoft 米国本社 .NET Base 開発チームのDirectorである Steve Carroll 氏の来日・登壇が決定！ 長らくPreviewだった`.NET Core 3.0`は .NET Conf 2019 で GAになりました。 .NET Core 3.0のLaunchを記念して、東京でもローカルイベントを実施することになりました！ .NETやUnity界隈の Microsoft 社員、Microsoft MVPの方々をスピ...
Hear Hong Kong Protesters Read Their Final Goodbyes | The Dispatch As violence escalates between demonstrators and the police in Hong Kong, protesters have started writing “last letters” to their loved ones, in case they don’t return. These notes chronicle the mental and emotional state of frontliners coming to terms wit...


WPA Status
Network Role   SSID LAN IP Status Msg
Restart Network
Restart Network?
You may lose your connection, and transition to ap from static may require reboot.
Ensure settings are good.
Reboot CuPID
Reboot CuPID?
WPA Configuration
require_login(); ?>
| Network Role |   |
| SSID |
| LAN IP |
| Status Msg |
|
You may lose your connection, and transition to ap from static may require reboot.
Ensure settings are good.


[§87A-7] Chair, vice-chair, and secretary-treasurer. The trustees shall elect from among the members a chair, a vice-chair, and a secretary-treasurer. [L 2001, c 88, pt of §1]


Fry! Quit doing the right thing, you jerk! Okay, it's 500 dollars, you have no choice of carrier, the battery can't hold the charge and the reception isn't very… Fetal stemcells, aren't those controversial? WINDMILLS DO NOT WORK THAT WAY! GOOD NIGHT! Kids don't turn rotten just from watching TV.
Leela, Bender, we're going grave robbing. We need rest. The spirit is willing, but the flesh is spongy and bruised. Why not indeed! Oh, I don't have time for this. I have to go and buy a single piece of fruit with a coupon and then return it, making people wait behind me while I complain.
 Yep, I remember. They came in last at the Olympics, then retired to promote alcoholic
beverages! No, just a regular mistake.
Stop!  Cause explosive decompression! No, she'll probably make me do it. The alien mothership is in orbit here. If we can hit that bullseye, the rest of the dominoes will fall like a house of cards. Checkmate. Hey, guess what you're accessories to. Oh yeah, good luck with that. We'll go deliver this crate like professionals, and then we'll go home.
!function($) {
var defaults = {
sectionContainer: "section",
…
};
$.fn.onepage_scroll = function(options) {
var settings = $.extend({}, defaults, options);
…
}
}($)
Who am I making this out to? It's a T. It goes "tuh". Why yes! Thanks for noticing. I wish! It's a nickel. Hi, I'm a naughty nurse, and I really need someone to talk to. $9.95 a minute.
Button Button OutlineBut I've never been to the moon! I found what I need. And it's not friends, it's things. Can I use the gun? Incidentally, you have a dime up your nose. One hundred dollars.
Guess again. That could be 'my' beautiful soul sitting naked on a couch.  Is that a cooking show?
But, like most politicians, he promised more than he could deliver. I'll get my kit! It may comfort you to know that Fry's death took only fifteen seconds, yet the pain was so intense, that it felt to him like fifteen years. And it goes without saying, it caused him to empty his bowels.  You can crush me but you can't crush my spirit!
Pansy. In our darkest hour, we can stand erect, with proud upthrust bosoms. Oh, I always feared he might run off like this. Why, why, why didn't I break his legs?
Bender, hurry! This fuel's expensive! Also, we're dying! Fry, we have a crate to deliver.  Besides, these are adult stemcells, harvested from perfectly healthy adults whom I killed for their stemcells. This is the worst part. The calm before the battle.
If rubbin' frozen dirt in your crotch is wrong, hey I don't wanna be right. If rubbin' frozen dirt in your crotch is wrong, hey I don't wanna be right. Does anybody else feel jealous and aroused and worried? Then throw her in the laundry room, which will hereafter be referred to as "the brig".
Well, let's just dump it in the sewer and say we delivered it. But existing is basically all I do! But, like most politicians, he promised more than he could deliver. But existing is basically all I do! I never loved you.
Good news, everyone! There's a report on TV with some very bad news! Ask her how her day was. You, a bobsleder!? That I'd like to see! Soothe us with sweet lies. Who am I making this out to? And why did 'I' have to take a cab?
Isn't it true that you have been paid for your testimony? Daddy Bender, we're hungry. I love you, buddy!
Of all the friends I've had… you're the first. Bender, this is Fry's decision… and he made it wrong. So it's time for us to interfere in his life.  You guys realize you live in a sewer, right?
Good man. Nixon's pro-war and pro-family. I daresay that Fry has discovered the smelliest object in the known universe! Doomsday device? Ah, now the ball's in Farnsworth's court! Why would I want to know that? Hey, what kinda party is this? There's no booze and only one hooker. She also liked to shut up!
may 10, 2014
september 27, 2014
april 2, 2014
Good news, everyone! There's a report on TV with some very bad news! Daddy Bender, we're hungry. One hundred dollars. Leela, Bender, we're going grave robbing.
Who am I making this out to?  Does anybody else feel jealous and aroused and worried?
Fetal stemcells, aren't those controversial? Ven ve voke up, ve had zese wodies. You guys realize you live in a sewer, right? And why did 'I' have to take a cab? Why would I want to know that?  I can't swallow that.
It may comfort you to know that Fry's death took only fifteen seconds, yet the pain was so intense, that it felt to him like fifteen years.


HTML5 is a markup language used for structuring content on the World Wide Web. It was the fifth and last major version of HTML that is a World Wide Web Consortium (W3C) recommendation. The current specification is known as the HTML Living Standard and is maintained by a consortium of the major browser vendors (Apple, Google, Mozilla, and Microsoft), the Web Hypertext Application Technology Working Group . Browsers do not display the HTML tags.
Cascading Style Sheets is a style sheet language used for describing the document written in a markup language like HTML.CSS is a cornerstone technology of the World Wide Web, alongside HTML and JavaScript.CSS is designed to enable the separation of presentation and content, .The CSS specifications are maintained by the World Wide Web Consortium.In addition to HTML, other markup languages support the use of CSS including XHTML, plain XML, SVG, and XUL.
JavaScript often abbreviated as JS, is a programming language that conforms to the ECMA Script specification . JavaScript is high-level, often just-in-time compiled, and multi-paradigm. It has curly-bracket syntax, dynamic typing, prototype-based object-orientation, and first-class functions. Alongside HTML and CSS, JavaScript is one of the core technologies of the World Wide Web(WWW).JavaScript enable interactive web page and is an essential part of web applications.


Celebrating Staff During Continuity of Learning
Although HCPSS buildings are closed, our school system has been anything but shut down. Countless HCPSS staff members have risen above and beyond their typical routines, demonstrating innovation and commitment to support student success during Continuity of Learning.
More News | Events | Reminders
More News
State Assessments
The Maryland State Department of Education (MSDE) received approval to waive federal 2019-2020 Assessment and Accountability Requirements.
National Student Awards
HCPSS students continue to garner national awards, including as National Economics Challenge champions, U.S. Presidential Scholars and National Merit Scholars.
Internet Access
Comcast has opened free access to its Xfinity WiFi network, making hotspots across the country available to anyone, including non-subscribers, at no cost. Search by zip code or city to find a hotspot near you at wifi.xfinity.com. Comcast also provides low cost internet access to eligible families through its Comcast Internet Essentials program, including two months of free internet to new Internet Essential customers. The program is open to Free and Reduced Meals (FARMs) program participants, or those eligible for FARMs. Applications will be accepted through June 30.
Events
Virtual Student Art Shows
Online
This year, the annual HCPSS Senior Art Show & Junior Portfolio Development Exhibition are presented virtually. This online exhibition honors students’ hard work, research, skill development, perseverance, and vision.
Virtual Graduations
Thursday, June 4-Tuesday, June 9
Virtual commencement events for the HCPSS Class of 2020 will stream online at www.hcpss.org. Archived videos will be available to view online soon after each ceremony’s end. HCPSS also will broadcast the celebrations on HCPSS TV cable channels 42 (Verizon) and 95 (Comcast). Find the schedule and more information.
Virtual Public Hearings: Educational Equity, Responsible Use of Technology and Field Trips
Thursday, June 11, 2020, 7 p.m.
Due to the COVID-19 pandemic, Board meetings are currently held virtually, live on the HCPSS website and on Comcast 95/Verizon 42. Specific instructions on testifying virtually will be emailed to each registrant prior to the public hearing.
Learn more about pre-registration and testimony. Community members wishing to testify should register online using the following links.
- Policy 1080 Educational Equity. Register
- Policy 8080 Responsible Use of Technology. Register
- Policy 8100 Field Trips. Register
Final Calendar Update
Tuesday, June 23
The Maryland State Department of Education has approved HCPSS’ request for a waiver of five school days. As a result, the last day of school for students is Tuesday, June 23, 2020. HCPSS will close out the school year with ample opportunities to focus on student social-emotional well-being and a structure for summer support.
Reminders
SMOB Election
The Howard County Association of Student Councils (HCASC) will hold its general election for the 2020-21 Student Member of the Board (SMOB) online June 2-3.
FY 2021 Budget
The Board has rescheduled adoption of the FY2021 Operating and Capital Budgets to June 11, 2020 at 3 p.m. A schedule of all upcoming Board meetings is available online.
Final Grades
Temporary grading modifications have been made to avoid penalizing students during emergency situations, such as the school closure caused by the coronavirus.
Free Meal Distribution
HCPSS will continue to provide free Grab-N-Go meals to anyone age 18 and under and/or any HCPSS student, regardless of age, throughout state-mandated school closures, extended through the end of the school year.
Summer Programs
In compliance with state and local guidelines, all HCPSS 2020 summer programs will be offered online. Virtual programs will have a modified schedule that will incorporate both live sessions and digital content that will be accessed online.
Please visit the HCPSS website Community News and Programs page for upcoming events and programs sponsored by non-profit organizations.
|
|


Hashes vs. Arrays
the ultimate Ruby object-holding showdown
April 05, 2015
This week was all Ruby everything. Meaning, I got my first dose of the magical programming language. I learned two efficient ways to hold collections of information in Ruby. Arrays and Hashes. Today's conversation is all about that. We'll discuss the differences between each, and talk a little bit about when each should be used..
Arrays and Hashes are just ways to organize information in your programs. Each piece of information in array or hash has a key and a value. You can access that piece of information in your array or hash by it's key. Herein lies one of the fundamental differences of hashes and arrays. Let's jump right in:
Arrays
Arrays are ordered lists of information surrounded by square brackets. They can hold any type of data - strings, numbers or even booleans. You can even put an array IN an array. They are ordered because they indexed by their place in the list. Therefore, their key, or how you access that bit of information, can be 0, 1, 2, 3 etc. For example, index of the letter 'a' in the example below is 0, and 'b' is 1, 'c' is 2 and so on.
alphabet = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g']
puts alphabet[0]
output-> a
Hashes
Hashes are the more complicated of the two. Hashes store bits of information organized how you want. Instead of index integers as keys, you can create your own using strings or numbers and assign them a value using this fancy symbol =>
(just an equals sign and a greater than symbol mushed together). There are multiple ways to create Hashes, here are a couple:
Literal Hash - good for values you probably won't change
my_info = {
"name" => "Nikki",
"age" => 28,
"city" => "Richmond",
"state" => "California"
}
Hash.new (applying the new method creates a new and empty Hash.)
Once created you can stick stuff by assigning the key/value pair as shown below
my_info = Hash.new
my_info["age"] = 28
These are just two ways to create Hashes, there are a couple more, but today we'll just address the basics. In this the example above, the keys are name, age, city, and state. They can be used to figure out the values in they represent. If you try to access a key that has no value, you will get nil
value, in other words nothing. Check out the example below:
puts my_info["name"]
output -> Nikki
When to use what?
Now that we've went over the logistics of each, let's talk about when to use what. There are some obvious reasons you would use hashes over arrays, one being, the customizable key values for storing information, not in any particular order. On the other hand, if you want to make a list that needs to be ordered by order, well then, you'd use arrays.
The key here is knowing the number of elements. If you know the number of elements you're going to add to your list in advance, then you should use arrays. Arrays use up alot of memory, so you want to use them sparingly especially if you are creating a app intended for a mobile device. If you don't know, then you should use the Hashes, because of their flexibility.
THIS concludes today's blog post. To send me some feedback tweet me! @nikkip_squared!


Trajectories
Gravitational field
Particles
Algorithm
Collision behavior
Intersection behavior
Link intersection behavior
Wrap around
Wrap around behavior
Fixed clone count
Width
Height
Delta time
Gravitational constant
Minimal distance for gravity
Default link length
Default link strengh
Drag coefficient
Stabilise positions
Stabiliser power


Have a look at the stock of weapons we've created from an authentic replica of a Spartan Gladius to the technicaliities of a Carribean Blunderbust.
We're certified by the British Artist Blacksmiths Association and the Artist Blacksmith Association of North America.
Price depends on what type of weapon you want along with era, material, and any special details you want added. Please refer to the OPTIONS section below.


semiArtificial: Generator of Semi-Artificial Data
Contains methods to generate and evaluate semi-artificial data sets.
Based on a given data set different methods learn data properties using machine learning algorithms and
generate new data with the same properties.
The package currently includes the following data generators:
i) a RBF network based generator using rbfDDA() from package 'RSNNS',
ii) a Random Forest based generator for both classification and regression problems
iii) a density forest based generator for unsupervised data
Data evaluation support tools include:
a) single attribute based statistical evaluation: mean, median, standard deviation, skewness, kurtosis, medcouple, L/RMC, KS test, Hellinger distance
b) evaluation based on clustering using Adjusted Rand Index (ARI) and FM
c) evaluation based on classification performance with various learning models, e.g., random forests.
| Version: |
2.2.5 |
| Imports: |
CORElearn (≥
1.50.3), RSNNS, MASS, nnet, cluster, fpc, stats, timeDate, robustbase, ks, logspline, methods, mcclust, flexclust, StatMatch |
| Published: |
2017-03-31 |
| Author: |
Marko Robnik-Sikonja |
| Maintainer: |
Marko Robnik-Sikonja <marko.robnik at fri.uni-lj.si> |
| License: |
GPL-3 |
| URL: |
http://lkm.fri.uni-lj.si/rmarko/software/ |
| NeedsCompilation: |
no |
| Materials: |
ChangeLog |
| CRAN checks: |
semiArtificial results |
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=semiArtificial
to link to this page.


This is a little anecdote about my experience with ephedra. I'll try to be as precise as possible, but without becoming overly clinical.
Friday night 18:45
I just took 4 ephedra supercaps with 833mg dried ephedra each, containing a total of 267 milligrams (about .009 ounce) ephedrine. I'm feeling pretty exhausted at the moment, since the previous night was 'queens night', which means I've been reveling in the streets all night long and have gotten only a few hours' sleep. I also drank a couple of beers earlier this afternoon, which can negatively affect the ephedra experience. I'm drinking a cup of coffee at the moment, because the caffeine in coffee intensifies the effects of ephedra.
19:39
I feel a pleasant tingling, 'gooseflesh' sensation over my scalp, and I feel slightly restless. Furthermore, I don't feel like sitting behind my computer and typing anymore, so I pace restlessly around a bit in my room. But at the moment I feel great, and I'm no longer tired at all. I decide to put on some relaxing music (Enya) and clean up the mess in my room.
20:05
The tingling sensation is starting to become pretty strong now, I notice that I can make the sensation even more intense if I concentrate on them. The typing is getting a bit more difficult because of my trembling, sweaty hands. My tiredness has completely disappeared, one hour ago I almost fell asleep, now I feel very active and I would like to go and do something. Futhermore I feel a bit detached, as though someone else is typing this.
20:40
The phone rings, but I cannot concentrate very well on the conversation, and what the caller wants to say simply doesn't get through to me. When I hear myself talking, it sounds as if I am talking unusually slowly. I still feel wonderful, only a bit nervous and sweaty. I am still restless. if I were at a party, I would probably want to dance.
21:05
I am bursting with energy, but I cannot find any activity to put that energy into. So I bounce between newspaper, radio, tv and computer - and also between teakettle and toilet, because this stuff make me thirsty.
21:34
I still have the tingling, but I am more relaxed now, enough that I can sit quietly and watch television.
21:56
I still feel a bit nervous, and it's hard to concentrate on the typing: I can think much faster than I can type. I also have problems concentrating on TV, I can follow the stand-up comedians, but with the news I become easily distracted.
22:15
The ephedra has been working for two-and-a-half hours now, the effect is still very pronounced and has not abated appreciably. Although the tingling sensation is tapering off a bit. Another effect of ephedra is that it makes me more sociable, assertive, and kinder. I just spoke to a housemate, and it felt as if I had a strong bond with him (in fact I hardly know the guy). If I were to meet someone who didn't know me, he/she would probably find me friendly but a bit confused. Confused because its hard for me to concentrate on anything for longer than a second.
23:07
I still feel good, and not as nervous as before. I sit quietly watching the TV, a documentary about war victims and refugee camps that affects me much more strongly than it normally would. I find that I feel much more empathetic.
23:18
Now and then the tingling returns. I think I must have drunk two litres (half a gallon) of tea. This ephedra makes me thirsty, and now I think its time to have a nice, cold beer.
Saturday 00:17
Still wide awake, it appears that I won't be getting sleepy anytime soon, although it has been almost 5 hours since I took the ephedra.
02:43
I'm back to normal now, although I still feel some light tingling in my scalp. I remain wide awake, but my body is beginning to feel tired. The 'side-effects' - the sweating, trembling, and detachment that I experienced earlier are gone now.
04:04
Still no signs of sleep, this suprises me a bit, since I took the caps 8 hours ago! All other effects are gone now.
05:38
I'm still awake. The ephedra is working much longer than I anticipated, about 10 hours now, but I think I should be able to get to sleep in an hour or so. Moreover, my appetite is beginning to return, which is not so strange since I've only eaten only a few slices of toast in the last 10 hours. My body feels exhausted at the moment.
+/- 6:15
I finally fell asleep, with no problems.
12:00
The awakening. It has been a somewhat restless night, I awoke a couple of times for 15 minutes or so, and then fell back asleep again. I also have the impression I slept very lightly. Although I slept for only five hours, I feel wide-awake.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


The incident happened on a China Southern Airlines plane that departed from Guangzhou, southeast China on November 19.
It was six hours away from the destination, New York, when the pensioner asked for urgent assistance as he was unable to urinate.
Cabin crew found the elderly man breaking out in a cold sweat so they made an emergency announcement asking for any doctors on board.
Dr Zhang Hong, who is head of vascular surgery at the First Affiliated Hospital of Jinan University, identified himself and offered to help.
Hainan People’s Hospital vascular surgeon Xiao Zhangxiang was also present, according to China News .
Dr Zhang assessed the situation and said: "The pensioner's abdomen was bloated, he could not sit still and was sweating a lot.
"He was going into shock and may have suffered a risk to his life if we didn't tend to him urgently.
"His family said he had a history of prostate enlargement, so we suspected this was causing urinary retention."
The pensioner's bladder was at risk of rupturing and urgently needed a solution to pass the urine out of the body.
The doctors improvised a makeshift catheter using a plastic tube from a portable oxygen cylinder, a syringe from the plane’s first-aid kid, a plastic straw from a milk carton, and some tape.
With consent from the patient's family, Dr Zhang inserted the device into the bladder but soon discovered that the syringe needle was too thin and could not extract the urine.

He repeatedly spit the urine into the empty wine bottle during the life-saving procedure.
He spent 37 minutes and extracted roughly 800ml of urine from the patient.
Dr Zhang: "There was no other way. I didn't think too much about it.
"I only wanted to help him extract the urine retained in his bladder.
"Saving lives is a doctor's instinct."


A type alias for the layout fit policy.
The fit policy controls the computed size constraints which are applied to the parent widget by the layout.
Some layout implementations may ignore the fit policy.
A type alias for the horizontal alignment of a widget.
A type alias for the vertical alignment of a widget.
Get the fit policy for the layout.
The fit policy controls the computed size constraints which are applied to the parent widget by the layout.
Some layout implementations may ignore the fit policy.
Set the fit policy for the layout.
The fit policy controls the computed size constraints which are applied to the parent widget by the layout.
Some layout implementations may ignore the fit policy.
Changing the fit policy will clear the current size constraint for the parent widget and then re-fit the parent.
Test whether the layout is disposed.
Get the parent widget of the layout.
This is set automatically when installing the layout on the parent widget. The parent widget should not be set directly by user code.
Set the parent widget of the layout.
This is set automatically when installing the layout on the parent widget. The parent widget should not be set directly by user code.
Dispose of the resources held by the layout.
This should be reimplemented to clear and dispose of the widgets.
All reimplementations should call the superclass method.
This method is called automatically when the parent is disposed.
Perform layout initialization which requires the parent widget.
This method is invoked immediately after the layout is installed on the parent widget.
The default implementation reparents all of the widgets to the layout parent widget.
Subclasses should reimplement this method and attach the child widget nodes to the parent widget's node.
Create an iterator over the widgets in the layout.
A new iterator over the widgets in the layout.
This abstract method must be implemented by a subclass.
A message handler invoked on an 'after-attach'
message.
The default implementation of this method forwards the message to all widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on an 'after-detach'
message.
The default implementation of this method forwards the message to all widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on an 'after-hide'
message.
The default implementation of this method forwards the message to all non-hidden widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on an 'after-show'
message.
The default implementation of this method forwards the message to all non-hidden widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on a 'before-attach'
message.
The default implementation of this method forwards the message to all widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on a 'before-detach'
message.
The default implementation of this method forwards the message to all widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on a 'before-hide'
message.
The default implementation of this method forwards the message to all non-hidden widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on a 'before-show'
message.
The default implementation of this method forwards the message to all non-hidden widgets. It assumes all widget nodes are attached to the parent widget node.
This may be reimplemented by subclasses as needed.
A message handler invoked on a 'child-hidden'
message.
The default implementation of this handler is a no-op.
A message handler invoked on a 'child-removed'
message.
This will remove the child widget from the layout.
Subclasses should not typically reimplement this method.
A message handler invoked on a 'child-shown'
message.
The default implementation of this handler is a no-op.
A message handler invoked on a 'fit-request'
message.
The default implementation of this handler is a no-op.
A message handler invoked on a 'resize'
message.
The layout should ensure that its widgets are resized according
to the specified layout space, and that they are sent a 'resize'
message if appropriate.
The default implementation of this method sends an UnknownSize
resize message to all widgets.
This may be reimplemented by subclasses as needed.
A message handler invoked on an 'update-request'
message.
The layout should ensure that its widgets are resized according
to the available layout space, and that they are sent a 'resize'
message if appropriate.
The default implementation of this method sends an UnknownSize
resize message to all widgets.
This may be reimplemented by subclasses as needed.
Process a message sent to the parent widget.
The message sent to the parent widget.
This method is called by the parent widget to process a message.
Subclasses may reimplement this method as needed.
Remove a widget from the layout.
The widget to remove from the layout.
A widget is automatically removed from the layout when its parent
is set to null
. This method should only be invoked directly when
removing a widget from a layout which has yet to be installed on a
parent widget.
This method should not modify the widget's parent
.
Get the horizontal alignment for a widget.
The widget of interest.
The horizontal alignment for the widget.
If the layout width allocated to a widget is larger than its max width, the horizontal alignment controls how the widget is placed within the extra horizontal space.
If the allocated width is less than the widget's max width, the horizontal alignment has no effect.
Some layout implementations may ignore horizontal alignment.
Get the vertical alignment for a widget.
The widget of interest.
The vertical alignment for the widget.
If the layout height allocated to a widget is larger than its max height, the vertical alignment controls how the widget is placed within the extra vertical space.
If the allocated height is less than the widget's max height, the vertical alignment has no effect.
Some layout implementations may ignore vertical alignment.
Set the horizontal alignment for a widget.
The widget of interest.
The value for the horizontal alignment.
If the layout width allocated to a widget is larger than its max width, the horizontal alignment controls how the widget is placed within the extra horizontal space.
If the allocated width is less than the widget's max width, the horizontal alignment has no effect.
Some layout implementations may ignore horizontal alignment.
Changing the horizontal alignment will post an update-request
message to widget's parent, provided the parent has a layout
installed.
Set the vertical alignment for a widget.
The widget of interest.
The value for the vertical alignment.
If the layout height allocated to a widget is larger than its max height, the vertical alignment controls how the widget is placed within the extra vertical space.
If the allocated height is less than the widget's max height, the vertical alignment has no effect.
Some layout implementations may ignore vertical alignment.
Changing the horizontal alignment will post an update-request
message to widget's parent, provided the parent has a layout
installed.
Generated using TypeDoc
An abstract base class for creating Phosphor layouts. The namespace for the
Layout
class statics.Notes
A layout is used to add widgets to a parent and to arrange those widgets within the parent's DOM node.
This class implements the base functionality which is required of nearly all layouts. It must be subclassed in order to be useful.
Notably, this class does not define a uniform interface for adding widgets to the layout. A subclass should define that API in a way which is meaningful for its intended use.


Tag input
Enter new tags and confirm them with tab
, enter
or ,
Remove tags with backspace
You can try to type in one of the following tags.
api, blog, bootstrap, carousel, comments, configuration, content, css, database, date, drafts, email, experiment, fancybox, flickr, forum, google, html5, images, installation, jquery, js, json, kirbytext, language, maps, markdown, masonry, metatags, pagination, panel, plugin, releases, rss, search, security, server, tags, thumbnails, toolkit, tutorial, twitter, typography, uri, use case, videos, yaml


Basic accent-card demo
This card has default colors.
This card has a cyan accent color.
accent-card: with image, subheading, and footer
Includes image, subheading, and footer.
This is content.
Includes image, subheading, and footer.
This is content.
accent-card: with color options
This is an accent card with a yellow background.
This is an dark accent card with a blue background.
This is an accent card with a heading that matches the accent.
This card is dark.
This card has no accent border.
This is a flat dark accent card.
accent-card as button
This card is clickable.
This card is not clickable.
accent-card with CSS variables
For a full list of CSS variables, see documentation.
This is an accent card with the top of the image in position.
This is an accent card with image width set to 200px.


Home
Infographics
Future & Conclusion
E-COMMERCE DURING PANDEMIC
WHAT IS E-COMMERCE?
Is the buying and selling of good or services
via the internet, and the transfer of money and data to complete the sales. It's also known
as electronic commerce or internet commerce.
E-COMMERCE BENEFITS
This network allows people to do business without the constraint of distance and time. Your website is one of the best marketing tools your business has, not only can it lead to more chances of your business getting found in search engines, but a huge number of marketing techniques can also work alongside your website, including pay per click advertising, your social media marketing and your email marketing, all of which can include links back to your website.
Note: Your website is one of the best marketing tools your business has, not only can it lead to more chances of your business getting found in search engines, but a huge number of marketing techniques can also work alongside your website, including pay per click advertising, your social media marketing and your email marketing, all of which can include links back to your website.


{% if release.streamable %}
{% autoescape off %}{{ release.get_player_html }}{% endautoescape %}
{% endif %}
{% if release.description %}
{{ release.description|markdown:"safe" }}
{% endif %}
{% with release.get_cart_form as form %}
{% include "kishore/store/buy_product.html" %}
{% endwith %}
{% with release.get_downloads as products %}
{% include "kishore/store/download_product.html" %}
{% endwith %}
{% include "kishore/images/artwork.html" with artwork=release.ordered_images artwork_id=release.id %}


|
ExcelProject
|
#include <Cell.h>
Public Member Functions | |
| virtual Cell * | getPointer ()=0 |
| virtual Cell * | clone () const =0 |
| virtual std::string | getDisplayableString ()=0 |
| virtual std::string | getConstructString ()=0 |
| virtual void | setValue (const std::string &value)=0 |
| virtual bool | isValid (const std::string &str)=0 |
| virtual | ~Cell () |
Cell is an completely abstract class. Its purpose is to link all children-classes which extend this class. Every child of Cell holds a specific type of information unique for the given class.
|
virtual |
Empty virtual destructor. Used to avoid future undefined behavior when dealing with extending.
|
pure virtual |
Dynamically allocates a copy of the the current instance of the object (which will be a child of this class)
Implemented in CellString, CellInt, CellFormula, and CellDouble.
|
pure virtual |
Every instance of a class-child of this class should return a string which will be associated with the current class-child
Implemented in CellString, CellInt, CellFormula, and CellDouble.
|
pure virtual |
Every instance of a class-child of this class should return a string which will be associated with the current class-child
Implemented in CellString, CellInt, CellFormula, and CellDouble.
|
pure virtual |
Returns pointer to the current instance of the object (which will be a child of this class). Ideally, this method should be used to easily get the pointer to the child instance when dealing with polymorphism
Implemented in CellString, CellInt, CellFormula, and CellDouble.
|
pure virtual |
Every instance of a class-child of this class should define a string format, which tells whether a string should be considered a possible part of the child The string itself might have problems in further calculations, but isValid should be able to define whether a string fits the required format for the child class
| string | to be checked |
Implemented in CellString, CellInt, CellFormula, and CellDouble.
|
pure virtual |
Every instance of a class-child of this class should hold information of some type. This information can be given as a string by calling this function. The resulted string is formatted by default in an appropriate way to be displayed.
| initial | information of the current instance of the class-child |
Implemented in CellString, CellInt, CellFormula, and CellDouble.


Leaked Chinese documents show details of Xinjiang crackdown: NYT
Beijing denies any mistreatment of Uighur Muslims and says it's providing vocational training to stamp out 'extremism'.
A trove of leaked government documents details China's clampdown on Uighurs and other Muslims in the country's western Xinjiang region under President Xi Jinping, the New York Times reported.
United Nations experts and activists say at least one million Uighurs and members of other largely Muslim minority groups have been detained in camps in Xinjiangin a crackdown that has drawn condemnation from the United States and other countries.
China's ambassador to the United Kingdom on Monday dismissed the report on the government's policies in Xinjiang as "pure fabrication" and "fake news".
Beijing denies any mistreatment of the Uighurs or others in Xinjiang and says it is providing vocational training to help stamp out "extremism and separatism" and teach new work-related skills.
Asked in London about the Times article, Ambassador Liu Xiaoming told a press conference: "I can categorically deny there is such a document. It is sheer, pure fabrication."
More:
The documents, which the newspaper on Saturday said were leaked by "a member of the Chinese political establishment," reportedly show how Xi gave a series of internal speeches to officials during and after a 2014 visit to Xinjiang following a stabbing attack by Uighur fighters at a train station that killed 31 people.
The report said Xi called for an "all-out 'struggle against terrorism, infiltration, and separatism' using the 'organs of dictatorship,' and showing 'absolutely no mercy'."
The documents show the Chinese leadership's fears were heightened by "terrorist attacks" in other countries and the US's withdrawal of troops from Afghanistan.
It is unclear how the documents totalling 403 pages were gathered and selected, the newspaper said.
'Not another Chechnya'
The state-run Global Times newspaper said in an editorial on Monday the Times' report "lacks morality" and accused some in the West of being "eager to see Xinjiang engulfed in extreme violence and chaos".
It said China had taken "decisive measures" in the region to ensure it did not become "another Republic of Chechnya".
The documents show how officials were given talking points to explain to returning university students that their family members had been taken away for training, and how the programme faced pushback from some local officials, the report said.
They also show internment camps expanded quickly after Chen Quanguo was appointed in August 2016 as the party boss of the region, it said. Chen had taken a tough line to quell restiveness against Communist Party rule during his previous posting in Tibet.


Alexey Vasiliev, Railsware
Brought to you by Alexey Vasiliev, Railsware
Machine learning is the subfield of computer science that gives computers the ability to learn without being explicitly programmed
Machine learning focuses on the development of computer programs that can change when exposed to new data. The process of machine learning is similar to that of data mining. Both systems search through data to look for patterns. However, instead of extracting data for human comprehension -- as is the case in data mining applications -- machine learning uses that data to detect patterns in data and adjust program actions accordingly
If you and/or your organization don’t have good, clean data, you are most definitely not ready for machine learning. Data management should be your first step before diving into any other data project(s)
Classifier Reborn is a general classifier module to allow Bayesian Classifier and Latent Semantic Indexer (LSI)
gem install classifier-reborn
require 'classifier-reborn'
classifier = ClassifierReborn::Bayes.new
'Interesting', 'Uninteresting'
classifier.train "Interesting",
"Here are some good words. I hope you love them."

classifier.classify "I hate bad words and you." # => "Uninteresting"
classifier.classify "I love" #=> 'Interesting'
lsi = ClassifierReborn::LSI.new
strings = [["This text deals with dogs. Dogs.", :dog],
["This text involves dogs too. Dogs!", :dog],
["This text revolves around cats. Cats.", :cat],
["This text also involves cats. Cats!", :cat],
["This text involves birds. Birds.", :bird]]
strings.each { |x| lsi.add_item x.first, x.last }
lsi.classify "This text is also about dogs!" #=> :dog
Decision Tree a ruby library which implements ID3 (information gain) algorithm for decision tree learning
gem install decisiontree
require 'decisiontree'
attributes = ['Temperature']
training = [
[36.6, 'healthy'],
[37, 'sick'],
[38, 'sick'],
[36.7, 'healthy'],
[40, 'sick'],
[50, 'really sick'],
]
# Instantiate the tree, and train it based on the data (set default to '1')
dec_tree = DecisionTree::ID3Tree.new(attributes, training, 'sick', :continuous)
dec_tree.train
test = [37, 'sick']
decision = dec_tree.predict(test)
puts "Predicted: #{decision} ... True decision: #{test.last}"
# => Predicted: sick ... True decision: sick
K Nearest Neighbours (KNN) a simple algorithm that stores all available cases and classifies new cases based on a similarity measure (e.g., distance functions)
gem install knn
require 'knn'
data = Array.new(10000) { Array.new(4) { rand } }
knn = KNN.new(data)
knn.nearest_neighbours([0.5, 0.5, 0.5, 0.5], 2)
# [[4929, 0.027298057904151424,
[0.5033650144041532, 0.5127064912412195,
0.5229515382673083, 0.49324480830032635]],
[8060, 0.08873704527823544,
[0.553585611436454, 0.5318254655421701,
0.45424417942626927, 0.4564524388933011]]]
a, b = [1,1], [2,2]
a.euclidean_distance(b)
# 1.4142135623730951
a.cosine_similarity(b)
# 0.9999999999999998
a.jaccard_index(b)
# 0.0
a.jaccard_distance(b)
# 1.0
a.binary_jaccard_index(b)
# 0.0
a.binary_jaccard_distance(b)
# 1.0
a.tanimoto_coefficient(b)
# 0.6666666666666666
a.haversine_distance(b)
#<PHONE_NUMBER>6105652
Similarity a Ruby library for calculating the similarity between pieces of text using a Term Frequency-Inverse Document Frequency (TF-IDF) method
gem install similarity
require 'similarity'
corpus = Corpus.new
doc1 = Document.new(content:
"A document with a lot of additional words some of which are about chunky bacon")
doc2 = Document.new(content:
"Another longer document with many words and again about chunky bacon")
doc3 = Document.new(content:
"Some text that has nothing to do with pork products")
[doc1, doc2, doc3].each { |doc| corpus << doc }
corpus.similar_documents(doc1).each do |doc, similarity|
puts "Similarity between doc #{doc1.id} and doc #{doc.id} is #{similarity}"
end
Similarity between doc<PHONE_NUMBER>9140 and doc<PHONE_NUMBER>9140
is 1.0000000000000002
Similarity between doc<PHONE_NUMBER>9140 and doc<PHONE_NUMBER>6760
is 0.06068602112714361
Similarity between doc<PHONE_NUMBER>9140 and doc<PHONE_NUMBER>6640
is 0.04882114791611662
corpus.similarity_matrix
[ 1.000e+00 6.069e-02 4.882e-02
6.069e-02 1.000e+00 7.359e-02
4.882e-02 7.359e-02 1.000e+00 ]
K-means clustering is a method of vector quantization, originally from signal processing, that is popular for cluster analysis in data mining. k-means clustering aims to partition n observations into k clusters in which each observation belongs to the cluster with the nearest mean, serving as a prototype of the cluster
Gems: KMeansClusterer, KMeans
require 'kmeans-clusterer'
data = [[40.71,-74.01],[34.05,-118.24],[39.29,-76.61],
[45.52,-122.68],[38.9,-77.04],[36.11,-115.17]]
labels = ['New York', 'Los Angeles', 'Baltimore',
'Portland', 'Washington DC', 'Las Vegas']
k = 2 # find 2 clusters in data
kmeans = KMeansClusterer.run k, data, labels: labels, runs: 5
kmeans.clusters.each do |cluster|
puts cluster.id.to_s + '. ' +
cluster.points.map(&:label).join(", ") + "\t" +
cluster.centroid.to_s
end
# 0. Baltimore, Washington DC, New York [39.63333333333333, -75.88666666666667]
# 1. Las Vegas, Los Angeles, Portland [38.559999999999995, -118.69666666666667]
puts kmeans.predict [[41.85,-87.65]] # Chicago
# [0] mean (0. Baltimore, Washington DC, New York)
require 'k_means'
data = [[1,1], [1,2], [1,1],
[800, 800], [1000, 1000], [500, 500]]
KMeans.new(data, centroids: 2)
# [[0, 1, 2], [3, 4, 5]]
KMeans.new(data, centroids: 2, distance_measure: :jaccard_index)
# [[0, 1, 2, 3, 4, 5], []]
KMeans.new(data, centroids: 2, distance_measure: :haversine_distance)
# [[4], [0, 1, 2, 3, 5]]
require 'cerebrum'
network = Cerebrum.new
network.train([
{input: [0, 0], output: [0]},
{input: [0, 1], output: [1]},
{input: [1, 0], output: [1]},
{input: [1, 1], output: [0]}
])
result = network.run([1, 0])
# => [0.9333206724219677]
OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library
Gems: Ruby-opencv
Apache Mahout project's goal is to build an environment for quickly creating scalable performant machine learning applications
Gems: JRuby Mahout
Apache PredictionIO (incubating) is an open source Machine Learning Server built on top of state-of-the-art open source stack for developers and data scientists create predictive engines for any machine learning task
TensorFlow is an open source software library for numerical computation using data flow graphs
Gems: Tensorflow.rb


Images
Convoluted Image for A
Convoluted Image for B
Convoluted Image for C
Convoluted Image for D
Convoluted Image for E
Edge Enhanced Image for F


Opened in 1954, MyAfya has excelled in medical expertise and services provision and has deservedly earned recognition throughout East Africa and beyond as an advanced diagnostic, treatment and referral centre.
Expansive investment in latest technology and medical equipment has enabled us establish leadership in medical procedures both in Kenya and outside.
We take pride in our highly qualified professionals who deliver our mission every day, translating their knowledge and expertise to internationally compliant practices in healthcare provision.
Courtesy, consideration and unreserved respect towards our patients’ privacy, dignity and confidentiality has time and again helped us earn their trust and goodwill.
Our dedicated nursing staff provides professional care within a friendly and comfortable environment, ensuring that being in hospital is a more pleasurable and less anxious time for our patients and their families.
To be the leading healthcare institution in the region providing world-class
treatment and service.
To offer patients the best care, using advanced technology in a space of trust, safety and comfort.
We are specific about quality and we take pride in our reputation in provision of the highest standards of health care; we give patient satisfaction paramount attention.
Our management style creates a sense of belonging and thus our highly motivated and committed staff believes in teamwork and assisting each other to accomplish the corporate mission. Our admitting doctors are highly qualified and have specialized skills which meet international standards.
We continue to maintain our nurses’ training school as part of our professional development programme.


Using the XMLHttpRequest Object
Chapter
Sentence
Text
Lemma
POS
Word Count
Punct Count
verbs
articles
nouns
pronouns
adjectives
prepositions
particles
conjunctions
unknowns
adverbs
propers
interjections
load xml Josephus' Contra Apionem with parallel dictionary entry and part of speech tags


> GET /expenses HTTP/1.1
HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Content-Length: 2959
Connection: keep-alive
Server: thin 1.3.1
...
> POST /expenses HTTP/1.1
> Content-Type:
> application/x-www-form-urlencoded
> Content-Length: 39
>
> description=Lunch+with+mom&amount=2.50
HTTP/1.1 302 Found
Location: /expenses
<!DOCTYPE html>

<title>My awesome page</title>

Hello world!

Some stuff
Some stuff
Some stuff
Some stuff
Warning!


Get Connected
Goldman Allstar Gang Final Project
Home
News
Contact
About
Young Coders
"Welcome Newbies"
"Here for returning guys and gals"


Toggle navigation
Already Registered
Sign In
Only students who meet the pre-requisites will be considered for admissions. Click here for AUA's MCAT policy. This application will be subject to a $75 fee
TELL US ABOUT YOURSELF
First Name
First Name
First Name
First Name
First Name
First Name
CREATE YOUR PASSWORD
First Name
First Name
BACK
NEXT


---
layout: post
date: 2009-08-21
time: "09:00:00"
authors: ["Greg Wilson"]
title: The Big Picture
tags: ["Content"]
---
One of the lessons we learned at Los Alamos National Laboratory in the 1990s and early 2000s is that most scientists don't actually want to learn how to program—they want solve scientific problems.To many,programming is a tax they have to pay in order to do their research.To the rest,it's something they really would find interesting,but they have a grant deadline coming up and a paper to finish.
 Partly it's those pesky deadlines again, but it's also often the case that the big picture doesn't make sense until you have first-hand experience with the details. Take abstraction, for instance, or the difference between interface and implementation: if you haven't written or modified software where those ideas saved you time and heartache, no amount of handwaving is going to get the idea across. The problem, of course, is that it's impossible to program well without understanding those bigger concepts.
Software Carpentry therefore has to:
- Give scientists programming skills that have a high likelihood of paying large dividends in the short term.
- Convey the fundamental ideas needed to make sensible decisions about software without explicitly appearing to do so.
Based on our experiences in the last 12 years, the skills that students need are fairly settled:
- Clean coding (both micro-level readability and macro-level modularity)
- Version control
- Process automation for building, testing, and deploying software
- How to package software for distribution and deployment
- Managing information and workflow (from bug trackers to blogs)
- Consuming data:
- Text (line-oriented parsing with regular expressions)
- Hierarchical (XML)
- Binary
- Relational
- Building desktop GUIs and visualizing data
- Basic security: public/private keys, digital signatures, identity management
- Publishing data and providing services on the web
As Karen Reid and others have pointed out, doing all of that properly would earn you at least a minor in Computer Science at most universities. Cramming it into two weeks is simply not possible.
The bigger picture stuff isn't as clear yet, but is starting to come into focus. The buzzword du jour, computational thinking, means different things to different people, but Jon Udell's definition is a good starting point. For him, computational thinking includes:
- Abstraction: ignoring details in order to take advantage of similarities
- A key concept is the difference between interface and implementation
- Querying: understanding how fuzzy matching, Boolean operations, and aggregate/filter dataflow works
- This depends somewhat on understanding how to think in sets
- Structured data: including hierarchical structure, the notion of meta-data (such as tagging and schemas), and so on
- Equally important is understanding that programs work best with structured data, so structure improves findability and automation
- Automation: having the computer do routine tasks so that people don't have to
- Indirection: giving someone a reference to data, rather than a copy of the data, so their view of it is always fresh
- Syndication: publishing data for general use, rather than sending it directly to a restricted set of people
- The inverse is provenance: where did this data come from, and what was done to it?
I would like to add all of the following, though I realize that doing so gets us back into "B.Sc. in a week" problems:
- Name spaces, call stacks, and recursion
- Computational complexity: why some algorithms are intrinsically faster than others
- How data is organized:
- Values vs. references and the notion of aliasing
- By-location structures (lists, vectors, and arrays)
- By-name structures (dictionaries and records)
- By-containment structures (trees)
- By-traversal structures (graphs)
- Programming models:
- Procedural
- Aggregate (whole-array, whole-list, etc.)
- Object-oriented
- Declarative
- Event-driven (which brings in the difference between frameworks and libraries
- Programs as data
- Functions as objects (another form of abstraction)
- Programs that operate on programs (Make, drivers for legacy programs)
- Quality, including:
- What makes good code better than bad code (psychological underpinnings)
- Testing (including the economics of testing)
- Debugging (the scientific method applied to software)
- The difference between verification ("have we done the thing right?") and validation ("have we done the right thing?")
- Continuous improvement via reflection on root causes of errors
- Basic concurrency:
- Transactions vs. race conditions
- Deadlock (much less important in practice)
- Handling failures
- Bricolage: how to find/adapt/combine odds and ends (these days, on the web) to solve a problem
I call on all of this knowledge routinely even when solving trivial problems. This morning, for example, I:
- did a search to find a wiki markup processor I could run from the command line,
- downloaded and installed it,
- changed five lines in the main routine to insert some extra text in its output,
- added a ten-line filter function to overwrite the inserted text with some command-line parameter values, and
- added fourteen lines to a Makefile to turn the wiki text into HTML whenever it's stale.
It took roughly 15 minutes, and will save me hours in the weeks to come. However, it only took 15 minutes because I've spent 29 years mastering the skills and ideas listed earlier. The challenge in creating Version 4.0 of this course will be to figure out how to convey as many of those skills and ideas can be squeezed into two weeks.


Application Programming Interface (API)
Web-based scientific names finding service provides a RESTful API interface.
Using POST Method with JSON payload
/api/v1
with request body in JSON according to the specification.
Using POST Method to Upload Files
It is possible to upload files and get scientific names from their content. In this case API uses 'multipart/form' approach instead of JSON. For example, using curl and verifying data against Catalogue of Life (source #1) and Encyclopedia of Life (source #12):
curl -v -F sources[]=1 -F sources[]=12 -F<EMAIL_ADDRESS>\ https://finder.globalnames.org/api/v1/find
For examples how to write a client, refer to a gnfinder Ruby Gem code.
OpenAPI Schema
Read the GNfinder's OpenAPI documentation to learn about all options and the output schema.


Registration form
First Name:
Last Name:
Date of Birth:
January
February
March
April
May
June
July
August
September
October
November
December
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Gender:
Male
Female
Address:
Validate
Run Animation()


NOTE: The examples on this page require a VR capable device with a pointing device. Without one they won't work. See this article as to why
In the previous article we went over a very simple VR example where we let the user choose things by pointing via looking. In this article we will take it one step further and let the user choose with a pointing device
Three.js makes is relatively easy by providing 2 controller objects in VR
and tries to handle both cases of a single 3DOF controller and two 6DOF
controllers. Each of the controllers are Object3D
objects which give
the orientation and position of that controller. They also provide
selectstart
, select
and selectend
events when the user starts pressing,
is pressing, and stops pressing (ends) the "main" button on the controller.
Starting with the last example from the previous article
let's change the PickHelper
into a ControllerPickHelper
.
Our new implementation will emit a select
event that gives us the object that was picked
so to use it we'll just need to do this.
const pickHelper = new ControllerPickHelper(scene); pickHelper.addEventListener('select', (event) => { event.selectedObject.visible = false; const partnerObject = meshToMeshMap.get(event.selectedObject); partnerObject.visible = true; });
Remember from our previous code meshToMeshMap
maps our boxes and spheres to
each other so if we have one we can look up its partner through meshToMeshMap
so here we're just hiding the selected object and un-hiding its partner.
As for the actual implementation of ControllerPickHelper
, first we need
to add the VR controller objects to the scene and to those add some 3D lines
we can use to display where the user is pointing. We save off both the controllers
and the their lines.
class ControllerPickHelper { constructor(scene) { const pointerGeometry = new THREE.BufferGeometry().setFromPoints([ new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, -1), ]); this.controllers = []; for (let i = 0; i < 2; ++i) { const controller = renderer.xr.getController(i); scene.add(controller); const line = new THREE.Line(pointerGeometry); line.scale.z = 5; controller.add(line); this.controllers.push({controller, line}); } } }
Without doing anything else this alone would give us 1 or 2 lines in the scene showing where the user's pointing devices are and which way they are pointing.
One problem we have though, we don't want have our RayCaster
pick the line itself
so an easy solution is separate the objects we wanted to be able to pick from the
objects we don't by parenting them under another Object3D
.
const scene = new THREE.Scene(); +// object to put pickable objects on so we can easily +// separate them from non-pickable objects +const pickRoot = new THREE.Object3D(); +scene.add(pickRoot); ... function makeInstance(geometry, color, x) { const material = new THREE.MeshPhongMaterial({color}); const cube = new THREE.Mesh(geometry, material); - scene.add(cube); + pickRoot.add(cube); ...
Next let's add some code to pick from the controllers. This is the first time we've picked with something not the camera. In our article on picking the user uses the mouse or finger to pick which means picking comes from the camera into the screen. In the previous article we were picking based on which way the user is looking so again that comes from the camera. This time though we're picking from the position of the controllers so we're not using the camera.
class ControllerPickHelper { constructor(scene) { + this.raycaster = new THREE.Raycaster(); + this.objectToColorMap = new Map(); + this.controllerToObjectMap = new Map(); + this.tempMatrix = new THREE.Matrix4(); const pointerGeometry = new THREE.BufferGeometry().setFromPoints([ new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, -1), ]); this.controllers = []; for (let i = 0; i < 2; ++i) { const controller = renderer.xr.getController(i); scene.add(controller); const line = new THREE.Line(pointerGeometry); line.scale.z = 5; controller.add(line); this.controllers.push({controller, line}); } } + update(pickablesParent, time) { + this.reset(); + for (const {controller, line} of this.controllers) { + // cast a ray through the from the controller + this.tempMatrix.identity().extractRotation(controller.matrixWorld); + this.raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld); + this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(this.tempMatrix); + // get the list of objects the ray intersected + const intersections = this.raycaster.intersectObjects(pickablesParent.children); + if (intersections.length) { + const intersection = intersections[0]; + // make the line touch the object + line.scale.z = intersection.distance; + // pick the first object. It's the closest one + const pickedObject = intersection.object; + // save which object this controller picked + this.controllerToObjectMap.set(controller, pickedObject); + // highlight the object if we haven't already + if (this.objectToColorMap.get(pickedObject) === undefined) { + // save its color + this.objectToColorMap.set(pickedObject, pickedObject.material.emissive.getHex()); + // set its emissive color to flashing red/yellow + pickedObject.material.emissive.setHex((time * 8) % 2 > 1 ? 0xFF2000 : 0xFF0000); + } + } else { + line.scale.z = 5; + } + } + } }
Like before we use a Raycaster
but this time we take the ray from the controller.
Our previous PickHelper
there was only one thing picking but here we have up to 2
controllers, one for each hand. We save off which object each controller is
looking at in controllerToObjectMap
. We also save off the original emissive color in
objectToColorMap
and we make the line long enough to touch whatever it's pointing at.
We need to add some code to reset these settings every frame.
class ControllerPickHelper { ... + _reset() { + // restore the colors + this.objectToColorMap.forEach((color, object) => { + object.material.emissive.setHex(color); + }); + this.objectToColorMap.clear(); + this.controllerToObjectMap.clear(); + } update(pickablesParent, time) { + this._reset(); ... }
Next we want to emit a select
event when the user clicks the controller.
To do that we can extend three.js's EventDispatcher
and then we'll check
when we get a select
event from the controller, then if that controller
is pointing at something we emit what that controller is pointing at
as our own select
event.
-class ControllerPickHelper { +class ControllerPickHelper extends THREE.EventDispatcher { constructor(scene) { + super(); this.raycaster = new THREE.Raycaster(); this.objectToColorMap = new Map(); // object to save color and picked object this.controllerToObjectMap = new Map(); this.tempMatrix = new THREE.Matrix4(); const pointerGeometry = new THREE.BufferGeometry().setFromPoints([ new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, -1), ]); this.controllers = []; for (let i = 0; i < 2; ++i) { const controller = renderer.xr.getController(i); + controller.addEventListener('select', (event) => { + const controller = event.target; + const selectedObject = this.controllerToObjectMap.get(controller); + if (selectedObject) { + this.dispatchEvent({type: 'select', controller, selectedObject}); + } + }); scene.add(controller); const line = new THREE.Line(pointerGeometry); line.scale.z = 5; controller.add(line); this.controllers.push({controller, line}); } } }
All that is left is to call update
in our render loop
function render(time) { ... + pickHelper.update(pickablesParent, time); renderer.render(scene, camera); }
and assuming you have a VR device with a controller you should be able to use the controllers to pick things.
And what if we wanted to be able to move the objects?
That's relatively easy. Let's move our controller 'select' listener code out into a function so we can use it for more than one thing.
class ControllerPickHelper extends THREE.EventDispatcher { constructor(scene) { super(); ... this.controllers = []; + const selectListener = (event) => { + const controller = event.target; + const selectedObject = this.controllerToObjectMap.get(event.target); + if (selectedObject) { + this.dispatchEvent({type: 'select', controller, selectedObject}); + } + }; for (let i = 0; i < 2; ++i) { const controller = renderer.xr.getController(i); - controller.addEventListener('select', (event) => { - const controller = event.target; - const selectedObject = this.controllerToObjectMap.get(event.target); - if (selectedObject) { - this.dispatchEvent({type: 'select', controller, selectedObject}); - } - }); + controller.addEventListener('select', selectListener); ...
Then let's use it for both selectstart
and select
class ControllerPickHelper extends THREE.EventDispatcher { constructor(scene) { super(); ... this.controllers = []; const selectListener = (event) => { const controller = event.target; const selectedObject = this.controllerToObjectMap.get(event.target); if (selectedObject) { - this.dispatchEvent({type: 'select', controller, selectedObject}); + this.dispatchEvent({type: event.type, controller, selectedObject}); } }; for (let i = 0; i < 2; ++i) { const controller = renderer.xr.getController(i); controller.addEventListener('select', selectListener); controller.addEventListener('selectstart', selectListener); ...
and let's also pass on the selectend
event which three.js sends out
when you user lets of the button on the controller.
class ControllerPickHelper extends THREE.EventDispatcher { constructor(scene) { super(); ... this.controllers = []; const selectListener = (event) => { const controller = event.target; const selectedObject = this.controllerToObjectMap.get(event.target); if (selectedObject) { this.dispatchEvent({type: event.type, controller, selectedObject}); } }; + const endListener = (event) => { + const controller = event.target; + this.dispatchEvent({type: event.type, controller}); + }; for (let i = 0; i < 2; ++i) { const controller = renderer.xr.getController(i); controller.addEventListener('select', selectListener); controller.addEventListener('selectstart', selectListener); + controller.addEventListener('selectend', endListener); ...
Now let's change the code so when we get a selectstart
event we'll
remove the selected object from the scene and make it a child of the controller.
This means it will move with the controller. When we get a selectend
event we'll put it back in the scene.
const pickHelper = new ControllerPickHelper(scene); -pickHelper.addEventListener('select', (event) => { - event.selectedObject.visible = false; - const partnerObject = meshToMeshMap.get(event.selectedObject); - partnerObject.visible = true; -}); +const controllerToSelection = new Map(); +pickHelper.addEventListener('selectstart', (event) => { + const {controller, selectedObject} = event; + const existingSelection = controllerToSelection.get(controller); + if (!existingSelection) { + controllerToSelection.set(controller, { + object: selectedObject, + parent: selectedObject.parent, + }); + controller.attach(selectedObject); + } +}); + +pickHelper.addEventListener('selectend', (event) => { + const {controller} = event; + const selection = controllerToSelection.get(controller); + if (selection) { + controllerToSelection.delete(controller); + selection.parent.attach(selection.object); + } +});
When an object is selected we save off that object and its original parent. When the user is done we can put the object back.
We use the Object3D.attach
to re-parent
the selected objects. These functions let us change the parent
of an object without changing its orientation and position in the
scene.
And with that we should be able to move the objects around with a 6DOF controller or at least change their orientation with a 3DOF controller
To be honest I'm not 100% sure this ControllerPickHelper
is
the best way to organize the code but it's useful to demonstrating
the various parts of getting something simple working in VR
in three.js


Postmortem of today's 8min indexing downtime
29 Jan 2014Today (Jan 29) at 9:30pm UTC, our service experienced an 8 minute partial outage during which we have rejected many write operations sent to the indexing API (exactly 2841 calls). We call it "partial" as all search queries have been honored without any problem. For end-users, there was no visible problem.
Transparency is in our DNA: this outage is visible on our status page (status.algolia.com) but we also wanted to share with you all the details of the outage and more importantly the details of our response.
The alert
This morning I fixed a rare bug in indexing complex hierarchical objects. This fix successfully passed all the tests after development. We have 6000+ unit tests and asserts, and 200+ non regression tests. So I felt confident when I entered the deploy password in our automatic deployment script.
A few seconds after, I started to receive a lot of text messages on my cellphone.
We developed several embedded probes to detect all kinds of problems and alert us using Twilio and Hipchat APIs. They detect for example:
- a process that restart
- an unusually long query
- a write failure
- a low memory warning
- a low disk-free warning
- etc.
In case embedded probes can't run, other external probes run once a minute from an independent datacenter (Google App Engine). These also automatically update our status page when a problem impacts the quality of service.
Our indexing processes were crash looping. I immediately decided to rollback to the previous version.
The rollback
Until today, our standard rollback process was to revert the commit, launch the recompile and finally deploy. This is long, very long when your know that you have an outage in production. The rollback took about 5 minutes in total out of the 8 minutes.
How we will avoid this situation in the future
Even if the outage was on a relatively small period of time, we still believe it was too long. To make sure this will not happen again:
- We have added a very fast rollback process in the way of a simple press button like the one we use to deploy. An automatic deploy is nice, but an automatic rollback is actually more critical when needed!
- Starting now, we will deploy new versions of the service on clusters hosting community projects such as Hacker News Search or Twitter handle search, before pushing the update on clusters hosting paying customers. Having real traffic is key to detect some types of errors. Unit-tests & non-regression tests cannot catch everything.
- And of course we added non-regression tests for this specific error.
Conclusion
Having all these probes in our infrastructure was key to detect today's problem and react quickly. In real conditions, it proved not to be enough. In a few hours we have implemented a much better way to handle this kind of situation. The quality of our service is our top priority. Thank you for your support!


{{define "content"}}
Greetings. {{.Sender}} has invited you to create an account on the God Game Engine website.
If this is in error, feel free to ignore this message or contact the admin at<EMAIL_ADDRESS>Otherwise, just click here to go to the website and register.
If the above link does not work, copy and past the URL bellow into your browser's address bar.
https://gge.cagox.net/users/invite/{{.Token}}
{{end}}


Open Source Kitchen Helps You Watch What You Eat
by Gerrit CoetzeeEvery appliance business wants to be the one that invents the patented, license-able, and profitable standard that all the other companies have to use. Open Source Kitchen wants to beat them to it.
Every beginning standard needs a test case, and OSK’s is a simple one. A bowl that tracks what you eat. While a simple concept, the way in which the data is shared, tracked, logged, and communicated is the real goal.
The current demo uses a Nvidia Jetson Nano as its processing center. This $100 US board packs a bit of a punch in its weight class. It processes the video from a camera held above the bowl of fruit, suspended by a scale in a squirrel shaped hangar, determining the calories in and calories out.
It’s an interesting idea. One wonders how the IoT boom might have played out if there had been a widespread standard ready to go before people started walling their gardens.


repl.it
Home
|
Mission
|
Set Goals
|
Create Leaf
Share your Actions, Spread your Impact.
+ Create New Post +
Display name:
Upload a photo:
Post text:
Hashtags:


Simpsons DB
Product Info Form
Title
Category
Toys
Food and Drinks
Products
Albums
Alcohol
Electronics
Grooming Products
Krusty Merchandise
Description
Details
Submit Form