Proximity supports a heterogeneous database structure, in which objects and links can have variable numbers of attributes, including none. For example, if a database contains information about movies, some movie objects might have a value for a Genre attribute while other movie objects might omit this attribute. QGraph lets you test whether an object or link has a value for a given attribute by using an existence condition.
The graph in Figure 3.5 represents part of a database containing information about books and authors. Because some authors write books under pseudonyms, we represent that information with a WrittenAs attribute on the link connecting authors and books they’ve written. As shown below, the author Ed McBain has written books both under his own name as well as under multiple pseudonyms.
The query in Figure 3.6 finds author-book pairs where the author wrote the book under an assumed name. We use an existence condition to capture the fact that the link must have a WrittenAs attribute but that we do not care about its value.
The results of executing the query on this database fragment are shown in Figure 3.7.
Existence conditions test only whether the matching database
entity does or does not have the specified attribute. The attribute’s
value is not specified in the query and is not examined when evaluating
the query. The query returns all matching subgraphs
where the author-of link has a
WrittenAs attribute, regardless of that
attribute’s value.


Hello, I beg your pardon if my question is trivial. When exploring the search tree using Gist, I would like to display the variable considered at a node and the assignment performed. How can I do this ? The documentation suggests the implementation of an inspector but I don't know how to do. Thanks in advance. Benoît


{% extends 'contents/_base.html' %}
{% load static %}
{% block title %}Privacy Policy of PyCon Taiwan{% endblock title %}
{% block content %}
Privacy Policy of PyCon Taiwan
First, we would like to thank you for joining us in PyCon Taiwan (hereafter referred to as “PyCon TW”). We are going to ask for your permission to collect and to use your personal information recorded in the registration form. We value your privacy and we would follow the terms and conditions as set out below while collecting and using your personal information.
For the purposes of organizing the event and providing better services, we are going to collect your personal information on the registration page all according to the Personal Information Protection Act by The specific purpose and the classification of personal information of the Personal Information Protection Act 130. Meeting Management.
The purposes will be including but not limited to:
While registering for PyCon TW, we will obtain information about you by asking you to fill in the form on the registration page. The information that we gathered will only be used to provide services to you.
We would preserve the personal information that you provided until you request us to cease using it or PyCon TW ceases operation. We will NEVER sell, exchange, lease or otherwise expose your personal information to third party organizations or individuals, with the exception that:
The personal informations that we are asking for includes but not limited to: full name and nickname, gender, email address, mobile number, occupation, belonging organization (company), contact address, ... etc. This is done according to The specific purpose and the classification of personal information of the Personal Information Protection Act by its Code 001 Type for identifying individuals.
You could exercise your rights (which would be mentioned below) of the personal information by writing to us (either by paper or by electronic means)
We would keep it and change your request all according to Taiwan’s legal obligations. If you would like to have your personal information modified or updated, you could do it on the registration page or email us.
You may request us to cease the use of your personal information by notifying us through mail and we shall refrain from using your personal information from then onwards. You are free to provide as much or as little information as you like. However, in the case that the provided information is erroneous, insufficient, or that you request us to cease the usage of your data, then for the proper operation of the event, we may reject your registration and participation.
If you have any questions regarding the gathering and usage of your personal information, please feel free to contact us at<EMAIL_ADDRESS>The purpose of collecting personal information in accordance with the Personal Data Protection Law and epidemic prevention and control requirements is to best respond and ensure health security for all attendees in COVID-19 outbreak. It is necessary to collect, manage, and use relevant personal information. Please read below for details.
PyCon TW 2020 collects personal data of attendees for the purpose of contact tracing during the outbreak of COVID-19. All collected information will be deleted after 28 days. attendees’ access in each venue will be recorded for epidemic control measures. We will inform everyone that if any suspected COVID-19 and provide such information for CECC for the purpose of preventing spread of COVID-19 and tracing contacts.
This document is licensed under a Attribution-ShareAlike 3.0 Taiwan license.
The Privacy Policy of PyCon TW will be effective July 1th, 2020.
However, due to the rapidly changing social and legal environment and the continual advancement in technology, we reserve the right to modify this privacy policy at any time, and will announce any update when available.
Thank you.
{% endblock content %}


In a small, desolate corner of the desert, there isn't much for an average teenager to do. I had come to realize this and I had been analyzing the world around me - what did my life mean, who were my true friends... ect... ect... On this particular night, when there were no parties, nothing good at the movies, and definately no guys to be dating, I decided to treat myself to a special trip, besides my normal practice of driving around smoking bud and contemplating the mysterious of the universe while listening to music. So I met up with a friend who sold me approximately 5 grams of shrooms. One of my friends who was present at the time said that just looking at the shroom-filled cellephane 'gave him nightmares.' Indeed, they were fine shrooms, a white color with blue streaks throughout. There were several caps and many twisty, curly parts.
My parents were going out of town for the night, so on my way home from purchasing the shrooms I munched on about 2 grams to get my trip started, but where I could still funtion enough to tell my parents goodbye. After they had left I still wasn't feeling any of the effects so I munched down on the remaining 3 grams and decided to kick back for the night. While coming up I watch a fairly corny movie, 'Coyote Ugly' (trust me, not my typical shrooming flick of choice), but I got a lot of humor out of it, and noticed all the really cheesy parts, but appreciated them at the same time. As the shrooms started to take effect I turned my room into a tripping palace. I turned on the black lights, lit some incence, and popped in Incubus's (some of the best shrooming music, in my opinion) 'Make Yourself' and 'The Fungus Amoung Us.'
For about an hour to an hour and a half I kinda just lounged around, tripping out on how the music was intensifying and the color change and visuals and such. During this time I was also contemplating how I could make my life better, and how I felt like I had some much more to offer the world than this little dirt town could offer me. I also rolled two joints :)
After about an hour and a half of tripping two of my friends stopped by, with a bottle of Parot Bay and a 40 oz. of Mickey's for me. We drank, smoked bud and cigarettes, drank some more, and laughed. My friends were a little startled by my trip, after all, they were drunk, and had never really been around a shroomer before. They kept telling me how dilated my eyes were and I kept telling them how happy I was that they were there for me, when so many of my other friends had left, and how I could have fun without those other friends (many of my old friends had left for college and I was kind of in the middle of an identity crisis about it). The drinking and smoking only added to the high, and I started to speak in whispers and comment on the rainbows that were flowing from my friend's mouths, that's when they decided to leave.
When they left I decided to spend some time with nature and went outside and just lounged around the yard and then went for a short walk around the block, just to take in the beauty of the place that I loved, but for so many reasons felt like I hated. I also smoked another joint. The sky was beautiful that night, with many colored lights streaking the sky. When I got home I was really tripping (and getting cold) so I cranked up the music and let the trip flow. I started to remove all of my clothing, almost a 'spiritual striptease' because I wasn't exactly being seductive, I was admiring my own beauty of the temple of my body and appreciating it's every line and curve. I was peeling away the tight restrictive 'uniform' or the front that I put on everyday, and became bare, became me.
I stared in the mirror for a long time (for one I always trip on how my eyes look when I'm shrooming) and then started dancing around my room. I was dancing in the most fluid fashion, simply letting my body flow. I felt unrestrained, I felt that I was letting my spirit free from being bound down so long. I had also lit incense all around and the smoke was totally tripping me out. I could see it hovering just at eye level with me, it was an extremely cool visual. One startling experience, as 'The Fungus Among Us' CD came to an end, my three disc changer went on to the next disc. An unusual noise, a noise that surprised me, yet excited me started, and an unfamiliar CD started to play, but the words and the music sounded so beautiful, I could definately relate. This might sound corny, but the next day I discovered I had been listening to the Stroke 9 'Nasty Little Thoughts' CD. This might sound cheesy to some, but trust me, I had a totally religious experience over it.
By this time I was having some bad-ass open eye visuals. I could hardly see my room any longer, it was if a screen of red and blue swirly dots had covered my eyes. I layed down and covered up and had a long series of open/closed eye visuals, and then slowly drifted into a peaceful sleep. I wasn't 'hung over' or anything the next morning, in fact, after going to sleep at 5 in the morning after a 6 hour trip, I woke at 8 AM, ready to start my day in the beautiful new world that I had discovered the night before. Emotionally, I felt pretty happy, pretty satisfied. I felt that I had found something beautiful within myself, and even if no one else knew it was there, I knew it, and I had seen it, and that comforted me.
 I found myself missing old friends and lovers and wishing that I could still share times as wonderful as the night before with them, but for the most part I was content and very satisfied with the trip....
As Incubus would say... I made myself...
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.


Please adjust the grid approximately to your stash tab layout. You need to do that, because every player use different screen resolution, size and settings. But, don't worry you'll have to do this only once.
Tab "{{currentOffer.itemLocation.stashTabName}}"Left: {{currentOffer.itemLocation.left}}, Top: {{currentOffer.itemLocation.top}}


{% extends "base.html" %}
{% import "macros/element.html" as Element %}
{% import "macros/form.html" as Form %}
{% set title = 'Confirmation' %}
{% block page_title %}{{ title }} - {{ super() }}{% endblock %}
{% set is_callback = session.stored.contact_type == 'callback' %}
{% set is_thirdparty = session.stored.contact_type == 'thirdparty' %}
{% block sidebar %}{% endblock %}
{% block inner_content %}
{{ _('Your reference number is') }}
{{ session.stored.case_ref }}
{{ _('You can now call CLA on') }} 0345 345 4 345.
{% if session.stored.callback_requested %}
{{ _('We will call you back') }}
{% else %}
{{ _('Your details have been submitted') }}
{% endif %}
{% trans %}Please quote your reference number when you call. Find out about
call charges.{% endtrans %}
{% trans %}If you have a court hearing date it is important that you get advice as soon as possible. You may be able to get last-minute help on the day of the hearing from an adviser in the court building.{% endtrans %}
{% endif %}{% if is_thirdparty %} {% trans %}Your details have been submitted and an operator will try to call the person you nominated back around the time you requested.{% endtrans %} {% else %} {% trans %}Your details have been submitted and an operator will try to call you back around the time you requested.{% endtrans %} {% endif %} ({{ session.stored.callback_time|datetime('full') }}). {% trans %}When a CLA operator calls, the call will come from an anonymous number.{% endtrans %}
{% endif %} {% if session.stored.category == 'violence' %}{% trans %}If you need to urgently protect yourself or your family you should try and get advice as soon as possible.{% endtrans %}
{% endif %}{% if is_thirdparty %} {% trans %}The first person they speak to will be an operator who will ask about your problem and your financial circumstances.{% endtrans %} {% else %} {% trans %}The first person you speak to will be an operator who will ask about your problem and your financial circumstances.{% endtrans %} {% endif %}
{% if is_thirdparty %} {% trans %}If it looks like you might qualify for legal aid they’ll be put through to a specialist adviser, who will make the final decision on your case.{% endtrans %} {% else %} {% trans %}If it looks like you might qualify for legal aid you’ll be put through to a specialist adviser, who will make the final decision on your case.{% endtrans %} {% endif %}
{% if session.stored.category == 'violence' %}{% trans %}Please be aware that the specialist adviser will need evidence of the domestic violence before they can make a decision on your case.{% endtrans %} {{ _('Find out what you can use as evidence') }}.
{% elif session.stored.category == 'family' %}{% trans %}If your case involves domestic abuse or violence, the specialist adviser will need evidence of this before they can make a decision on your case.{% endtrans %} {{ _('Find out what you can use as evidence') }}.
{% endif %} {% if session.stored.category == 'violence' or session.stored.category == 'family' %}{% trans %}You will also need to provide evidence of your financial circumstances. Your specialist adviser will explain what is needed.{% endtrans %}
{% else %}{% trans %}You will need to provide evidence of your financial circumstances and maybe your problem. Your specialist adviser will explain what is needed.{% endtrans %}
{% endif %}{% trans %} If your specialist adviser thinks you need to speak to someone in person or have someone represent you in court, they will organise this. {% endtrans %}
{% trans %}If CLA can’t help you, we’ll always suggest where else you might get help.{% endtrans %}
{% trans %}If we can do anything to make it easier for you to communicate with us, please tell the operator.{% endtrans %}
{% trans privacy_link=url_for('base.privacy') %} Protecting your personal data and your privacy is important to us. Read the full Civil Legal Advice Privacy Statement. {% endtrans %}
{% if session.stored.callback_requested %}{% trans %}If you miss the call or you need advice urgently, you can call us on 0345 345 4 345. Find out about call charges.{% endtrans %}
{% endif %} {{ Element.satisfaction_survey_prompt() }} {% endblock %} {% block javascripts %} {{ super() }} {% include '_ga-outcome-pageview.html' %} {% endblock %}


Match Play. 0-0 to 7. Should Red double? If doubled, should White take?
pips Red=113 White=117
(CorrectAnswer= 0/0, ErrorScore= 0)
The position is certainly volatile and Red has market losing sequences. He also wins a lot of gammons, nearly a third of his wins are gammons.
However, the race is close and one good six for White will see him with the advantage. Red may also have trouble freeing those two back checkers.
This all adds up to a clear double and a clear take.
However, the race is close and one good six for White will see him with the advantage. Red may also have trouble freeing those two back checkers.
This all adds up to a clear double and a clear take.
Cube analysis 2-ply cubeless equity +0.484 (Money: +0.481) 0.656 0.231 0.005 - 0.344 0.066 0.002 Cubeful equities: 1. Double, take +0.742 2. Double, pass +1.000 (+0.258) 3. No double +0.621 (-0.121) Proper cube action: Double, take


Immigration to Sweden
Instructions
Explore different data on immigrants in Sweden. In the graphs below we present country specific data on all immigrants from these countries.
You can click the countries and see relevant facts relating to migration from this country to Sweden. For certain data you will find personal stories behind the data.
Definitions
International migrant: A person who is living in a country other than his or her country of birth.
Internal migrant: A person who is living in the same country as his or her country of birth but at a different location in this country.
Refugee: Person fleeing armed conflict or persecution.
Migrant: A person who choose to move not because of a direct threat of persecution or death, but mainly to improve their lives by finding work, or in some cases for education, family reunion, or other reasons.
Source:


Toggle navigation
Bill Smith - Illuminati
Home
Music
Tickets
Merchandise
Collapse
Hi
Open Modal
×
Music Samples
Time Lapse
An html5-capable browser is required to play this audio.
Unity
An html5-capable browser is required to play this audio.
Nova
An html5-capable browser is required to play this audio.
Titanium
An html5-capable browser is required to play this audio.
Royals
An html5-capable browser is required to play this audio.


Provides functions for working with multi-state modelling, such as efficient simulation routines for estimating transition probabilities and length of stay. It is designed as an extension to multi-state modelling capabilities provided with the 'flexsurv' package (see Jackson (2016) <doi:10.18637/jss.v070.i08>).
| Version: | 1.2.0 |
| Imports: | Rcpp (≥ 0.12.10), data.table, dplyr, magrittr, networkD3, survival, tidyr |
| LinkingTo: | Rcpp |
| Suggests: | flexsurv, mstate, microbenchmark, rmarkdown, knitr, testthat, covr |
| Published: | 2018-07-21 |
| Author: | Stuart Lacy |
| Maintainer: | Stuart Lacy <stuart.lacy at gmail.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | https://github.com/stulacy/multistateutils |
| NeedsCompilation: | yes |
| Materials: | README NEWS |
| CRAN checks: | multistateutils results |
| Reference manual: | multistateutils.pdf |
| Vignettes: |
Vignette Title |
| Package source: | multistateutils_1.2.0.tar.gz |
| Windows binaries: | r-devel: multistateutils_1.2.0.zip, r-release: multistateutils_1.2.0.zip, r-oldrel: multistateutils_1.2.0.zip |
| OS X binaries: | r-release: not available, r-oldrel: multistateutils_1.2.0.tgz |
| Old sources: | multistateutils archive |
Please use the canonical form https://CRAN.R-project.org/package=multistateutils to link to this page.


Born in Wyoming in 1985, I currently live in Portland, OR. The northwest has unparalleled beauty and I love getting out of the city and into the outdoors. Not long after moving to Oregon I started working professionally as a sound engineer. One job led to the next and eventually I started working directly for bands, accompanying them on tour and running live sound for their performance. For the last 10 years I've toured much of the US, Canada and Europe working events in small clubs to massive outdoor festivals. I have made some many great friends and partners over the years and have grown tremendously while out on the road. The time has come however to diversify my skills and explore more career opportunities in the tech industry.
Music - I love listening, playing as well as performing and attending shows! While I've been a drummer most of my life, I'm also completely obsessed with synthesizers.
The Outdoors - I love getting out of town whenever possible and heading out to hike or camp near amazing lakes and rivers.
Computers - Since I was young I've always been interested in how computers work and what you can accomplish with them.
Electronics - Soldering up a new synthesizer kit is one of my favorite things to do.
Boardgames - It is the golden age of table top gaming and I couldn't be more excited. There are so many creative and fun games available these days.
Drawing - I've always loved to draw and have always been fascinated by shapes and geometry. Lately creating geometric drawings using a compass has been a lot of fun.
Audio - Spending over a decade working in the field has given me many skills when it comes to managing audio systems and mixing both recorded and live audio.
Cooking - When I was young I started washing dishes at a restaurant then I continued to work in the service industry and grow my kitchen skills for many years after that.
Problem Solving - I pride myself on the ability to keep calm and try to work through problems when the pressure is on.
- Using HTML, CSS and incorperating bootstrap my partner and I built a replica of the wikipedia homepage
- It's not much, but its a start! My first endeavor into making a webpage using HTML and CSS. Don't laugh!
- A fun little page made to exercise some capabilites of HTML and CSS
- This project was our first experience incorperating Bootstrap into our page while using HTML and CSS
"It helped so much to have you seeing things that I wasn't, and you've got a great and clear communication style."


Home
Web Form
Workbook Upload
License
Help
Complete upload the Golden Gate Reaction workbook. Please wait 60 seconds for results.
Workbook Download


22 January 2009 - The Ministry of Health of Indonesia has announced two new confirmed cases of human infection with the H5N1 avian influenza virus. A 29-year-old female from Tangerang District, Banten Province developed symptoms on 11 December 2008, was hospitalized on 13 December and died on 16 December. The investigation indicated that she visited a wet market to buy fresh produce, including chicken meat, on a daily basis. Household contacts were placed under medical observation, where none developed illness.
The second case, a 5-year-old female from Bekasi City, West Java Province developed symptoms on 23 December 2008, was hospitalized on 27 Dec 2008 and died on 2 January 2009. The investigation indicated that she visited a wet market to buy chicken meat and eggs two days prior to symptom onset. Contacts were placed under medical observation, where none developed illness.
Laboratory tests confirmed the presence of the H5N1 avian influenza virus in both cases.
Of the 141 cases confirmed to date in Indonesia, 115 have been fatal.


Hi, I'm Bhautik Bharadava
Full Stack Developer
I spend my time to learn new technologies. Mostly you will find me tweaking on codepen creating some awesome designs. Well I work with HTML5,CSS3,SCSS,React,Redux,Laravel.Have also learned Webpack and AWS services.


Last name:
Number:
SUBMIT
Looking for away jerseys? Click
here.
Looking for more jerseys? Click
here.
Mobile Download Link


waveslim: Basic wavelet routines for one-, two- and three-dimensional
signal processing
Basic wavelet routines for time series (1D), image (2D)
and array (3D) analysis. The code provided here is based on
wavelet methodology developed in Percival and Walden (2000);
Gencay, Selcuk and Whitcher (2001); the dual-tree complex wavelet
transform (DTCWT) from Kingsbury (1999, 2001) as implemented by
Selesnick; and Hilbert wavelet pairs (Selesnick 2001, 2002). All
figures in chapters 4-7 of GSW (2001) are reproducible using this
package and R code available at the book website(s) below.
Downloads:
Reverse dependencies:
| Reverse depends: |
adwave, brainwaver, RHRV, W2CWM2C, wavemulcor, wmlf |
| Reverse imports: |
EFDR, iWISA, NSM3, SpatialVx, spind, tswge |
| Reverse suggests: |
ade4, dplR, GENEAclassify, subniche |
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=waveslim
to link to this page.


|
libcoap
4.3.0
|
The structure that holds the PKI ASN.1 (DER) definitions. More...
#include <coap_dtls.h>
Data Fields | |
| const uint8_t * | ca_cert |
| ASN1 (DER) Common CA Cert. More... | |
| const uint8_t * | public_cert |
| ASN1 (DER) Public Cert, or Public Key if RPK. More... | |
| const uint8_t * | private_key |
| ASN1 (DER) Private Key. More... | |
| size_t | ca_cert_len |
| ASN1 CA Cert length. More... | |
| size_t | public_cert_len |
| ASN1 Public Cert length. More... | |
| size_t | private_key_len |
| ASN1 Private Key length. More... | |
| coap_asn1_privatekey_type_t | private_key_type |
| Private Key Type. More... | |
The structure that holds the PKI ASN.1 (DER) definitions.
Definition at line 187 of file coap_dtls.h.
| const uint8_t* coap_pki_key_asn1_t::ca_cert |
ASN1 (DER) Common CA Cert.
Definition at line 188 of file coap_dtls.h.
| size_t coap_pki_key_asn1_t::ca_cert_len |
ASN1 CA Cert length.
Definition at line 191 of file coap_dtls.h.
| const uint8_t* coap_pki_key_asn1_t::private_key |
ASN1 (DER) Private Key.
Definition at line 190 of file coap_dtls.h.
| size_t coap_pki_key_asn1_t::private_key_len |
ASN1 Private Key length.
Definition at line 193 of file coap_dtls.h.
| coap_asn1_privatekey_type_t coap_pki_key_asn1_t::private_key_type |
Private Key Type.
Definition at line 194 of file coap_dtls.h.
| const uint8_t* coap_pki_key_asn1_t::public_cert |
ASN1 (DER) Public Cert, or Public Key if RPK.
Definition at line 189 of file coap_dtls.h.
| size_t coap_pki_key_asn1_t::public_cert_len |
ASN1 Public Cert length.
Definition at line 192 of file coap_dtls.h.


C and C++ development lacks a fundamental tool: the package manager. Adding a new library to your project which you've just found on GitHub should be no more than copying its URL into your project file. Managing the master project of your application which links to 10-20 in-house and third-party dependencies should not cost more than a few minutes of your precious development time.
There are great initiatives, like biicode, CPM, fips and Hunter (these are the CMake-based ones I'm aware of). I'd like to present you yet another tool, Cake, which is based on CMake and git and which differs from those approaches in the following ways:
add_subdirectory
--with-sqlite
switch in autoconfig)And the what it does not do:
I'd like to show you how to use Cake and encourage you to download it and try it on your own projects. I'd also like to invite developers to improve Cake with new features.
As a quick demonstration, the CMakeLists.txt of a project using libpng looks like this:
cmake_minimum_required(VERSION 3.1)
project(pngtest)
include(${CAKE_ROOT}/Cake.cmake)
cake_find_package(PNG REQUIRED URL git://git.code.sf.net/p/libpng/code) # the official libpng repo
include_directories(${PNG_INCLUDE_DIRS})
add_definitions(${PNG_DEFINITIONS})
add_executable(pngtest main.cpp)
target_link_libraries(pngtest ${PNG_LIBRARIES})
The cake_find_package()
macro clones, builds and installs libpng and its dependency, zlib, in configure-time and calls find_package(PNG)
.
The package manager is a collection of CMake scripts. The repository can be found at https://github.com/tamaskenez/cake. It contains a CMake module which can be downloaded/included in your CMakeLists.txt files. It provides 3 CMake functions: cake_pkg
, cake_find_package
, cake_add_subdirectory
and two helper shell commands: cake
and cakepkg
.
Let's see the basic operations you can do with Cake:
The recommended way to install packages is to call Cake commands from your project's CMakeLists.txt. However in certain scenarios you may prefer to install the before configuring your project with CMake. Cake provides a shell command cakepkg
, to download and install packages manually or in an init script of your repository.
Let's use the cakepkg
to install zlib:
cakepkg INSTALL URL https://github.com/madler/zlib.git # official zlib repo
This command clones the zlib repository then builds and installs it with CMake. The location of the local copy of the zlib repo and the build and install directories are controlled by Cake's configuration variables, more about these later.
You can control the details of the git-clone operation using the URL query string:
cakepkg INSTALL URL https://github.com/madler/zlib.git?branch=develop&depth=1
The query items are parsed by Cake and forwarded to git-clone.
You can also forward variable definitions to the cmake
command which builds the library:
cakepkg INSTALL URL https://github.com/madler/zlib.git?-DAMD64=1
This is similar to the --with-*
flags feature of autoconf.
A package manager's main feature is to fetch and install the dependencies recursively. This command which install libpng, which is dependent on zlib:
cakepkg INSTALL URL git://git.code.sf.net/p/libpng/code # official libpng repo
This command clones the libpng repository, discovers that it is dependent on zlib, so clones that one, too. Then installs zlib and then libpng.
How does Cake know libpng is dependent on zlib? There are three methods to specify this.
cake_pkg_db.cmake
in the root of the Cake installation.cake-depends.cmake
in the root of the library's repository, which installs the required dependencies.find_package()
commands in your library's CMakeLists.txt with cake_find_package(... URL ...)
calls.In case of libpng we need to use the first method so we can use the official, unmodified libpng repository. We'll describe all three methods in detail later.
This is the scenario already shown in the introduction:
cmake_minimum_required(VERSION 3.1)
project(pngtest)
include(${CAKE_ROOT}/Cake.cmake)
cake_find_package(PNG REQUIRED URL git://git.code.sf.net/p/libpng/code) # the official libpng repo
include_directories(${PNG_INCLUDE_DIRS})
add_definitions(${PNG_DEFINITIONS})
add_executable(pngtest main.cpp)
target_link_libraries(pngtest ${PNG_LIBRARIES})
The cake_find_package()
macro downloads and installs libpng and its dependency, zlib, in configure-time. Of course, if you call cmake-configure the second time, git-clone will be skipped. Also, Cake stores the SHA1 commit-id of the last successful builds of zlib and libpng. If the repositories' HEADs are still on those commits no build will be triggered, the command will take very little time..
Note that you only need to replace find_package
with cake_find_package
in your main project. Neither the libpng's CMakeLists.txt nor the FindPNG.cmake module (which calls find_package(ZLIB...)
) have to be changed.
After the cloning/building phase the cake_find_package
command calls the usual find_package()
with rest of the arguments. You may object that it would be a cleaner API design to provide a Cake command which performs the clone/build/install phase and you would call find_package
explicitly:
cake_pkg(INSTALL URL git://git.code.sf.net/p/libpng/code) # the official libpng repo
find_package(PNG REQUIRED)
The cake_pkg
actually exists and this code does work. However, using cake_find_package
is still better in some cases:
Typically use want to use a library as an external dependency (built in its own source tree) when you're not modifying it. On the other hand, when your project is broken down into libraries you're working on it's more convenient to add them as subdirectories into a master project.
When using library 'A' in library/executable 'B' you don't want to care about the fact whether 'A' comes from a separate source tree or built in the same master project as 'B'. You will just need to call cake_find_package(A URL ...)
in the CMakeLists.txt of project 'B' and it will work in both cases. This is demonstrated in the next example:
Add a package as a subproject
When you're using dependencies you need to edit and debug it's much more convenient if you add them as subprojects with the CMake add_subdirectory
command.
The tricky part to add a package as a subproject is, as opposed to an external project, that it won't be installed before your main project calls find_package
for it. Moreover, we would like to use the package's headers from their original location in the source tree and not from their install location.
Fortunately CMake has a solution for these problems. There are two things to keep in mind:
add_include_directories
, add_definitions
commands, the dependent package must use the target_*
command family to describe these properties (target_include_directories
, target_compiler_definitions
, target_compile_options
, target_link_libraries
, target_compile_features
). It also may need to use the target_include_directories
command's BUILD_INTERFACE
/INSTALL_INTERFACE
generator expressions to allow the headers to be used from their original location in the source tree.Let's see the CMakeLists.txt of a project which includes a package optionally as a subdirectory:
cmake_minimum_required(VERSION 3.1)
project(subprojtest)
include(${CAKE_ROOT}/Cake.cmake)
option(ADD_AS_SUBPROJECT TRUE)
if(ADD_AS_SUBPROJECT)
cake_add_subdirectory(subprojlib URL git://github.com/tamaskenez/cake-sample-subprojlib.git?depth=1)
endif()
cake_find_package(subprojlib REQUIRED
URL git://github.com/tamaskenez/cake-sample-subprojlib.git?depth=1)
target_link_libraries(subprojtest subprojlib)
Depending on the value of ADD_AS_SUBPROJECT
this CMakeLists.txt will add subprojlib either as an external dependency (cloned and installed in configuration-time) or as a CMake subdirectory:
ADD_AS_SUBPROJECT
is FALSE
this example works just like the previous one, except that we expect subprojlib to provide an import library. So instead of
include_directories(${subprojlib_INCLUDE_DIRS}) add_definitions(${subprojlib_DEFINITIONS}) target_link_libraries(subprojtest ${subprojlib_LIBRARIES})
it's sufficient to call only
target_link_libraries(subprojtest subprojlib)
If ADD_AS_SUBPROJECT
is TRUE
then cake_add_subdirectory(subprojlib ...)
clones the subprojlib into the specified subdirectory and calls the CMake add_subdirectory
command.
Later, the cake_find_package(subprojlib ...)
detects that subprojlib has already been added as a subdirectory and does not attempt to clone it again and neither it calls find_package
.
Of course, if the cake_find_package(subprojlib)
is in the same master CMakeLists.txt as the corresponding cake_add_subdirectory(subprojlib)
command you don't really need to use cake_find_package
at all since it will be a no-op. But usually the cake_add_subdirectory
calls are in the master project and all cake_find_package
calls are in the independent subprojects.
As we said earlier, there are three methods to specify the dependencies of a package.
This is the option we used with libpng. The Cake repository contains a file cake-depends-db.cmake
which defines a package dependency database. The line which describes libpng's dependency, zlib is:
cake_depends_db_add(URL git://git.code.sf.net/p/libpng/code CODE "cake_pkg(INSTALL URL https://github.com/madler/zlib.git?depth=1)")
The command cake_depends_db_add
adds an entry to the database for the libpng repository. It assigns a code which will be invoked before building libpng:
cake_pkg(INSTALL URL https://github.com/madler/zlib.git?depth=1)
Of course the code can be more complex as we can see in the next section:
In certain cases you can add a file to the library's repository but does not want to mess with its CMakeLists.txt (so it can be still be built without Cake). In this case you can add a file cake-depends.cmake
into the root of the library's repository which contains the same dependency-code as above. For example, if we choose to add cake-depends.cmake
to the libpng repository:
# git.code.sf.net/p/libpng/code/cake-depends.cmake cake_pkg(INSTALL URL https://github.com/madler/zlib.git?depth=1)
These dependency-code receives the build configuration variables you specify in the query part of the package URL. For example, in case of a hypothetical library which has an optional SQLite dependency:
cake_find_package(mylib URL https://github.com/myaccount/mylib?MYLIB_WITH_SQLITE=1)
The cake-depends.cmake
dependency-code of mylib could be this:
# github.com/myaccount/mylib/cake-depends.cmake if(MYLIB_WITH_SQLITE) cake_pkg(INSTALL URL https://github.com/myaccount/sqlite-cmake) endif()
The CMakeLists.txt of mylib would use the plain find_package
and would not depend on Cake:
# github.com/myaccount/mylib/CMakeLists.txt ... if(MYLIB_WITH_SQLITE) find_package(SQLite REQUIRED) add_definitions(-DHAVE_SQLITE) endif() ...
cake_find_package
If you don't mind modifying the library's CMakeLists.txt and that it will depend on Cake, the simplest and recommended method is to use cake_find_package
instead of find_package
. In this case neither you need an entry in code-depends-db.cmake
nor you need to add cake-depends.cmake
(which just duplicates the references to your dependencies). The CMakeLists.txt of the mylib example above would look like this:
# https://github.com/myaccount/mylib/CMakeLists.txt ... include(${CAKE_ROOT}/Cake.cmake) ... if(MYLIB_WITH_SQLITE) cake_find_package(SQLite REQUIRED URL https://github.com/myaccount/sqlite-cmake) add_definitions(-DHAVE_SQLITE) endif() ...
When you install a package with cakepkg
(or cake_pkg
, cake_find_package
), Cake eventually calls the cmake
command to configure, build and install the package. The parameters Cake passes to cmake
can be controlled by the Cake configuration variables: CAKE_PKG_CMAKE_ARGS
, CAKE_PKG_CMAKE_NATIVE_TOOL_ARGS
, and CAKE_PKG_CONFIGURATION_TYPES
. You can set them in the shell environment or in your CMakeLists.txt.
CAKE_PKG_CMAKE_ARGS
is the most important one. This variable contains the cmake
's command line options the package will be configured with. It usually contains a -DCMAKE_INSTALL_PREFIX=<...>
definition to specify where the package will be installed to. Related Cake-specific directories, like local copy of the repository and build directory will be also created under this directory (under ${CMAKE_INSTALL_PREFIX}/src
).CAKE_PKG_CMAKE_NATIVE_TOOL_ARGS
will be added to the end of the cmake --build
command after the '--'
.CAKE_PKG_CONFIGURATION_TYPES
usually contains a list like "Debug;Release"
. It controls the configurations the packages will be built in.As an alternative to set the Cake configuration variables you can also create a CMake file like this:
set(CAKE_PKG_CONFIGURATION_TYPES Debug Release) set(CAKE_PKG_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_LIST_DIR}/_install -DCMAKE_PREFIX_PATH=${CMAKE_CURRENT_LIST_DIR}/_install)
And set the environment variable CAKE_PKG_FILE
point to this file.
- Finer control of the git-clone, git-pull, CMake config/build operations (like forced clean build, global clone depth setting).
- Features to help managing master projects with multiple subrepositories (like googles git-repo-tool or gclient)
- zip/tgz, Mercurial and SVN support
This is the initial revision.


They say no b/c it’s not safe and you’re not ready. How do you respond?
OPTION A
React negatively and yell, “What do you mean I’m not ready? I could do this tomorrow!”
OPTION B
I know that you don’t support me on this but it’s what I want so I’m going to begin working on it, on my own
OPTION C
My friend Robert moved out and lives on his own and he used Agency Acme, so I want us to meet with them and see what my options are.
Result
Recognize that you are yelling because you are upset and frustrated. Your parents feel hurt and it takes them three weeks to come around and talk about it again. Instead of yelling, you could say, ““I wish you would respect and support my decision since I am adult. Will you please hear me about because I have spent a lot of time thinking through this.”
You could start this process on your own. Know that this process can be overwhelming, lonely, and frustrating at times. Think about who else is in your life who might have experience with moving who might be able to help you.
Agencies can provide many great resources and supports. Agency Acme might be a great fit for you, but there could be other agencies in your area. Keeping your parents involved is a great way to build in support!

Shosh asks you, “How are you going to pay for rent?” You reply:
OPTION A
I’ll start looking around to see if there’s any jobs.
OPTION B
I’ll find a place I like and then figure out the money.
OPTION C
I’ll see what apartment rent costs around me and see if I can do it on my own or if I will need a roommate.
Result
A job can be a great first step to save money before you move out, but know that it can also be a long process.
Remember that many apartments won’t let you sign a lease until you can pay a security deposit and first month’s rent. You might want to think about how you can save up money before searching for a place.
Thinking through what an apartment costs and your personal budget is a great idea before looking for a place to live. Doing research on places near you is a great idea and will help you learn about costs.

They say that you need to keep working on your independent living skills before you are ready to even think about living on your own. What do you do?
OPTION A
You ask your DSP to look at your Individual Service Plan with you so that your goals can be changed.
 Why aren’t you supporting me? It’s your job to help me!”
OPTION C
You keep working on the goals already on your ISP with your DSP.
Result
Changing your goals and breaking them down into smaller steps could help you reach your goal of living on your own.
 How else could you express that to your DSP? Maybe you could say, “I have thought about this a lot and this is what I really want. Please help me figure out how to help me make it happen.”
By working on your current goals at the pace on your ISP it will take you an extra year or two to gain your DSP’s support to move out on your own.
You tell a sibling that you’re tired of living with your family and ready to live on your own.
They are worried about you being lonely. You reply:
OPTION A
I’ll think about what’s nearby in the community so that I can stay connected with others.
OPTION B
I’ll think about a roommate or a pet.
OPTION C
Won’t you all still be coming to visit me after I move out?
Result
It is okay if you do feel lonely. Everyone feels lonely from time to time, but remember just because you moved out doesn’t mean you can’t make new connections.
This can be a great option to beat loneliness, and a roommate can also help you save money!
It’s okay to be scared of feeling lonely, before you move talk with your family about how often you’ll be able to see each other.
You tell a cousin about your plan to move out on your own and they are so excited to hear this!
You respond by:
OPTION A
You say, “I’m excited, but my mom is trying to control everything!”
OPTION B
You ask, “What was your favorite part about moving out?”
OPTION C
You ask, “What advice do you have for me?”
Result


黒の手番です。65 はどう動かしますか？
Unlimited
pips Black=160 White=96
(CorrectAnswer= 0/0, ErrorScore= 0)
1. 22/16* 16/11 eq:-0.236 40.27% (G:8.57% B:0.39%) 59.72% (G:25.18% B:2.79%) 2. 22/16* 8/3 eq:-0.323 (-0.087) 40.68% (G:7.90% B:0.37%) 59.32% (G:31.95% B:5.20%) 3. 8/3 8/2 eq:-0.595 (-0.360) 26.79% (G:1.70% B:0.08%) 73.21% (G:24.36% B:1.92%) 4. 8/2 7/2 eq:-0.635 (-0.399) 25.43% (G:2.21% B:0.08%) 74.57% (G:25.43% B:1.98%) 5. 8/3 7/1 eq:-0.653 (-0.417) 25.07% (G:1.80% B:0.05%) 74.93% (G:25.82% B:2.15%)


Home
3 System Manual > 3.1 Installation > 3.1.3 Building
prev
next
On Windows, connect to xact/dev/win.
-
To compile the @x:Act interpreter issue the following commands.
ant.bat
jar.bat
-
To build the @x:Act documentation issue the following command.
run.bat xad:gen(doc)
-
To build the Javadoc issue the following command.
javadoc.bat
On a Macintosh, connect to xact/dev/mac.
-
To compile the @x:Act interpreter issue the following commands.
./ant
./jar
-
To build the @x:Act documentation issue the following command.
./run "xad:gen(doc)"
-
To build the Javadoc issue the following command.
./javadoc


Next: Customizing the Change of Class of an Instance, Previous: Modifying the Structure of the Instance, Up: Changing the Class of an Instance
The second step of the update initializes the newly added slots and performs any other user-defined actions. This step is implemented by the generic function update-instance-for-different-class. The generic function update-instance-for-different-class is invoked by change-class after the first step of the update has been completed.
The generic function update-instance-for-different-class is invoked on arguments computed by change-class. The first argument passed is a copy of the instance being updated and is an instance of the class C_{from}; this copy has dynamic extent within the generic function change-class. The second argument is the instance as updated so far by change-class and is an instance of the class C_{to}. The remaining arguments are an initialization argument list.
There is a system-supplied primary method for update-instance-for-different-class that has two parameter specializers, each of which is the class standard-object. First this method checks the validity of initialization arguments and signals an error if an initialization argument is supplied that is not declared as valid. (For more information, see Declaring the Validity of Initialization Arguments.) Then it calls the generic function shared-initialize with the following arguments: the new instance, a list of names of the newly added slots, and the initialization arguments it received.


{{ tag }} articles - Eric's Nerdery python development blog
{% endblock %}
{% block meta_description %}{{ tag }} articles on Eric Carmichael's blog where he rambles about being a Web Developer in North Idaho{% endblock %}
{% block content %}
{{ tag }}
{% for article in articles %}
{% if article.link %}


GitHub Pages Portfolio
Created an application to help sales associates sell products. This application takes the price of products, determines if a wholesale discount is applicable. Then calculates the sub total, tax, and total for the order.
The user can then print off receipts for the day, by customer id, or which sale had the highest total.
This project showcased our knowledge of basic c# programming and classes.
Homework 2 was our first assignment on creating WPFs. This homework had three smaller peices.
A WPF that a user would enter student information, which a submit button would validate, then input the data into a listbox.
A WPF that had the user select a CSV file from their computer, read in the data, run an analysis on the data, then display the results.
A WPF that can create a QR code for text, website link, or wifi login information.
This assignment showcased our ability to create WPF applications, and our adaptability of using NuGet Packages and their documentation.
Homework 3 was our first dive into working with JSON files that came from an API.
Peice 1 of the homework saw us request a random or specific dog breed from an API, this API then returned a JSON file with the request which was deserialized into a class.
The dog breed name and picture were then displayed.
Peice 2 we got a random video from an API, then displayed that video along with user controls such as play, pause, etc.
This assignment showcased our knowledge of working with APIs, deserializing JSON, and video controls for WPF.
Homework 4 had us create a basic one page html website that used links, pulled images, and used a multitude of css styles.
This assignment showcased our skills in HTML & CSS.
MVC - Not Completed Yet.
In homework 6 we created a multipage html & css portfolio website, that included pages such as home, about me, projects, & skills Pages.
For this website framework I chose bootstrap, as we were using this in our MVC projects and it was familar to me.
This Assignment showcased our ability to work with a web development framework such as bootstrap to develop a portfolio website for GitHub Pages.


We begin our analysis with a simple graph showing a validating metric. The median household income shows a strong correlation with the % of the population in poverty.
By clicking on "% of Population Without Healthcare" on the chart, you will see that the correlation is not so simple. Indeed, while lower household income is correlated with lack of healthcare, it does not explain everything.


About
- I’m an Infosec enthusiast with interests in bug-hunting, CTF’s and all things security. This is my personal website.
- Make yourself at home: social links above, resources, writeups and other posts below.
- I also enjoy anime, rock music and playing the guitar :3 Enjoy your stay!
Resources
Post List, by Date
| TITLE | DATE | CATEGORY | TryHackMe - CC Pentest Final Exam Writeup | Oct 21, 20 | Writeup |
|---|


Welcome {{nickname}} on Node Tetrinet, a fully funny and working implementation of multiplayer tetrinet battles with node.js , angularjs, bootstrap and socket.io
It's you first connection ? Click on "{{nickname}}" just above to change your nickname !
No open game. Start a new game ?


Consideration can be monetary or in equivalent value of other goods and services. This ensures the value of the assets are kept in the CIC and the asset lock is not breached.
For more details,
read our guidance (PDF 297kb)
or speak to your accountant.


|
XS-Labs / C++ Utility Library
|
Functions | |
| void | MemoryBarrier (void) |
| Issues a memory barrier/fence. More... | |
| XS::Int32 | Increment32 (volatile XS::Int32 *value) |
| Atomically increments a 32 bits integer value. More... | |
| XS::Int64 | Increment64 (volatile XS::Int64 *value) |
| Atomically increments a 32 bits integer value. More... | |
| XS::Int32 | Decrement32 (volatile XS::Int32 *value) |
| Atomically decrements a 64 bits integer value. More... | |
| XS::Int64 | Decrement64 (volatile XS::Int64 *value) |
| Atomically decrements a 64 bits integer value. More... | |
| XS::Int32 | Add32 (XS::Int32 amount, volatile XS::Int32 *value) |
| Atomically adds to a 32 bits value. More... | |
| XS::Int64 | Add64 (XS::Int64 amount, volatile XS::Int64 *value) |
| Atomically adds to a 64 bits value. More... | |
| bool | CompareAndSwap32 (XS::Int32 oldValue, XS::Int32 newValue, volatile XS::Int32 *value) |
| Performs an atomic compare and swap on 32 bits integer values. More... | |
| bool | CompareAndSwap64 (XS::Int64 oldValue, XS::Int64 newValue, volatile XS::Int64 *value) |
| Performs an atomic compare and swap on 64 bits integer values. More... | |
| bool | CompareAndSwapPointer (void *oldValue, void *newValue, void *volatile *value) |
| Performs an atomic compare and swap on pointer values. More... | |
Atomically adds to a 32 bits value.
| amount | The amount to add |
| value | The 32 bits value to modify |
Atomically adds to a 64 bits value.
| amount | The amount to add |
| value | The 64 bits value to modify |
| bool XS::Atomic::CompareAndSwap32 | ( | XS::Int32 | oldValue, |
| XS::Int32 | newValue, | ||
| volatile XS::Int32 * | value | ||
| ) |
Performs an atomic compare and swap on 32 bits integer values.
| oldValue | The value to compare to (old value) |
| newValue | The value to swap (new value) |
| value | A pointer to the 32 bits integer value to compare and swap |
| bool XS::Atomic::CompareAndSwap64 | ( | XS::Int64 | oldValue, |
| XS::Int64 | newValue, | ||
| volatile XS::Int64 * | value | ||
| ) |
Performs an atomic compare and swap on 64 bits integer values.
| oldValue | The value to compare to (old value) |
| newValue | The value to swap (new value) |
| value | A pointer to the 64 bits integer value to compare and swap |
| bool XS::Atomic::CompareAndSwapPointer | ( | void * | oldValue, |
| void * | newValue, | ||
| void *volatile * | value | ||
| ) |
Performs an atomic compare and swap on pointer values.
| oldValue | The value to compare to (old value) |
| newValue | The value to swap (new value) |
| value | A pointer to the pointer value to compare and swap |
Atomically decrements a 64 bits integer value.
| value | The value to decrement |
Atomically decrements a 64 bits integer value.
| value | The value to decrement |
Atomically increments a 32 bits integer value.
| value | The value to increment |
Atomically increments a 32 bits integer value.
| value | The value to increment |
| void XS::Atomic::MemoryBarrier | ( | void | ) |
Issues a memory barrier/fence.
Currently, this function is implemented for the following architectures:


Opening Channel
info_outline
{{feeRates?.onchain_fee_estimates?.opening_channel_satoshis | number}}
Mutual Close
info_outline
{{feeRates?.onchain_fee_estimates?.mutual_close_satoshis | number}}
Unilateral Close
info_outline
{{feeRates?.onchain_fee_estimates?.unilateral_close_satoshis | number}}


import _ from 'lodash';
import { keys, keysIn } from './utils';
import _ from 'lodash';
import { keys, keysIn } from './utils';
A module that can be mixed in to any object in order to provide it with a
custom event channel. You may bind a callback to an event with on
or remove
with off
; trigger
-ing an event fires all callbacks in succession.
var object = {};
_.extend(object, Events);
object.on('expand', function(){ alert('expanded'); });
object.trigger('expand');
Regular expression used to split event strings.
const eventSplitter = /\s+/;
A private singleton variable to share between listeners and listenees.
let _listening;
Iterates over the standard event, callback
(as well as the fancy multiple
space-separated events "change blur", callback
and jQuery-style event maps
{event: callback}
).
function eventsApi(iteratee, events, name, callback, opts) {
if (name && typeof name === 'object') {
Handle event maps.
if (callback !== void 0 && 'context' in opts && opts.context === void 0)
opts.context = callback;
for (const key of keys(name)) {
events = eventsApi(iteratee, events, key, name[key], opts);
}
} else if (name && eventSplitter.test(name)) {
Handle space-separated event names by delegating them individually.
for (const key of name.split(eventSplitter)) {
events = iteratee(events, key, callback, opts);
}
} else {
Finally, standard events.
events = iteratee(events, name, callback, opts);
}
return events;
}
The reducing API that adds a callback to the events
object.
function onApi(events, name, callback, options) {
if (callback) {
const handlers = events[name] || (events[name] = []);
const context = options.context,
ctx = options.ctx,
listening = options.listening;
if (listening) listening.count++;
handlers.push({
callback: callback,
context: context,
ctx: context || ctx,
listening: listening,
});
}
return events;
}
The reducing API that removes a callback from the events
object.
function offApi(events, name, callback, options) {
if (!events) return;
const context = options.context,
listeners = options.listeners;
Delete all event listeners and “drop” events.
if (!name && !context && !callback) {
for (const key of keys(listeners)) {
listeners[key].cleanup();
}
return;
}
const names = name ? [name] : keys(events);
for (const key of names) {
const handlers = events[key];
Bail out if there are no events stored.
if (!handlers) break;
Find any remaining events.
const remaining = [];
for (let j = 0; j < handlers.length; j++) {
const handler = handlers[j];
if (
(callback && callback !== handler.callback && callback !== handler.callback._callback) ||
(context && context !== handler.context)
) {
remaining.push(handler);
} else {
const listening = handler.listening;
if (listening) listening.off(key, callback);
}
}
Replace events if there are any remaining. Otherwise, clean up.
if (remaining.length) {
events[key] = remaining;
} else {
delete events[key];
}
}
return events;
}
An try-catch guarded #on function, to prevent poisoning the global
_listening
variable.
function tryCatchOn(obj, name, callback, context) {
try {
obj.on(name, callback, context);
} catch (e) {
return e;
}
}
Reduces the event callbacks into a map of {event: onceWrapper}
. offer
unbinds the onceWrapper
after it has been called.
function onceMap(map, name, callback, offer) {
if (callback) {
const once = (map[name] = _.once(function (...args) {
offer(name, once);
callback.apply(this, args);
}));
once._callback = callback;
}
return map;
}
Handles triggering the appropriate event callbacks.
function triggerApi(objEvents, name, callback, args) {
if (objEvents) {
const events = objEvents[name];
let allEvents = objEvents.all;
if (events && allEvents) allEvents = allEvents.slice();
if (events) triggerEvents(events, args);
if (allEvents) triggerEvents(allEvents, [name].concat(args));
}
return objEvents;
}
A difficult-to-believe, but optimized internal dispatch function for triggering events. Tries to keep the usual cases speedy (most internal Backbone events have 3 arguments).
function triggerEvents(events, args) {
let ev,
i = -1;
const l = events.length,
a1 = args[0],
a2 = args[1],
a3 = args[2];
switch (args.length) {
case 0:
while (++i < l) (ev = events[i]).callback.call(ev.ctx);
return;
case 1:
while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1);
return;
case 2:
while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2);
return;
case 3:
while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3);
return;
default:
while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
return;
}
}
export const Events = /*#__PURE__*/ (() => {
eslint-disable-next-line no-shadow
const Events = {
Bind an event to a callback
function. Passing "all"
will bind the
callback to all events fired.
on(name, callback, context) {
this._events = eventsApi(onApi, this._events || {}, name, callback, {
context: context,
ctx: this,
listening: _listening,
});
if (_listening) {
const listeners = this._listeners || (this._listeners = {});
listeners[_listening.id] = _listening;
Allow the listening to use a counter, instead of tracking callbacks for library interop
_listening.interop = false;
}
return this;
},
Inversion-of-control versions of on
. Tell this object to listen to an
event in another object… keeping track of what it’s listening to for
easier unbinding later.
listenTo(obj, name, callback) {
if (!obj) return this;
const id = obj._listenId || (obj._listenId = _.uniqueId('l'));
const listeningTo = this._listeningTo || (this._listeningTo = Object.create(null));
let listening = (_listening = listeningTo[id]);
This object is not listening to any other events on obj
yet. Setup
the necessary references to track the listening callbacks.
if (!listening) {
this._listenId || (this._listenId = _.uniqueId('l'));
listening = _listening = listeningTo[id] = new Listening(this, obj);
}
Bind callbacks on obj.
const error = tryCatchOn(obj, name, callback, this);
_listening = void 0;
if (error) throw error;
If the target obj is not Backbone.Events, track events manually.
if (listening.interop) listening.on(name, callback);
return this;
},
Remove one or many callbacks. If context
is null, removes all callbacks
with that function. If callback
is null, removes all callbacks for the
event. If name
is null, removes all bound callbacks for all events.
off(name, callback, context) {
if (!this._events) return this;
this._events = eventsApi(offApi, this._events, name, callback, {
context: context,
listeners: this._listeners,
});
return this;
},
Tell this object to stop listening to either specific events … or to every object it’s currently listening to.
stopListening(obj, name, callback) {
const listeningTo = this._listeningTo;
if (!listeningTo) return this;
const ids = obj ? [obj._listenId] : keysIn(listeningTo);
for (let i = 0; i < ids.length; i++) {
const listening = listeningTo[ids[i]];
If listening doesn’t exist, this object is not currently listening to obj. Break out early.
if (!listening) break;
listening.obj.off(name, callback, this);
if (listening.interop) listening.off(name, callback);
}
if (_.isEmpty(listeningTo)) this._listeningTo = void 0;
return this;
},
Bind an event to only be triggered a single time. After the first time the callback is invoked, its listener will be removed. If multiple events are passed in using the space-separated syntax, the handler will fire once for each event, not once for a combination of all events.
once(name, callback, context) {
Map the event into a {event: once}
object.
const events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));
if (typeof name === 'string' && context == null) callback = void 0;
return this.on(events, callback, context);
},
Inversion-of-control versions of once
.
listenToOnce(obj, name, callback) {
Map the event into a {event: once}
object.
const events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));
return this.listenTo(obj, events);
},
Trigger one or many events, firing all bound callbacks. Callbacks are
passed the same arguments as trigger
is, apart from the event name
(unless you’re listening on "all"
, which will cause your callback to
receive the true name of the event as the first argument).
trigger(name, ...args) {
if (!this._events) return this;
eventsApi(triggerApi, this._events, name, void 0, args);
return this;
},
};
Aliases for backwards compatibility.
Events.bind = Events.on;
Events.unbind = Events.off;
return Events;
})();
A listening class that tracks and cleans up memory bindings when all callbacks have been offed.
const Listening = /*#__PURE__*/ (() => {
eslint-disable-next-line no-shadow
const Listening = class Listening {
constructor(listener, obj) {
this.id = listener._listenId;
this.listener = listener;
this.obj = obj;
this.interop = true;
this.count = 0;
this._events = void 0;
}
Offs a callback (or several). Uses an optimized counter if the listenee uses Backbone.Events. Otherwise, falls back to manual tracking to support events library interop.
off(name, callback) {
let cleanup;
if (this.interop) {
this._events = eventsApi(offApi, this._events, name, callback, {
context: void 0,
listeners: void 0,
});
cleanup = !this._events;
} else {
this.count--;
cleanup = this.count === 0;
}
if (cleanup) this.cleanup();
}
Cleans up memory bindings between the listener and the listenee.
cleanup() {
delete this.listener._listeningTo[this.obj._listenId];
if (!this.interop) delete this.obj._listeners[this.id];
}
};
Listening.prototype.on = Events.on;
return Listening;
})();


Information
Your forest will come home to you as a listening experience, no matter where you are...
ABOUT
In a complicated and stressed world you need time to relax and get back to your full strength.
One of the best things you can do then is to take a walk and find a relaxed place.
But sometimes you don't have enough time to reach a near forest during a break and all you can
do is to just lay back in your chair,
close your eyes and try to imagine a relaxing situation.
With Forest I created an application that allows you to create your own changeable forest soundscape,
when you don‘t have the possibility to go out into a forest in real life. You can choose the soundscape
and regulate intensities of elements as you wish. You like more birds? Or a waterfall? Or a walk in a rainy forest?
No problem. Your changes will act immediately.
You can build your own forest or take a sound dive in a random forest. Sit back and enjoy!
And if you prefer a walk along the sea you can checkout my complementary
project Sea to dive into your own sea soundscape.
OFFLINE VERSION
Is there an offline version? Yes, you can go to the Forest-Android-Repository
and get all the info about installation on Android. And iOS? I'm sorry, but you can currently only use this web app.
CONTACT
Forest is a private project that I started in June 2021.
At that time I was looking for a simple solution that would allow me to relax during my studies at university.
If you want to contact me to report bugs or ask for new features or simply say hello:
If you want to send me a postcard:
License
Forest is licensed under the MIT License:
MIT License
Copyright (c) 2021 Moritz Ott
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
EXTERNAL COMPONENTS
Forest uses the font Nunito. Nunito is distributed under another license
which is why I need to make a required notice here:
Name of used component: Nunito
Licensor: Vernon Adams
License: SIL Open Font License v.1.10
VERSION
Forest - v1.0-alpha
EXTERNAL LINKS
The contents of this web application were written with due diligence and by the author’s best knowledge.
Currently there are three hyperlinks in this web application (Sea, Forest Android, SIL Open Font License).
Since I do not have any control on the contents of these websites (except the Sea and Forest website), only the provider of
these linked websites can be held liable, especially if the linked sites were updated after the setting of the links.
If I receive knowledge of illegal contents on these linked websites, I will delete the according links.


Custom Query
In some cases you may want use a custom BMLT query. For example, if you have a small service body you may want to ignore the day of the week concept that is the default behavior in searches.
You can do this with the setting custom_query
. This setting also supports the use of some magic variables.
For example say you want to always use the service body id for making queries, you could create the settings as follows:
static $custom_query="&services[]={SETTING_SERVICE_BODY_ID}"
Because there is a setting called service_body_id
already and assuming you had overridden it, meeting searches will now send a query to the BMLT and return accordingly.
You could have also hardcoded it if you wanted. Like any other variable, you can set this on the querystring as a session wide override.
In some cases you may need to combine this with the result_count_max
to increase the limit of how many results are returned. You may also need to use sms_ask
, as many results could be returned.
There are a couple of other stock magic variables.
{DAY}
- will use the day of today / tomorrow.{LATITUDE}
- the latitude of the lookup.{LONGITUDE}
- the longitude of the lookup.
If you do not have {LATITUDE}
or {LONGITUDE}
in your custom query, it will automatically skip the location gathering aspects of the meeting search menus and go directly to returning results.


SweetFreeStuff.com
///////////////////////////////////////////
Free Magic Shave Samples
Posted: 24 Sep 2014 11:26 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Answer a few questions to see if you qualify for a free sample. Free Magic
Shave Samples
The post Free Magic Shave Samples appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free State of Alaska Vacation Planner
Posted: 24 Sep 2014 09:56 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free State of Alaska Vacation Planner appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Sachet of Nikwax Waterproofing Wax for Leather and Nikwax BaseFresh
Posted: 24 Sep 2014 09:18 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
You need to take their quiz and answer all questions correctly to get a
free sachet. Free Sachet of Nikwax Waterproofing Wax for Leather Free
Sachet of Nikwax BaseFresh
The post Free Sachet of Nikwax Waterproofing Wax for Leather and Nikwax
BaseFresh appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Earn Cash and Prizes for Scanning your Purchases - NCP
Posted: 24 Sep 2014 02:01 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Earn Free Cash and Prizes from National Consumer Panel Click Here to Sign
up! As a panel member, the National Consumer Panel will provide you with a
hand-held scanner. Every time you or members of your household shop, youll
use the scanner to scan the barcodes on all of your purchases. Then, once a
[]
The post Earn Cash and Prizes for Scanning your Purchases NCP appeared
first on SweetFreeStuff.com.


Grittier is a twitter clone template for building simple and beautiful Neo4j Extension based Apps. Clone the repositories, edit the source code, and add your features to make it your own.
Register Login
Built for Neo4j, by @@maxdemarzi.


/* @keyframes | duration | timing-function | delay | iteration-count | direction | fill-mode | play-state */
animation: slidein 3s ease-in 1s infinite reverse both running;
/* @keyframes | duration | timing-function | delay | iteration-count | play-state */
animation: slidein 3s linear 1s infinite running;
/* @keyframes | duration | timing-function | delay | iteration-count | direction */
animation: slidein 3s linear 1s infinite alternate;
/* @keyframes | duration | timing-function | delay | iteration-count | direction */
animation: slidein .5s linear 1s infinite alternate;


RadixSort Functions | |
| typedef unsigned int | uint |
| __global__ void | emptyKernel () |
| And empty kernel used to reset CTA issue hardware. | |
| __global__ void | flipFloats (uint *values, uint numValues) |
| Does special binary arithmetic before sorting floats. | |
| __global__ void | unflipFloats (uint *values, uint numValues) |
| Undoes the flips from flipFloats. | |
| template<bool flip> | |
| __global__ void | radixSortSingleWarp (uint *keys, uint *values, uint numElements) |
| Optimization for sorts of WARP_SIZE or fewer elements. | |
| template<bool flip> | |
| __global__ void | radixSortSingleWarpKeysOnly (uint *keys, uint numElements) |
| Optimization for sorts of WARP_SIZE or fewer elements. Keys-Only version. | |
| template<uint nbits, uint startbit, bool fullBlocks, bool flip, bool loop> | |
| __global__ void | radixSortBlocks (uint4 *keysOut, uint4 *valuesOut, uint4 *keysIn, uint4 *valuesIn, uint numElements, uint totalBlocks) |
| sorts all blocks of data independently in shared memory. Each thread block (CTA) sorts one block of 4*CTA_SIZE elements | |
| template<uint startbit, bool fullBlocks, bool loop> | |
| __global__ void | findRadixOffsets (uint2 *keys, uint *counters, uint *blockOffsets, uint numElements, uint totalBlocks) |
| Computes the number of keys of each radix in each block stores offset. | |
| template<uint startbit, bool fullBlocks, bool manualCoalesce, bool unflip, bool loop> | |
| __global__ void | reorderData (uint *outKeys, uint *outValues, uint2 *keys, uint2 *values, uint *blockOffsets, uint *offsets, uint *sizes, uint numElements, uint totalBlocks) |
| Reorders data in the global array. | |
| template<uint nbits, uint startbit, bool fullBlocks, bool flip, bool loop> | |
| __global__ void | radixSortBlocksKeysOnly (uint4 *keysOut, uint4 *keysIn, uint numElements, uint totalBlocks) |
| Sorts all blocks of data independently in shared memory. Each thread block (CTA) sorts one block of 4*CTA_SIZE elements. | |
| template<uint startbit, bool fullBlocks, bool manualCoalesce, bool unflip, bool loop> | |
| __global__ void | reorderDataKeysOnly (uint *outKeys, uint2 *keys, uint *blockOffsets, uint *offsets, uint *sizes, uint numElements, uint totalBlocks) |
| Reorders data in the global array. | |
Compact Functions | |
| template<bool isBackward> | |
| __global__ void | computeNumValidElements (size_t *d_numValidElements, const unsigned int *d_indices, const unsigned int *d_isValid, size_t numElements) |
| Compute the number of valid flags in an array given the array and its exclusive sum scan. | |
| template<class T , bool isBackward> | |
| __global__ void | compactData (T *d_out, size_t *d_numValidElements, const unsigned int *d_indices, const unsigned int *d_isValid, const T *d_in, unsigned int numElements) |
| Consolidate non-null elements - for each non-null element in d_in write it to d_out, in the position specified by d_isValid. Called by compactArray(). | |
Rand Functions | |
| __global__ void | gen_randMD5 (uint4 *d_out, size_t numElements, unsigned int seed) |
| The main MD5 generation algorithm. | |
Scan Functions | |
| template<class T , class traits > | |
| __global__ void | scan4 (T *d_out, const T *d_in, T *d_blockSums, int numElements, unsigned int dataRowPitch, unsigned int blockSumRowPitch) |
| Main scan kernel. | |
Segmented scan Functions | |
| template<class T , class traits > | |
| __global__ void | segmentedScan4 (T *d_odata, const T *d_idata, const unsigned int *d_iflags, unsigned int numElements, T *d_blockSums=0, unsigned int *d_blockFlags=0, unsigned int *d_blockIndices=0) |
| Main segmented scan kernel. | |
Sparse Matrix-Vector multiply Functions | |
| template<class T , bool isFullBlock> | |
| __global__ void | sparseMatrixVectorFetchAndMultiply (unsigned int *d_flags, T *d_prod, const T *d_A, const T *d_x, const unsigned int *d_indx, unsigned int numNZElts) |
| Fetch and multiply kernel. | |
| __global__ void | sparseMatrixVectorSetFlags (unsigned int *d_flags, const unsigned int *d_rowindx, unsigned int numRows) |
| Set Flags kernel. | |
| template<class T > | |
| __global__ void | yGather (T *d_y, const T *d_prod, const unsigned int *d_rowFindx, unsigned int numRows) |
| Gather final y values kernel. | |
Vector Functions | |
| CUDA kernel methods for basic operations on vectors. | |
| template<class T > | |
| __global__ void | vectorAddConstant (T *d_vector, T constant, int n, int baseIndex) |
| Adds a constant value to all values in the input d_vector. | |
| template<class T > | |
| __global__ void | vectorAddUniform (T *d_vector, const T *d_uniforms, int numElements, int blockOffset, int baseIndex) |
| Add a uniform value to each data element of an array. | |
| template<class T , CUDPPOperator op, int elementsPerThread> | |
| __global__ void | vectorAddUniform4 (T *d_vector, const T *d_uniforms, int numElements, int vectorRowPitch, int uniformRowPitch, int blockOffset, int baseIndex) |
| Add a uniform value to each data element of an array (vec4 version). | |
| template<class T > | |
| __global__ void | vectorAddVector (T *d_vectorA, const T *d_vectorB, int numElements, int baseIndex) |
| Adds together two vectors. | |
| template<class T , CUDPPOperator oper, bool isLastBlockFull> | |
| __global__ void | vectorSegmentedAddUniform4 (T *d_vector, const T *d_uniforms, const unsigned int *d_maxIndices, unsigned int numElements, int blockOffset, int baseIndex) |
| Add a uniform value to data elements of an array (vec4 version). | |
| template<class T , CUDPPOperator oper, bool isLastBlockFull> | |
| __global__ void | vectorSegmentedAddUniformToRight4 (T *d_vector, const T *d_uniforms, const unsigned int *d_minIndices, unsigned int numElements, int blockOffset, int baseIndex) |
| Add a uniform value to data elements of an array (vec4 version). |
__global__
so that they must be invoked from host (CPU) code. They generally invoke GPU __device__
routines in the CUDPP CTA-Level API. Kernel-Level API functions are used by CUDPP Application-Level functions to implement their functionality. | __global__ void computeNumValidElements | ( | size_t * | d_numValidElements, | |
| const unsigned int * | d_indices, | |||
| const unsigned int * | d_isValid, | |||
| size_t | numElements | |||
| ) | [inline] |
Compute the number of valid flags in an array given the array and its exclusive sum scan.
| [out] | d_numValidElements | Number of valid eleents in d_isValid. |
| [in] | d_indices | Array of output indices created using an exclusive sum scan. |
| [in] | d_isValid | Array of flags indicating which elements are valid (1) and invalid (0). |
| [in] | numElements | The length of the d_isValid and d_indices arrays. |
| __global__ void compactData | ( | T * | d_out, | |
| size_t * | d_numValidElements, | |||
| const unsigned int * | d_indices, | |||
| const unsigned int * | d_isValid, | |||
| const T * | d_in, | |||
| unsigned int | numElements | |||
| ) | [inline] |
Consolidate non-null elements - for each non-null element in d_in write it to d_out, in the position specified by d_isValid. Called by compactArray().
| [out] | d_out | Output array of compacted values. |
| [out] | d_numValidElements | The number of elements in d_in with valid flags set to 1. |
| [in] | d_indices | Positions where non-null elements will go in d_out. |
| [in] | d_isValid | Flags indicating valid (1) and invalid (0) elements. Only valid elements will be copied to d_out. |
| [in] | d_in | The input array |
| [in] | numElements | The length of the d_in in elements. |
| __global__ void flipFloats | ( | uint * | values, | |
| uint | numValues | |||
| ) |
Does special binary arithmetic before sorting floats.
Uses floatFlip function to flip bits.
| [in,out] | values | Values to be manipulated |
| [in] | numValues | Number of values to be flipped |
| __global__ void unflipFloats | ( | uint * | values, | |
| uint | numValues | |||
| ) |
Undoes the flips from flipFloats.
Uses floatUnflip function to unflip bits.
| [in,out] | values | Values to be manipulated |
| [in] | numValues | Number of values to be unflipped |
| __global__ void radixSortSingleWarp | ( | uint * | keys, | |
| uint * | values, | |||
| uint | numElements | |||
| ) | [inline] |
Optimization for sorts of WARP_SIZE or fewer elements.
| [in,out] | keys | Keys to be sorted. |
| [in,out] | values | Associated values to be sorted (through keys). |
| [in] | numElements | Number of elements in the sort. |
| __global__ void radixSortSingleWarpKeysOnly | ( | uint * | keys, | |
| uint | numElements | |||
| ) | [inline] |
Optimization for sorts of WARP_SIZE or fewer elements. Keys-Only version.
| [in,out] | keys | Keys to be sorted |
| [in] | numElements | Total number of elements to be sorted |
| __global__ void radixSortBlocks | ( | uint4 * | keysOut, | |
| uint4 * | valuesOut, | |||
| uint4 * | keysIn, | |||
| uint4 * | valuesIn, | |||
| uint | numElements, | |||
| uint | totalBlocks | |||
| ) | [inline] |
sorts all blocks of data independently in shared memory. Each thread block (CTA) sorts one block of 4*CTA_SIZE elements
The radix sort is done in two stages. This stage calls radixSortBlock on each block independently, sorting on the basis of bits (startbit) -> (startbit + nbits)
Template parameters are used to generate efficient code for various special cases For example, we have to handle arrays that are a multiple of the block size (fullBlocks) differently than arrays that are not. "flip" is used to only compile in the float flip code when float keys are used. "loop" is used when persistent CTAs are used.
By persistent CTAs we mean that we launch only as many thread blocks as can be resident in the GPU and no more, rather than launching as many threads as we have elements. Persistent CTAs loop over blocks of elements until all work is complete. This can be faster in some cases. In our tests it is faster for large sorts (and the threshold is higher on compute version 1.1 and earlier GPUs than it is on compute version 1.2 GPUs.
| [out] | keysOut | Output of sorted keys |
| [out] | valuesOut | Output of associated values |
| [in] | keysIn | Input of unsorted keys in GPU |
| [in] | valuesIn | Input of associated input values |
| [in] | numElements | Total number of elements to sort |
| [in] | totalBlocks | The number of blocks of data to sort |
| __global__ void findRadixOffsets | ( | uint2 * | keys, | |
| uint * | counters, | |||
| uint * | blockOffsets, | |||
| uint | numElements, | |||
| uint | totalBlocks | |||
| ) | [inline] |
Computes the number of keys of each radix in each block stores offset.
Given an array with blocks sorted according to a 4-bit radix group, each block counts the number of keys that fall into each radix in the group, and finds the starting offset of each radix in the block. It then writes the radix counts to the counters array, and the starting offsets to the blockOffsets array.
Template parameters are used to generate efficient code for various special cases For example, we have to handle arrays that are a multiple of the block size (fullBlocks) differently than arrays that are not. "loop" is used when persistent CTAs are used.
By persistent CTAs we mean that we launch only as many thread blocks as can be resident in the GPU and no more, rather than launching as many threads as we have elements. Persistent CTAs loop over blocks of elements until all work is complete. This can be faster in some cases. In our tests it is faster for large sorts (and the threshold is higher on compute version 1.1 and earlier GPUs than it is on compute version 1.2 GPUs.
| [in] | keys | Input keys |
| [out] | counters | Radix count for each block |
| [out] | blockOffsets | The offset address for each block |
| [in] | numElements | Total number of elements |
| [in] | totalBlocks | Total number of blocks |
| __global__ void reorderData | ( | uint * | outKeys, | |
| uint * | outValues, | |||
| uint2 * | keys, | |||
| uint2 * | values, | |||
| uint * | blockOffsets, | |||
| uint * | offsets, | |||
| uint * | sizes, | |||
| uint | numElements, | |||
| uint | totalBlocks | |||
| ) | [inline] |
Reorders data in the global array.
reorderData shuffles data in the array globally after the radix offsets have been found. On compute version 1.1 and earlier GPUs, this code depends on SORT_CTA_SIZE being 16 * number of radices (i.e. 16 * 2^nbits).
On compute version 1.1 GPUs ("manualCoalesce=true") this function ensures that all writes are coalesced using extra work in the kernel. On later GPUs coalescing rules have been relaxed, so this extra overhead hurts performance. On these GPUs we set manualCoalesce=false and directly store the results.
Template parameters are used to generate efficient code for various special cases For example, we have to handle arrays that are a multiple of the block size (fullBlocks) differently than arrays that are not. "loop" is used when persistent CTAs are used.
By persistent CTAs we mean that we launch only as many thread blocks as can be resident in the GPU and no more, rather than launching as many threads as we have elements. Persistent CTAs loop over blocks of elements until all work is complete. This can be faster in some cases. In our tests it is faster for large sorts (and the threshold is higher on compute version 1.1 and earlier GPUs than it is on compute version 1.2 GPUs.
| [out] | outKeys | Output of sorted keys |
| [out] | outValues | Output of associated values |
| [in] | keys | Input of unsorted keys in GPU |
| [in] | values | Input of associated input values |
| [in] | blockOffsets | The offset address for each block |
| [in] | offsets | Address of each radix within each block |
| [in] | sizes | Number of elements in a block |
| [in] | numElements | Total number of elements |
| [in] | totalBlocks | Total number of data blocks to process |
| __global__ void radixSortBlocksKeysOnly | ( | uint4 * | keysOut, | |
| uint4 * | keysIn, | |||
| uint | numElements, | |||
| uint | totalBlocks | |||
| ) | [inline] |
Sorts all blocks of data independently in shared memory. Each thread block (CTA) sorts one block of 4*CTA_SIZE elements.
The radix sort is done in two stages. This stage calls radixSortBlock on each block independently, sorting on the basis of bits (startbit) -> (startbit + nbits)
Template parameters are used to generate efficient code for various special cases For example, we have to handle arrays that are a multiple of the block size (fullBlocks) differently than arrays that are not. "flip" is used to only compile in the float flip code when float keys are used. "loop" is used when persistent CTAs are used.
By persistent CTAs we mean that we launch only as many thread blocks as can be resident in the GPU and no more, rather than launching as many threads as we have elements. Persistent CTAs loop over blocks of elements until all work is complete. This can be faster in some cases. In our tests it is faster for large sorts (and the threshold is higher on compute version 1.1 and earlier GPUs than it is on compute version 1.2 GPUs.
| [out] | keysOut | Output of sorted keys GPU main memory |
| [in] | keysIn | Input of unsorted keys in GPU main memory |
| [in] | numElements | Total number of elements to sort |
| [in] | totalBlocks | Total number of blocks to sort |
| __global__ void reorderDataKeysOnly | ( | uint * | outKeys, | |
| uint2 * | keys, | |||
| uint * | blockOffsets, | |||
| uint * | offsets, | |||
| uint * | sizes, | |||
| uint | numElements, | |||
| uint | totalBlocks | |||
| ) | [inline] |
Reorders data in the global array.
reorderDataKeysOnly shuffles data in the array globally after the radix offsets have been found. On compute version 1.1 and earlier GPUs, this code depends on SORT_CTA_SIZE being 16 * number of radices (i.e. 16 * 2^nbits).
On compute version 1.1 GPUs ("manualCoalesce=true") this function ensures that all writes are coalesced using extra work in the kernel. On later GPUs coalescing rules have been relaxed, so this extra overhead hurts performance. On these GPUs we set manualCoalesce=false and directly store the results.
Template parameters are used to generate efficient code for various special cases For example, we have to handle arrays that are a multiple of the block size (fullBlocks) differently than arrays that are not. "loop" is used when persistent CTAs are used.
By persistent CTAs we mean that we launch only as many thread blocks as can be resident in the GPU and no more, rather than launching as many threads as we have elements. Persistent CTAs loop over blocks of elements until all work is complete. This can be faster in some cases. In our tests it is faster for large sorts (and the threshold is higher on compute version 1.1 and earlier GPUs than it is on compute version 1.2 GPUs.
| [out] | outKeys | Output result of reorderDataKeysOnly() |
| [in] | keys | Keys to be reordered |
| [in] | blockOffsets | Start offset for each block |
| [in] | offsets | Offset of each radix within each block |
| [in] | sizes | Number of elements in a block |
| [in] | numElements | Total number of elements |
| [in] | totalBlocks | Total number of blocks |
| __global__ void gen_randMD5 | ( | uint4 * | d_out, | |
| size_t | numElements, | |||
| unsigned int | seed | |||
| ) |
The main MD5 generation algorithm.
This function runs the MD5 hashing random number generator. It generates MD5 hashes, and uses the output as randomized bits. To repeatedly call this function, always call cudppRandSeed() first to set a new seed or else the output may be the same due to the deterministic nature of hashes. gen_randMD5 generates 128 random bits per thread. Therefore, the parameter d_out is expected to be an array of type uint4 with numElements indicies.
| [out] | d_out | the output array of type uint4. |
| [in] | numElements | the number of elements in d_out |
| [in] | seed | the random seed used to vary the output |
| __global__ void scan4 | ( | T * | d_out, | |
| const T * | d_in, | |||
| T * | d_blockSums, | |||
| int | numElements, | |||
| unsigned int | dataRowPitch, | |||
| unsigned int | blockSumRowPitch | |||
| ) | [inline] |
Main scan kernel.
This __global__ device function performs one level of a multiblock scan on an arbitrary-dimensioned array in d_in, returning the result in d_out (which may point to the same array). The same function may be used for single or multi-row scans. To perform a multirow scan, pass the width of each row of the input row (in elements) in dataRowPitch, and the width of the rows of d_blockSums (in elements) in blockSumRowPitch, and invoke with a thread block grid with height greater than 1.
This function peforms one level of a recursive, multiblock scan. At the app level, this function is called by cudppScan and cudppMultiScan and used in combination with vectorAddUniform4() to produce a complete scan.
Template parameter T is the datatype of the array to be scanned. Template parameter traits is the ScanTraits struct containing compile-time options for the scan, such as whether it is forward or backward, exclusive or inclusive, multi- or single-row, etc.
| [out] | d_out | The output (scanned) array |
| [in] | d_in | The input array to be scanned |
| [out] | d_blockSums | The array of per-block sums |
| [in] | numElements | The number of elements to scan |
| [in] | dataRowPitch | The width of each row of d_in in elements (for multi-row scans) |
| [in] | blockSumRowPitch | The with of each row of d_blockSums in elements (for multi-row scans) |
| __global__ void segmentedScan4 | ( | T * | d_odata, | |
| const T * | d_idata, | |||
| const unsigned int * | d_iflags, | |||
| unsigned int | numElements, | |||
| T * | d_blockSums = 0 , |
|||
| unsigned int * | d_blockFlags = 0 , |
|||
| unsigned int * | d_blockIndices = 0 | |||
| ) | [inline] |
Main segmented scan kernel.
This __global__ device function performs one level of a multiblock segmented scan on an one-dimensioned array in d_idata, returning the result in d_odata (which may point to the same array).
This function performs one level of a recursive, multiblock scan. At the app level, this function is called by cudppSegmentedScan and used in combination with either vectorSegmentedAddUniform4() (forward) or vectorSegmentedAddUniformToRight4() (backward) to produce a complete segmented scan.
Template parameter T is the datatype of the array to be scanned. Template parameter traits is the SegmentedScanTraits struct containing compile-time options for the segmented scan, such as whether it is forward or backward, inclusive or exclusive, etc.
| [out] | d_odata | The output (scanned) array |
| [in] | d_idata | The input array to be scanned |
| [in] | d_iflags | The input array of flags |
| [out] | d_blockSums | The array of per-block sums |
| [out] | d_blockFlags | The array of per-block OR-reduction of flags |
| [out] | d_blockIndices | The array of per-block min-reduction of indices |
| [in] | numElements | The number of elements to scan |
| __global__ void sparseMatrixVectorFetchAndMultiply | ( | unsigned int * | d_flags, | |
| T * | d_prod, | |||
| const T * | d_A, | |||
| const T * | d_x, | |||
| const unsigned int * | d_indx, | |||
| unsigned int | numNZElts | |||
| ) | [inline] |
Fetch and multiply kernel.
This __global__ device function takes an element from the vector d_A, finds its column in d_indx and multiplies the element from d_A with its corresponding (that is having the same row) element in d_x and stores the resulting product in d_prod. It also sets all the elements of d_flags to 0.
Template parameter T is the datatype of the matrix A and x.
| [out] | d_flags | The output flags array |
| [out] | d_prod | The output products array |
| [in] | d_A | The input matrix A |
| [in] | d_x | The input array x |
| [in] | d_indx | The input array of column indices for each element in A |
| [in] | numNZElts | The number of non-zero elements in matrix A |
| __global__ void sparseMatrixVectorSetFlags | ( | unsigned int * | d_flags, | |
| const unsigned int * | d_rowindx, | |||
| unsigned int | numRows | |||
| ) |
Set Flags kernel.
This __global__ device function takes an element from the vector d_rowindx, and sets the corresponding position in d_flags to 1
| [out] | d_flags | The output flags array |
| [in] | d_rowindx | The starting index of each row in the "flattened" version of matrix A |
| [in] | numRows | The number of rows in matrix A |
| __global__ void yGather | ( | T * | d_y, | |
| const T * | d_prod, | |||
| const unsigned int * | d_rowFindx, | |||
| unsigned int | numRows | |||
| ) | [inline] |
Gather final y values kernel.
This __global__ device function takes an element from the vector d_rowFindx, which for each row gives the index of the last element of that row, reads the corresponding position in d_prod and write it in d_y
Template parameter T is the datatype of the matrix A and x.
| [out] | d_y | The output result array |
| [in] | d_prod | The input products array (which now contains sums for each row) |
| [in] | d_rowFindx | The starting index of each row in the "flattened" version of matrix A |
| [in] | numRows | The number of rows in matrix A |
| __global__ void vectorAddConstant | ( | T * | d_vector, | |
| T | constant, | |||
| int | n, | |||
| int | baseIndex | |||
| ) | [inline] |
Adds a constant value to all values in the input d_vector.
Each thread adds two pairs of elements.
| [in,out] | d_vector | The array of elements to be modified |
| [in] | constant | The constant value to be added to elements of d_vector |
| [in] | n | The number of elements in the d_vector to be modified |
| [in] | baseIndex | An optional offset to the beginning of the elements in the input array to be processed |
| __global__ void vectorAddUniform | ( | T * | d_vector, | |
| const T * | d_uniforms, | |||
| int | numElements, | |||
| int | blockOffset, | |||
| int | baseIndex | |||
| ) | [inline] |
Add a uniform value to each data element of an array.
This function reads one value per CTA from d_uniforms into shared memory and adds that value to all values "owned" by the CTA in d_vector. Each thread adds two pairs of values.
| [out] | d_vector | The d_vector whose values will have the uniform added |
| [in] | d_uniforms | The array of uniform values (one per CTA) |
| [in] | numElements | The number of elements in d_vector to process |
| [in] | blockOffset | an optional offset to the beginning of this block's data. |
| [in] | baseIndex | an optional offset to the beginning of the array within d_vector. |
| __global__ void vectorAddUniform4 | ( | T * | d_vector, | |
| const T * | d_uniforms, | |||
| int | numElements, | |||
| int | vectorRowPitch, | |||
| int | uniformRowPitch, | |||
| int | blockOffset, | |||
| int | baseIndex | |||
| ) | [inline] |
Add a uniform value to each data element of an array (vec4 version).
This function reads one value per CTA from d_uniforms into shared memory and adds that value to all values "owned" by the CTA in d_vector. Each thread adds the uniform value to eight values in d_vector.
| [out] | d_vector | The d_vector whose values will have the uniform added |
| [in] | d_uniforms | The array of uniform values (one per CTA) |
| [in] | numElements | The number of elements in d_vector to process |
| [in] | vectorRowPitch | For 2D arrays, the pitch (in elements) of the rows of d_vector. |
| [in] | uniformRowPitch | For 2D arrays, the pitch (in elements) of the rows of d_uniforms. |
| [in] | blockOffset | an optional offset to the beginning of this block's data. |
| [in] | baseIndex | an optional offset to the beginning of the array within d_vector. |
| __global__ void vectorAddVector | ( | T * | d_vectorA, | |
| const T * | d_vectorB, | |||
| int | numElements, | |||
| int | baseIndex | |||
| ) | [inline] |
Adds together two vectors.
Each thread adds two pairs of elements.
| [out] | d_vectorA | The left operand array and the result |
| [in] | d_vectorB | The right operand array |
| [in] | numElements | The number of elements in the vectors to be added. |
| [in] | baseIndex | An optional offset to the beginning of the elements in the input arrays to be processed |
| __global__ void vectorSegmentedAddUniform4 | ( | T * | d_vector, | |
| const T * | d_uniforms, | |||
| const unsigned int * | d_maxIndices, | |||
| unsigned int | numElements, | |||
| int | blockOffset, | |||
| int | baseIndex | |||
| ) | [inline] |
Add a uniform value to data elements of an array (vec4 version).
This function reads one value per CTA from d_uniforms into shared memory and adds that value to values "owned" by the CTA in d_vector. The uniform value is added to only those values "owned" by the CTA which have an index less than d_maxIndex. If d_maxIndex for that CTA is UINT_MAX it adds the uniform to all values "owned" by the CTA. Each thread adds the uniform value to eight values in d_vector.
| [out] | d_vector | The d_vector whose values will have the uniform added |
| [in] | d_uniforms | The array of uniform values (one per CTA) |
| [in] | d_maxIndices | The array of maximum indices (one per CTA). This is index upto which the uniform would be added. If this is UINT_MAX the uniform is added to all elements of the CTA. This index is 1-based. |
| [in] | numElements | The number of elements in d_vector to process |
| [in] | blockOffset | an optional offset to the beginning of this block's data. |
| [in] | baseIndex | an optional offset to the beginning of the array within d_vector. |
| __global__ void vectorSegmentedAddUniformToRight4 | ( | T * | d_vector, | |
| const T * | d_uniforms, | |||
| const unsigned int * | d_minIndices, | |||
| unsigned int | numElements, | |||
| int | blockOffset, | |||
| int | baseIndex | |||
| ) | [inline] |
Add a uniform value to data elements of an array (vec4 version).
This function reads one value per CTA from d_uniforms into shared memory and adds that value to values "owned" by the CTA in d_vector. The uniform value is added to only those values "owned" by the CTA which have an index greater than d_minIndex. If d_minIndex for that CTA is 0 it adds the uniform to all values "owned" by the CTA. Each thread adds the uniform value to eight values in d_vector.
| [out] | d_vector | The d_vector whose values will have the uniform added |
| [in] | d_uniforms | The array of uniform values (one per CTA) |
| [in] | d_minIndices | The array of minimum indices (one per CTA). The uniform is added to the right of this index (that is, to every index that is greater than this index). If this is 0, the uniform is added to all elements of the CTA. This index is 1-based to prevent overloading of what 0 means. In our case it means absence of a flag. But if the first element of a CTA has flag the index will also be 0. Hence we use 1-based indices so the index is 1 in the latter case. |
| [in] | numElements | The number of elements in d_vector to process |
| [in] | blockOffset | an optional offset to the beginning of this block's data. |
| [in] | baseIndex | an optional offset to the beginning of the array within d_vector. |