import json from django.shortcuts import render from django.http import HttpResponse
from core.db.manager import DataHubManager from account.auth import *
‘’’ Returns a successful JSON response.
- @param json_dict - A dictionary representing the JSON to be sent to the user. It will be augmented
- with the property, json_dict.success = true
@return An HttpResponse representing the json_dict (augmented with the “success” property). ‘’’ def json_response(json_dict):
json_dict[“success”] = True return HttpResponse(json.dumps(json_dict), content_type=”application/json”)
‘’’ Returns a failure JSON response.
@return An HttpResponse representing the JSON object {
“success”: false
}¶
- def error_response():
- return HttpResponse(json.dumps({“success”: False}), content_type=”application/json”)
‘’’ Return the repos associated with this user.
@param manager - A DataHubManager object associated with the current user.
@return a list of the repo names associated with the current user, or None if there is an error. ‘’’ def get_repos(manager):
result_set = manager.list_repos() if ‘tuples’ in result_set:
repos = [t[0] for t in result_set[‘tuples’]] return reposreturn None
‘’’ Return the tables in a repo associated with this user.
@param manager - A DataHubManager object associated with the current user. @param repo_name - The name of the repo, the user must be associated with this repo.
@return a list of the tables in the repo with name = repo_name. ‘’’ def get_tables(manager, repo_name):
result_set = manager.list_tables(repo_name) if ‘tuples’ in result_set:
tables = [t[0] for t in result_set[‘tuples’]] return tablesreturn None
‘’’ Return the list of repos associated with the current user. If successful, the response is JSON of the form:
- {
- “success”: true, “repos”: [String]
}
If there was a failure, the response is JSON of the form:
- {
- “success”: false
}¶
@login_required def repos(request):
username = get_login(request) manager = DataHubManager(username) repos = get_repos(manager) if repos is not None:
return json_response({“repos”: repos})return error_response()
‘’’ Return the list of tables in the repo associated with the current user. If successful, the response is JSON of the form:
- {
- “success”: true, “tables”: [String]
}
If there was a failure, the response is JSON of the form:
- {
- “success”: false
}¶
@login_required def tables(request, repo_name):
username = get_login(request) manager = DataHubManager(username) repos = get_repos(manager) if repos is not None and repo_name in repos:
tables = get_tables(manager, repo_name) if tables is not None:
return json_response({“tables”: tables})return error_response()
‘’’ Return the schema for the table in the given repo associated with the current user. If successful, the response is JSON of the form:
- {
- “success”: true, “schema”: [[<field_name>String, <field_type>String]]
}
If there was a failure, the response is JSON of the form:
- {
- “success”: false
}¶
@login_required def schema(request, repo_name, table_name):
username = get_login(request) manager = DataHubManager(username) repos = get_repos(manager) if repos is not None and repo_name in repos:
tables = get_tables(manager, repo_name) if tables is not None and table_name in tables:
schema = manager.get_schema(repo_name + ”.” + table_name) if schema is not None and ‘tuples’ in schema:
return json_response({“schema”: schema[“tuples”]})return error_response()


Memorable Day as Hawk Academy Learners Celebrate Mandela Centennial
The 900 learners at the Hawk Academy school in Germiston enjoyed a memorable day last Wednesday while celebrating the historic 100th anniversary of the birth of global icon Nelson Mandela.
Hosted by the Abcon Group Foundation (AGF), who adopted the school in 2013, and run by the Pride Factor life skills academy, the celebrations included a wide range of inspirational activities such as song, dance, artwork, motivational messages, celebrity appearances, interactive tasks with prizes and give-aways while the library and classrooms were painted by volunteers.
Caption: The Soweto Shining Stars performing at the Hawk Academy school in Germiston during the Abcon Group Foundation Mandela Day Centennial Celebrations
Photo: AGF / SVART
“We strive to make every day a Mandela Day and the Abcon Group Foundation found 100 ways to put a smile on the Hawk Academy’s face,” said AGF Managing Director Londiwe Mthembu. ““We don’t only plan to build a school, we plan to create brighter memories for the learners so we fed the kids and dressed them warmly and filled the library pod with over 600 books.
“This is a start of so much more that the Abcon Group Foundation has in store for this school. Education drives our Socio-Economic Development initiatives. Our master plan includes the construction of proper school facilities such as sports fields and school halls to the value of R100 million catering for primary and high school learners.”
The high energy song and dance routines were expertly led by the 22 person Soweto Shining Stars while Doodle Your Future handled all the art requirements that saw the youngsters producing their very own versions of Madiba
Inspirational talks were presented by differently enabled motivational speaker Emily Mabasa, Kay-Dee Mashile from Activate!, television celebrity Candice Modiselle and Pride Factor founder and MD Dene Botha, all of whom gave the learners messages of hope, encouragement and advice.
Caption:: Some of the learners who enjoyed the Mandela Centennial Celebrations hosted by the Abcon Group Foundation at Hawk Academy in Germiston
Photo: AGF / SVART
See gallery of images from the event at https://bit.ly/2NF3Agj
Compiled and Distributed on behalf of:
Pride Factor (Pty) Ltd
C:<PHONE_NUMBER>
#PrideFactorSA
#InspiredYouthSA
www.facebook.com/PrideFactorSA


Home
Accomodations
Activities
Travel Arrangements
Pictures
Contact Us
Accomodation
We have following rooms:
Standard $140/night
Luxury $200/night
President $275/night


Construction
Number of apartments built in Louth so far this year already exceeds 2018 by more than 50%
Central Statistics Office
by Donard McCabeThe number of apartments built in Louth so far this year, has already exceeded the total number built in the county for the whole of 2018 by over 50%, according to figures released by the Central Statistics Office (CSO) today.
So far this year in Louth, 61 apartments have been completed - 33 of them were completed in the third quarter of 2019 (Q3) alone.
This compares to 40 apartments built in Louth in the whole of 2018 and ten in 2017 and represents an increase of 53% on the total number built in 2018.
115 scheme houses were completed in Louth in the third quarter of 2019, an increase of 18 on the same period last year.
37 single houses were also completed in Q3 of this year - the exact same amount as completed in the same period last year.
In total, 185 new dwellings were completed in Louth in Q3 of this year, compared to 138 for Q3 2018 - an increase of 34%.
Should the number of dwellings completed in Louth in the final three months of this year match the number completed in the same period last year, house completions for 2019 for the county would be on track for over an 11% increase on 2018.


CHUSHKA
Home
Create Product
All Orders
Logout
Greetings, userat!
Enjoy your work today!
Second Producst
opaaaaa sd as a
$200
Second Producst
Second Producstdsadasdac asd s fsd fsafd sadf safd...
$200
Second Producst
Second Producst
$345
Second Producst
Second Producst
$345
Second Producst
Second Producst
$432


Home
Works
About
Services
Advertising
Branding
Digital
Print
Contact
Ohh! Page Not Found
It seems we can’t find what you’re looking for. Perhaps searching can help or go back to
Homepage.
submit


Server in the browser closed
alpha
About
Help
Open Source
Server in the browser
Thanks for using Server in the browser.
Try again
.


dust <sequence file> <cutoff>
Dust masks low-compexity regions in sequences in a FASTA sequence file This is recommended in order to prevent such low-complexity regions from distorting the search for motifs, and in motif enrichment analyses using AME. Dust was written by R. Tatusov and D.J. Lipman (unpublished).
The name of a file containing FASTA formatted sequences.
The minimum score for masking low-complexity regions in sequences. By default, the cutoff score is 20. Making the cutoff lower will cause more masking of low-complexity regions.
Dust outputs a FASTA file where all low-complexity regions are changed to runs of the N character.


Marching Band
Home • Woodwinds • Brass • Percussion • Colorguard
What is a Marching Band?
A marching band is a group in which instrumental musicians perform while marching, often for entertainment or competition. Instrumentation typically includes brass, woodwind, and percussion instruments. Most marching bands wear a uniform, often of a military style, that includes an associated school or organization's colors, name or symbol. Most high school marching bands, and some college marching bands, are accompanied by a color guard, a group of performers who add a visual interpretation to the music through the use of props, most often flags rifles, and sabres.
Parts of Band
- Brass
- Woodwinds
- Percussion
- Colorguard
"The best marching band season begins with one step... on your left foot."


link Browser Compatibility
The following is a table represeingting the minimum browser version for the use of jQlipboard. jQlipboard should always work on the latest version of the browsers below. Versions are based on the version required functions were natively introduced to their respective browsers.
| Copying | 42 | 41 | 29 | 12 | 10 |
| Selecting |
1 18 |
1 4 |
9 10.1 |
12 | 1 |
| Pasting | 66 | 63 |
53 47 |
79 |
13.1 13.4 |


Developer SDK
¶
CMP Core
GPU Shaders
Error Codes
Codec Quality Settings
Create and Destroy Options Pointers
Channel Weights
Quality Settings
Alpha Threshold
Mode Masks
Decoder Channel Mapping
BC7 Alpha Options
BC7 Error Threshold
Compressing Blocks
Decompressing Blocks
Example Usage of Core API
CMP Framework
CMP Error Codes
Kernel Options and Extensions
Encoder Settings
Mip Map Interfaces
User Processing Callback
Texture Load and Save
Texture Processing
Using Alternate Frameworks
Block level Access
Format and Processor Utils
Framework Example: Mip Level Processing
Using the Pipeline API Interfaces
Compressonator SDK
Error Codes
Convert Texture
Example Usage of Compressonator API
Texture Compression and Decompression
BC1 Block (S3TC/DXT1)
BC2 Block (DXT2/DXT3)
BC3 Block (DXT4/DXT5)
BC4 Block (ATI1/3Dc+)
BC5 Block (ATI2/3Dc)
BC6H
BC7
Mesh Optimization
Mesh Compression
Helper function
Compressonator
Navigation
Content
Developer SDK
Command Line Tool
GUI Tool
Build from GitHub Sources
Analysis
Revision History
Contact and Support
License
Bibliography
Related Topics
Documentation overview
Previous:
Compressonator
Next:
CMP Core
Quick search


The goal is to build a protocol and system for secure messaging between 2 or more conversants. Those in the conversation will see a "threaded", persistent view, much like Facebook email. Conversants can jump between several clients and machines, and are assumed to have spotty network connectivity.
Though we would ideally like a protocol with Perfect Forward Secrecy, in practice, we can't come up with a useful, convenient, asynchronous PFS protocol that seemlessly supports multiple devices and spotty connectivity. Some protocols achieve Non-Interactive Forward Secrecy, with experimental and challenging cryptography. Others propose a Diffe-Hellman pre-keying approach, which breaks down if adversaries malliciously exhaust pregenerated keys, and futhermore requires $O(m^2n^2)$ network messages per interaction if there are $m$ conversants with $n$ devices each.
In our opinion, the best existing model to consider is Adam Langley's Pond, which provide asynchronous PFS across Tor-routed servers. We think this is a great system, but one that trades off some usability for security. In particular, Pond does not support: (1) multiple devices for user; (2) the ability for strangers to connect; and (3) somewhat tautologically, the ability to archive messages. We think these usability features are more important than PFS, and we're willing to sacrifice PFS to spur widespread adoption.
So we don't shoot for perfect forward-secret, but here are the goals we do hope to achieve:
The message system is decomposed into two systems: (1) an inbox system; and (2) a message-threading system. The inbox system is in charge of notifying users when they have new messages, and keeping track of which message threads they take part in. A user registers for an inbox server just once, and then uses the same inbox server for all future conversations.
A message-threading server manages the specifics of a message thread, which is a series of messages and replies among a fixed set of conversants. The user who initiates the conversation picks the message-threading server, but the conversants can be spread across independent inbox servers.
Users on the system must globally register the following two properties:
Assume that Alice wants to start a conversation with Bob and Charlie. She first picks a threading server that she has some amount of faith in. That could be the one Keybase.io provides, or one she maintains, etc. Alice, Bob and Charlie all communicate with the same server for the purposes of this conversation.
Alice initializes the conversation. She:
0
bytes. She also should not sign the message.
The server receives the message Alice sent in the previous Step. The server writes this information to its database and reserve slots for users $U_0, U_1$ and $U_2$ in conversation $i$. Note that $U_0, U_1$ and $U_2$ are the server's pseudoynms for $A$, $B$ and $C$ on the clients. The server doesn't know the identities of Alice, Bob or Charlie, so it can't refer to them as $A$, $B$, or $C$.
By convention, the clients should always order user IDs from least to highest UID, to that way the correspondence of $A$ to $U_0$, $B$ to $U_1$ etc, is agreed upon by all conversants and the server.
Alice now needs to notify Bob and Charlie that they should check for messages on the server. The notification protocol is susceptible to spammer attacks, so precautions are needed.
Alice looks up the inbox servers that Bob and Charlie registered. As stated above, they can specify such a server in the User-attribute packet of their keys. Alice sends the following message to Bob's inbox server: \[ [\textrm{notify}, B, i_B, E_{K_B}(u), p_B, HMAC_{q_B}([B, i_B, E_{K_B}(u)]) ] \] The parameters are:
https
might eventually be supported.
Bob, Charlie (and Alice if she switched machines) query the server for $[\textrm{key-lookup}, i, j]$, where $j$ is their position in the relative order of user IDs. The server replies with the $j$th encrypted message in conversation $i$ that Alice sent in Step 1. They can now decrypt and recover $k_s, k_m$.
Charlie can ask the server to swap his existing write token $t_B$ for a new token $t'_B$, one that Alice doesn't know. He probably should do this before authenticating himself in Step 4.
Now Alice, Bob and Charlie are ready to store messages on the thread server protected by the keys they share, $k_s$ and $k_m$. For now, we use AES256-encryption in CTR mode, and authenticated with HMAC-SHA512. Given keys $k_s$ and $k_m$ and plaintext $p$, define $E_{k_s,k_m}(p)$ as:
Any user in the conversation can optionally prove their identity and authenticate their messages in the conversation. Without this guarantee, Alice, Bob and Charlie can still converse, but they have no guarantee that they are conversing with authentic people.
Authentication is the same for all conversants, but take Bob for example:
Once Bob has posted this message to the server, all conversants can retrieve it, and verify Bob's signature. Once they do, they have Bob's temporary public key $K'_{B}$.
When Bob wants to send a message $m$ to the group, he computes \[e = E_{k_s,k_m}([m, \sigma_{k'_{B}}([i, m])]) \] That is, he signs the message he wants to post with his temporary signing key, then encrypts using the session key for this conversation. Bob can alternatively send an unauthenticated message to the group, but Alice and Charlie's clients will show the message as unauthenticated.
Bob posts this message to the server as $[\textrm{post}, i, t_B, e]$
The server serializes these messages. Optionally, the clients can sign the sequence number of the last received message when sending new messages. All users in the conversation can request all messages from thread $i$ at any time, though Bob should send a notifiction (see above) to Alice and Charlie when posting a new message to the thread.
Finally, Bob might also include "postage tokens" for Alice and Charlie the encrypted payload of his message. Alice and Charlie can use these tokens to intiate conversations with Bob in the future. See the discussion of postage tokens below for more details.
The server maintains a deletion pointer $l$ for each user $j$ in conversation $i$. Charlie can bump his deletion pointer for thread $i$ to $l$ if he sends a message $[\textrm{delete-msg}, i, t_C, l]$ to the server. Once has been bumped past $l$ by all conversants, the server can delete messages through $l$ in the thread.
Charlie also can ask the server to delete his session keys, via $[\textrm{delete-key}, i, t_C]$. After this point, Alice and Bob need to take the server's word that messages coming from Charlie are indeed from Charlie. Charlie can also, later on, post a new session key if he pleases.
The Inbox server maintains a persistent mapping from a user to a set of active threads, and notifies users of new activities on any of their threads. As such, one of its primary concerns is spam.
To pick up the earlier example, when Alice sends Bob a notification, it's of the form: \[ [\textrm{notify}, B, i_B, E_{K_B}(u), p_B, HMAC_{q_B}([B, i_B, E_{K_B}(u)]) ] \] Where $B$ is the ID of the user receiving a notification (Bob), $i_B$ is Bob's ID for this thread, $u$ is the URL to access the thread, and $[ p_B, q_B ]$ is a postage token that Bob gave to Alice previously.
Upon receiving this message, Bob's inbox server first checks that $[ p_B, q_B ]$ is still a valid postage token. If not, it rejects the message. If yes, then the inbox server will commit the message payload — $E_{K_B}(u)$ — to the database, which Bob can decrypt when he stops by to pick up his messages.
Alice needed one of Bob's "postage tokens" before she could send him a true notification. This restriction exists to prevent spammers or internet trolls from harassing Bob. Bob can issue a token to Alice in one of four ways:
Note that all tokens are individually revocable, and all but the first variety are batch-revocable. That is, Bob can revoke all postage tokens associated with a particular signing key, bitcoin address, or weak password.
Finally, Bob's inbox server will also store his outgoing postage tokens — i.e., those that Alice and Charlie previously issued him. The server stores these tokens encrypted with his public key, since they are passively generated as part of conversations. The server offers an API to Bob's client to "compact" these individually encrypted tokens into a larger object that can be decrypted in one operation.
When the inbox server gets such a message for user $B$, it sends some sort of SMS, push, or plaintext email to Bob that he has new mail waiting for him. The decision is left to the inbox server provider. However, the provider should not send any unencrypted metadata in the push notification, for fear that some passive eavesdropper can intercept it. The push notification might, however, distinguish between an initial contact and a reply in an ongoing thread.
Inbox servers should also provide an interface to retrieval, management and compaction of inboxes. Here are some anticipated RPCs the inbox server should service:


let fragment = processor.transformToFragment(xmldom, document); let div = document.getElementById("divResult"); div.appendChild(fragment); Here, the processor creates a fragment owned by the document object. This enables the fragment to be added to a


[1]
overall we very hard but were very good.
[2]
we opted to our stay there and the lemon sole main.


Police Data Accessibility Project
We'll be up and running
as soon as we can!
Please come back later for
more news about this project.


Sweet Free Stuff
///////////////////////////////////////////
Free Sara Lee Singles at QuickChek
Posted: 13 Oct 2014 08:42 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Sara Lee Singles at QuickChek - Expires 10/20
The post Free Sara Lee Singles at QuickChek appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Small Cheese Pizza at Hungry Howies
Posted: 13 Oct 2014 03:33 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Fill out the form to receive a coupon good for a Free Small Cheese Pizza at
Hungry Howies redeemable before end of the day October 16th.
The post Free Small Cheese Pizza at Hungry Howies appeared first on
SweetFreeStuff.com.
CommentsI ordered pizza tonight from your store in Brandon Florida on …
by kaylon forteYum!!!!! Thank you!!!! by Deanna TwiggWould like to try your
pizza, never had it before by Sharon Antonty by rbFree pizza!! by chrissy
dWant free Pizza by Christie Norton
///////////////////////////////////////////
Free 32oz Fountain Drink at Stripes Stores
Posted: 13 Oct 2014 02:45 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Coupon good for a free 32oz fountain drink at Stripes Stores. Good through
10/14. Check locations.
The post Free 32oz Fountain Drink at Stripes Stores appeared first on
SweetFreeStuff.com.
Commentslov it all by tonda
///////////////////////////////////////////
Free Pink Ribbon Tote for AAA Members
Posted: 13 Oct 2014 12:49 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Fill out the form below or call 1-866-222-7283 (and press 3) to request
your free gift. Offer good 10/01/14 11/30/14 or while supplies last. One
tote bag per household. Allow three to six weeks for delivery. Free Pink
Ribbon Tote for AAA Members
The post Free Pink Ribbon Tote for AAA Members appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Redbox DVD Rental
Posted: 13 Oct 2014 12:34 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free, one-night DVD rental - Enter code: 5HNB7612 Not Valid at kiosk.
Online and today (10/13) only.
The post Free Redbox DVD Rental appeared first on SweetFreeStuff.com.
CommentsCodes works if you reserve thru the mobile app and then
pickup … by AndreaMine didn’t work either, said only can be used at
certain … by MelissaThe Red Box code did not work in Henderson, TX. I
tried two … by karenWorked. If you get the one in Fred Meyer (WA), you
get another … by GitaIf it doesn’t work the heading does say “Good 7/17
only” … by MIkePlus 9 more…
///////////////////////////////////////////
Free Subscription to Black Enterprise Magazine
Posted: 12 Oct 2014 11:41 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free one-year subscription to Black Enterprise
The post Free Subscription to Black Enterprise Magazine appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Huggies Little Snugglers Diapers & Wipes Samples
Posted: 10 Oct 2014 02:01 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Huggies Little Snugglers Diapers Wipes Samples
The post Free Huggies Little Snugglers Diapers Wipes Samples appeared
first on SweetFreeStuff.com.
CommentsIt’s really free I got mines in the mail two weeks ago and
it’s … by Neshalove and need free things. This family doesn’t have much
and … by Judy ToddYes they are really free, I received mine a couple days
ago. No … by MichelleSite not working if you are already a member by
janiceAre they really free ? by maryPlus 8 more…
///////////////////////////////////////////
Free Stand For The Arts Sticker
Posted: 10 Oct 2014 01:56 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free Stand For The Arts Sticker appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Cabinet Latch Starter Kit from Home Made Simple
Posted: 09 Oct 2014 11:36 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
The post Free Cabinet Latch Starter Kit from Home Made Simple appeared
first on SweetFreeStuff.com.
CommentsI like it by Bahjet YousifI like it by Bahjet Yousif
///////////////////////////////////////////
Free Sundown Natural Adult Multi Gummy Sample Packet
Posted: 09 Oct 2014 10:31 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Sundown Natural Adult Multi Gummy Sample Packet
The post Free Sundown Natural Adult Multi Gummy Sample Packet appeared
first on SweetFreeStuff.com.
Commentshave not tried these yet and will give it a go! by Tom RidelFree
free free by Danelle WatsonBuy the bunnies for the kids…so I think I’ll try
them. by DaviaI enjoy gummy candies, so why not Gummy Vitamins? by Becky
PrattThank you! by kathyPlus 8 more…


Nova DB: Search results | ||
| HipparcosID: | {{result.HipparcosID[0] | safe}} | {{result.ProperName[0]}} |
| Constellation: | {{result.ConstellationID[0] | safe}} | |
| Spectral Type: | {{result.SpectralType[0] | safe}} | |
| Distance: | {{result.Distance[0] | safe}} | |
| Coordinates | ||
| RA: | {{result.RA[0] | safe}} | |
| Dec: | {{result.Dec[0] | safe}} | |
| Magnitude: | {{result.Magnitude[0] | safe}} | |
| Absolute Magnitude: | {{result.AbsoluteMagnitude[0] | safe}} | |
| Luminosity: | {{result.Luminosity[0] | safe}} | |
| Variable Star Information | ||
| Minimum Magnitude: | {{result.VariableMinMagnitude[0] | safe}} | |
| Maximum Magnitude: | {{result.VariableMaxMagnitude[0] | safe}} | |
| Companion Stars: | {{result.CompanionID[0] | safe}} | |
| Star System Name: | {{result.BaseName[0] | safe}} | |


Proof verifier
Check the timestamp and the signatures of a file
If the file was proved publicly using the Woleet platform,
then you don't need to provide the proof receipt (as it is retrieved live from the Woleet platform).
Otherwise, you'll be asked to provide the proof receipt
in the Chainpoint format.
verify the existence and get the timestamp of a file
anchored in the Bitcoin blockchain by any Chainpoint compatible tool.
verify the existence, the validity and get the timestamp of a
signature of a file
anchored in the Bitcoin blockchain by any tool compatible with Woleet's
signature anchoring
extension to Chainpoint (also verify the signer identity if provided)


FOBOS Contact
We invite you to participate in FOBOS development!
Please feel free to contact anyone on our leadership team or DM us on Twitter. For access to our internal Slack and Confluence wiki, please contact Kyle Westfall.
Address
UC Observatories
UC Santa Cruz
1156 High Street
Santa Cruz, CA 95064


Scripts: frequency: onDemand, daily, hourly, or event-* (event-pre-deploy, etc.). By default - jobs are run in foreground.
Disk Cleanup: defaults: "maxDepth": 3, "pruneEmptyFolders": false, "pruneByFolder": false.
To test: touch -d "60 days ago" demo_old_file. Path can contain wildcards eg. $processing/*.log ,
$workingFolder/logs/serviceFolder


Class: ServiceContainer
| Defined in: | lib\src\Konsserto\Component\DependencyInjection\ServiceContainer.coffee |
Overview
ServiceContainer injects services in a container accessible on an application
Instance Method Summary
- # (void) setupKernel() Setting up the Kernel configurations
- # (void) setupGlobalAndBundles() Setting up the global and bundles configurations
- # (void) addServiceInstance(services, type = null) Create the services instance a unique time
- # (void) compile(service) Compile the service passed in parameter
- # (void) updateForInjectors() Bound Check if old services (with args) need dependencies from latest registered services /!\ For Kernel purpose only !
- # (void) inject(serviceDefinition, value) Bound Inject a service manually => Need to updateForInjectors after /!\ For Kernel purpose only !
- # (Object) get(name, debug = true) Bound Get service by name
- # (Boolean) has(name) Bound Check if a service exists
- # (ServiceDefinition) getServiceDefinition(name) Bound Get the service definition
- # (ServiceInstance) getServiceInstance(name) Bound Get the service instance
- # (void) set(name, value, args = []) Set a service instance
Constructor Details
#
(void)
constructor(kernel)
Class constructor
Instance Method Details
#
(void)
setupKernel()
Setting up the Kernel configurations
#
(void)
setupGlobalAndBundles()
Setting up the global and bundles configurations
#
(void)
addServiceInstance(services, type = null)
Create the services instance a unique time
#
(void)
compile(service)
Compile the service passed in parameter
#
(void)
updateForInjectors()
Bound
Check if old services (with args) need dependencies from latest registered services /!\ For Kernel purpose only !
#
(void)
inject(serviceDefinition, value)
Bound
Inject a service manually => Need to updateForInjectors after /!\ For Kernel purpose only !
#
(Object)
get(name, debug = true)
Bound
Get service by name
#
(Boolean)
has(name)
Bound
Check if a service exists
#
(ServiceDefinition)
getServiceDefinition(name)
Bound
Get the service definition
#
(ServiceInstance)
getServiceInstance(name)
Bound
Get the service instance
#
(void)
set(name, value, args = [])
Set a service instance


[§113-1] Application. This chapter shall be applicable to the acquisition of real property under the laws of the State for use in any project or program in which federal or federal-aid funds are used. [L 1971, c 32, §1]


Improve developer process. Rocket.Chat moves between your team and apps automatically so you can focus on your most important work.
Many integrations available and counting...
Moving from Atlassian? Learn more


Train Scheduler
A Firebase app to host Train Arrival and Departure data.
Current Train Schedule
Train Name
Destination
Frequency (min)
Next Arrival (EST)
Minutes Away
Add Train
Train Name
Destination
First Train (HH:mm
24-hour
)
Frequency (Minutes)
Submit


<EMAIL_ADDRESS><EMAIL_ADDRESS>BrObjectHelper to work with configuration settings. We suggest to put all your settings into set of config files in the root folder of your project. Good practice is to separate DB settings, project settings and Bright settings. This allow you to exclude DB configs from your version control if you are using it for deploying.
There is one global config object (singleton) accessible via br()->config()
. You can still create own configuration storage if required by $config = new BrConfig();
| Method/property | Description |
|---|---|
If you are using global config, please prepend below methods with br()->config()-> |
|
| set(name, value) | Set configration value. Value could be scalar or array. |
| get() | Get all configuration values |
| get(name, defaultValue) | Get configuration value or default value for this setting. Name could be array path. For example: br()->config()->set('SomeStructuredSetting', array('name' => 'SomeName')); echo(br()->config()->get('SomeStructuredSetting.name')); Output: SomeName |
Again, if you are working with global config object you can use br()->config(name, defaultValue)
instead of br()->config()->get(name, defaultValue)
for simplicity.


Applying the class
.pa-selected
to a row change its background color to be
$color-background-table-row-selected
.
pointer-events
.
(default: false)
Code used for the example above, showing clickable, disabled and selected rows.
{{code}}


Making an Arduino Clock
8/19/2015
I have a old Timex Radio Clock that wasn't cutting it for me. Firstly, the clock was simply too large, leaving no space on my nightstand. Secondly, the clock had so many unnecessary features, like "nature sounds" or the radio. Finally, the LCD display backlight was too dim, probably from age, making it difficult to read in the dark.
So instead of going on Amazon and buying a new clock, I followed the true engineer's motto: build your own.
The Build
The parts and build idea for this project were pretty straightforward, espicially since I had an Arduino Uno acting as the microcontroller. I realize that I could have gone with a more specalized design, using a clock circuit, a CD4026B Counter, and something like a 74AC11008 Quad AND Gate IC, but since I had the Arduino on hand, I decided it would just be easier to work with it (not to mention cheaper, since I'm not buying anything!).
Aside from the Arduino, here are the other parts I used:
- Altoids Tin
- Wires
- 4x Seven Segment Displays
- Small Breadboard
- 100 Ohm Resistors, you can use any value you like, depends on how bright you want. 330 Ohm was the highest I went.
- Arduino Uno
- (Not Pictured) USB Cable
- (Optional) 9V battery
You might be thinking, "Hold up, that's not a Arduino Uno, its painted red!" and you'd be right. It is in fact, a SparkFun RedBoard which I got as part of my university's Intro to Electronics class, but it's basically an Uno clone.
The first thing I did was remove the power headers from the breadboard and place my seven segment displays in the middle of the board. The power headers were taking up too much space and didn't allow me to slide the breadboard between the headers of the Arduino, making the whole assembly thinner.
Next came the really hard part, the wiring, but before I show what I did, we should look at some theory.
CharliePlexing
A problem that comes with using 4 seperate seven segment displays instead of a pre-packaged design is the number of pins that you have to handle. Since we aren't using any IC's, the situation is further complicated. So how do we connect the 30-something pins of our display to the 13 pins of our Arduino? Charlie Allen at Maxim Integrated is one of the people who came up with a solution with his namesake.
CharliePlexing takes advantage of the "tri-state" ablity of these I/O boards. In other words, the "DIGITAL" pins on an Arduino can be in three states: HIGH, LOW (Ground), or HI-IMPEDENCE (Input). HIGH delivers the pin voltage, LOW delivers 0V or ground, while HI-Z acts as an input, or in our case "disconnected".
What Charlie Allen found, and Maxim Integrated later used in their products is that n2-n LED can be driven with n pins. Let's analyze how this works with a circuit that has 6 leds driven by 3 pins.
As you can see, 6 LEDs are wired using only 3 pins, and three resistors. To understand this, let's focus on LED1 and LED3. How can I light LED1 without turning on LED3? It's simple, we set Pin 1 to HIGH, Pin 2 to LOW and Pin 3 to HI-Z. This way, the circuit to Pin 3 never completes, and we have only 1 LED on. In the same way, we can control any LED, or combination of LEDs in the circuit. We apply this same principle on our Seven Segment Displays.
As shown in the image above, 8 Seven segment displays are charlieplexed using 8 pins. This is again accomplished using various pins as ground, source, and HI-z. I applied the same technique to my clock, and charlie plexed 4 seven segment displays. The results looked something like this:
And on the other side...
After the tedious wiring, all that was left was to hook the whole thing up to the arduino and package it in my Altoids Tin. I added 100 Ohm resistors after some testing to see what brightness worked well for me. I also managed to squeeze the breadboard between the AC power port and Digital Pin headers on the Arduino. This saved a lot of vertical space and kept everything well fitting.
After the wiring was complete, it was just a simple matter of programming the darned thing! I accomplished this by creating a byte array for each number, for each seven segment display. Essentially, we need to have specific pins that are on and off (and one at HI-Z) to make a digit appear on a display. However, this could also trigger other displays if we are not careful and cause them to print weird characters. So, you have to individually test your wiring and layout with the byte array you write. There is probably a more efficient way to do this, but manually working my way through each display let me catch wiring errors.
Here's a snippet of the code I used, this prints out the time, on one display, so you only know the minutes. But if this code is expanded to include every display, it will show the correct time.
#include <Time.h> const byte digitalLine[9] = {2,3,4,5,9,10,11,12}; byte digitValue[4]; const byte segmentPattern[10] = { B11111101, B10010000, B11101011, B10111011, B10010111, B00111111, B01111111, B10011000, B11111111, B10111111 }; void setup() { Serial.begin(9600); setTime(16,32,00,2,8,2015); } void loop() { // Display time time_t t = now(); Serial.print(hour(t)); Serial.println(minute(t)); Serial.println((hour(t)*100)+minute(t)); int x = ((hour(t)*100)+minute(t)); // Turn the number to be displayed into 4 digits digitValue[3] = x % 10; digitValue[2] = x / 10 % 10; digitValue[1] = x / 100 % 10; digitValue[0] = x / 1000 % 10; // Briefly light each digit for (byte digit = 0; digit < 4; digit++) { // Set up the segments for this digit for (byte segment = 0; segment < 8; segment++) { byte useSegment = segment; // If this segment's line also happens to be the line controlling // the whole digit, the 9th line will be wired up instead if (segment == digit) useSegment = 8; // look up the value for this segment for this digit if (bitRead(segmentPattern[digitValue[digit]], segment) == 1) { // the segment needs to be on pinMode(digitalLine[useSegment], OUTPUT); digitalWrite(digitalLine[useSegment], LOW); } else { // the segment needs to be off pinMode(digitalLine[useSegment], INPUT); } } // all segments now ready, so switch on the digit pinMode(digitalLine[digit], OUTPUT); digitalWrite(digitalLine[digit], HIGH); // Wait a moment delay(1); // Switch the digit off again pinMode(digitalLine[digit], INPUT); } }
After you fiddle around with the code, you can get a beautiful clock running in no time, and even if it doesn't have the most features, who cares! You made it yourself! Speaking of features, there is tons of room to expand with this project, from buttons to set the time, to an alarm (a simple pezio-buzzer can do that), or maybe you want to build a radio clock. Go crazy, it's your clock after all!
UPDATE:I've uploaded my code to GitHub, you can find the full source here.


NOVEMBER 21ST WE'LL HAVE DRINKS MUSIC AND BBQ AND PARTY.
You are welcome but not required to bring a bottle, side or desert. - No gifts required either.


[1]
Shake to shuffle feature got a normal camera was a low sound quality with cool effects.
[2]
Shake to shuffle feature got a normal camera was a low sound quality with cool ultra slim sized.


Kwame Bonsu nets first competitive goal for Espérance de Tunis
Ghanaian midfielder Kwame Bonsu registered his first competitive goal for Espérance de Tunis as they drew 1-1 with Moroccan side Olympique de Safi in the second leg of the round of 16 in the Arab Champions League on Saturday.
The first leg also ended 1-1 in Morocco three weeks ago.
Bonsu got his name on the scoresheet in 52nd minute at the Stade Olympique de Rades in Tunis to pull parity after the visitors had gone ahead in the first half.
With the tie ending 2-2 on aggregate, the hosts bowed out of the championship after losing 4-2 on penalty shoot-outs.
Olympique de Safi advance to the quarter-finals of the competition.


Do you authorize Emergency Management British Columbia and your Local Emergency Program to communicate with you by email and/or phone regarding your current registration?
Your telephone number and email address will ONLY be used to contact you about your current registration for this emergency event. It is strongly encouraged to provide your telephone number and/or email address as a point of contact, so your local Emergency Support Services (ESS) team can easily support you.
Note: those who provide their email address will receive an ESS File number confirmation email.
If the Registrant is present, always read the entire question out.


Image to use:
Canvas to fill:
Your browser does not support the HTML canvas tag.
Try it
The video element
Your browser does not support the video tag.


Toggle navigation
Home
Contact
Donations
Contact Us Today!
Success
Thanks for contacting us, we will get back to you shortly.
You input incorrect data
First Name
Last Name
E-Mail
Phone #
Address
City
Please select your city
Saint-Petersburg
Moscow
Omsk
Novosibirsk
Website or domain name
To be or not to be
To be
Not
Boxes
Check it
Project Description
Send
Remove textarea
Alert


BC Mapping Source
This structure represents the following BC mapping definition:
cimi.Specimen maps to Specimen: Type maps to type SourceSpecimen maps to parent ReceivedTime maps to receivedTime CollectionTime maps to collection.collected[x] CollectionMethod maps to collection.method CollectionSite maps to http://hl7.org/fhir/StructureDefinition/body-site-instance


the and with for were EGFR cells was that using IAV The clusters virus cluster cell â€". membrane plasma our localization well organization are which []. from molecules (Fig SNA binding found receptor data Fig analysis {background could observed time Cell diffusion confinement number shown used STORM imaging Fig). local not performed AFs also into localizations molecule simulated size their within density labelled margin min then activation here infection nanodomains {border-style Influenza additional concentration confined functional this trajectories â€" Click For LINK file. particle per px;} two #ffffff;} analyzed area between cells. distribution experimental influenza microscopy protein spatial Biology colocalization fixed lateral EGF after before can how population previously (PDF) Using antibodies different further its single surface tracking viruses while (A) IAVs according during each incubated individual microvilli radius random small PBS This activated anti-EGFR average both clustering either free identified imaged probability regions shows viral After STED [], clustered custom increase laser pEGFR signal simulations study test Alexa Dconf Life Nature Sciences but due dwell effect factor infection. large membrane. revealed scale (B). (i.e. Biol. Iconf While about activation. all allow attachment endocytosis have high identify live major medium might model motion only organized precision proteins sample signaling stimulation times virus-cell washed where Biophys Fig), However, Nat Since Virus acid antibodies. bind described detected dorsal estimate fraction glass image indicating infected objective px; receptors region role same such super-resolution {font-family < (A). (B) (MOI ErbB Our Research [,]. clusters, coefficient counted day diameter did domains entry expression factors first fluorescence font-size growth has involved live-cell microscope more nanodomains. nm. overlap particles quantitative results search show sialic slides tested two-color under upon would Î¼M Î¼g/ml Î¼m (see EGFR-mEos. Following Molecular Technologies) allowed analysis, available background clusters. conditions degree detect double; experiments function glycan highly immobile immunostained increased indeed initial kinase largely leads long maps min. neighbor nuclear over primary quantified similar single-virus stable stimulation, temporal thereby these threshold tyrosine use ventral & > (C) (E). (SA -fold All Available: Biol CA>. Cell. DMEM EGFR. F). Fig) Foundation Gefitinib Germany) Interestingly, MatLab Methods. PALM Publishing Scale These across added allows analyze binds border-color border-width cells, classified collected color consistent contact control correlation diluted emission endocytosis. epidermal experiment, filtered find finger-like form heterogeneous higher host hypothesized identification images imaging, information inset). level lifetime lipid low mixed multivalent nanoclusters nanoscale nm) obtained one original panel). pathogens positive provide quantify range recorded remains resolution right round sensitive set sialylated solid; solution spherical sptPALM successful suggest supplemented they three thus trajectory trigger {font-style {font-weight Â°C. (C). (Life (SB (Sigma) (Y) ./nmeth. A). Although B). Chem. Chemical DBSCAN Dfree EGFR, Ezrin Fig, Finally, Group; How IAV, IAV-induced Image Indeed, Individual LudwigK, MOI Membrane One Orthomyxoviruses Proc RT. Receptor Research; Sci Sci. Single Society Such ZhuangX. absence activates affinity agglutinin algorithm analysis. bold camera cell. cellular cluster. coated coefficients colocalize colocalized common compared compartmentalization complex conditions. controlled courier; data. dataset datasets developed dichroic diffusing displacement distance does draftWriting efficient electron em; encounters engage engages enrichment entry. even explore false feature fibronectin-coated filter flat fluorophores four fractions freshly gap gold had hemagglutinin indicated infecting infection, interactions kept kinases label lead leading left light lower mean measured measurements microscopy. mobile much multiple nanocluster needs ng/ml onto optical order originating other out part plots pre-existing pre-formed prepared present prior protrusions provided pt;} red redistribution reflected remained result resulting review sciences seeded serve side simulate simulation single-molecule slides. smaller stacks stimulation. structural supported surface. temperature than together total transfected type until variety viruses: vs. whether will ð�š«t


All three languages are used to create a website to do different functions in it. HTML is used to define the basic structure and the actual content of a page. Then CSS is used to design the page like how everything in the page looks. Javascript (JS) makes a page livelier, or make it user responsive. JS is a programming language which runs in your browser. JS you can perform calculations, logical conditions and all programming functionality. HTML alone cannot do it.
Control flow statements are those that make decisions about what happens in a program. A programmer needs to take care that the conditions used do not contradict one another. A control flow statement modifies a program's control flow. Statements like if...else, switch...case, for, for...in, while and do...while A control structure additional contains another statement which is executed under specified conditions, by modification and/or validation of the environment. Furthermore, loops are structures which repeat their statements while the environment is validated by a given test, or "condition." Lets try to understand with one everyday life process in the following pseudocode:
check time
if (time is 7 am ) then wakeup and brush
else (sleep till 7am go back to check time
Posted: 17 Jan 2016


Merging SSX data in groups with xia2¶
The default behaviour of xia2.ssx
/ xia2.ssx_reduce
is to merge all data into one
merged MTZ file. However there are options to produce separate merged datasets based on
metadata, which can be used for experiments such as dose series experiments.
The most efficient way to process such data in xia2/DIALS is to integrate the data as
standard and then use the features available in xia2.ssx_reduce
to split the images
at the point of merging.
Dose series - the dose_series_repeat option¶
For dose series data, the option dose_series_repeat=
can be used to trigger merging into
n groups based on the image number, e.g.:
xia2.ssx_reduce ../xia2-ssx/batch_*/integrated*.{expt,refl} dose_series_repeat=5
This covers the use case of an experiment where a repeat of n measurements are
made at each location, before moving to the next location and repeating, thus creating a
dataset where each block of n images form a dose series for a particular location/crystal
(and the images are stored sequentially in this manner).
Before merging, the image filepaths from the experiment files are inspected, and the experiments
split accordingly based on their image index from the filepath (the
formula for splitting is image-index modulo repeat = dose
).
For dose_series_repeat=5
, the following directory structure would be created for the merging:
- data_reduction
- merge
- dose_1
- dose_2
- dose_3
- dose_4
- dose_5
with each dose
folder containing a merged MTZ, the dials.merge output, as well as experiment
and reflection files for the images for that particular dose. The experiment and reflection files
can be used as input for subsequent merging jobs, for example with a specified resolution cutoff:
xia2.ssx_reduce steps=merge ../reduce/data_reduction/merge/dose_1/group*.{expt,refl} d_min=2.5
The experiment files can also be used to verify which images were split into which dose group.
Dose series - using a grouping.yml file¶
xia2.ssx
also supports more generalised merging, to support the wide variety of experiments possible
in serial crystallography, which can be specified using a YAML file with formalised definitions. An
equivalent example to the above case is the example yaml file:
metadata:
dose_point: ## <- user-defined metadata name
"path/to/example/image.h5" : "repeat=5" ## <- the format here is image-file : value
grouping:
merge_by: ## <- indicator to xia2 that the following definitions are for merging
values:
- dose_point ## <- reference to the user-defined metadata name above
In the grouping section, the specification is that the dose_point
metadata item should be used for grouping.
The metadata section specifies how the metadata is related to the image file, in this case a sequence
that repeats every 5 images.
To use this form of specifying the groupings, if the above were contained in the file grouping.yml
,
the command would be:
xia2.ssx_reduce ../xia2-ssx/batch_*/integrated*.{expt,refl} grouping=grouping.yml
Note that for grouping images with a file template, the general image template should be provided, with hashes replacing the image numbers, e.g. the ‘image-file’ specified in the YAML file would be “path/to/example/image_#####.cbf”.
The resulting directory structure is similar to above, with each grouping merged in a separate subfolder:
- data_reduction
- merge
- group_1
- group_2
- group_3
- group_4
- group_5
Generalised merge grouping on metadata¶
By formally defining the merge groupings with YAML file, one can generalise to more complicated groupings and options. An example use case is data in HDF5 format with a metadata array which can be used for grouping. The example below demonstates a few valid ways of specifying metadata:
metadata:
dose:
"path/to/example/image1.h5" : "path/to/example/image1.h5:/entry/dose" ## <- format is image-file: file:/path/to/metadata/array
"path/to/example/image2.h5" : "meta2.h5:/entry/dose" ## <- metadata array does not need to be in the image file
"path/to/example/image3.h5" : 0.0 ## <- all images at a dose value of 0.
grouping:
merge_by:
values:
- dose
tolerances:
- 0.1
Note that for prcoessing a dataset containing images from multiple files, each file must have valid definition in the metadata section. The metadata for image1 is an array from the image file, however there is not a strict requirement for the metadata to be contained in the image file. As shown in the definition for image2, the metadata can be contained in a separate H5 file, the only requirement is that the length of the metadata array matches the number of images. The definition for image3 shows a case where the metadata is a constant value for that image file. Although not shown in this example, it is also possible to group by more than one metadata value, if they are specified in the values and metadata sections.
The more formalised definition of merge groupings is intended to support integration into automated
processing infrastructure: experiment control software can write metadata into the image files and generate
the grouping.yml
to be input to xia2.ssx
to correctly group the data in merging. It also facilities
the integration of custom classification of images for merging into processing scripts.


DescriptionDescrete Mathematics is the study of mathematical structures that are fundamentally
discrete rather than continuous.Descrete objects can be enumerated by integers.
More formally descrete mathematics has been characterized as the branch of
mathematics dealing with countable sets.Concepts in descrete mathematics are useful
in studying and describing objects and problems in the branches like computer science.References


Google Stadia game prices revealed – how does it compare?
by Stefan LIt’s launch day for Stadia, Google’s ambitious new game streaming service, and those taking delivery of their Founder’s Edition controller bundles today will be eagerly diving in to see how well the system holds up for them.
Of course, you need games to enjoy on it, and while each Founder’s and Premiere Edition comes with three months of Stadia Pro included, that primarily gives you access to 4K streams and now two free games: Destiny 2: The Collection and (having been added yesterday) Samurai Shodown.
For everything else, you’ll need to pay up. One of the most frustrating things about Google Stadia has been that it’s a closed box to non-subscribers. Can you browse the store out of idle curiosity? Can you heck. You need to download the apps, log in and have a Stadia invite key. Good.
Google promised that their game prices would be comparable to other digital storefronts, and this seems to be the case as they announce the game prices for the games originally intended to be launch titles. Of course, they bumped those numbers up from 12 titles to 22 titles over the weekend, and the other 10 aren’t on the list. Great.
Still, we can at least compare and contrast to other stores, though without access ourselves, only with the US pricing that Google have provided us. Fab.
| Stadia | Stadia Pro | PlayStation | Xbox One | |
| Assassin’s Creed Odyssey | $59.99 | $30.00 | $59.99 | $59.99 |
| Assassin’s Creed Odyssey Ultimate Edition | $119.99 | $60.00 | $119.99 | $119.99 |
| Final Fantasy XV | $39.99 | $29.99 | $49.99* | $34.99* |
| Gylt | $29.99 | – | N/A | N/A |
| Just Dance 2020 | $49.99 | – | $39.99 | $39.99 |
| Kine | $19.99 | – | $19.99 | $19.99 |
| Mortal Kombat 11 | $59.99 | $41.99 | $59.99 | $59.99 |
| Mortal Kombat 11 Premium Edition | $89.99 | $62.99 | $89.99 | $89.99 |
| Red Dead Redemption 2 Launch Edition | $59.99 | – | $59.99 | $59.99 |
| Red Dead Redemption 2 Special Edition | $79.99 | – | $79.99 | $79.99 |
| Red Dead Redemption 2 Ultimate Edition | $99.99 | – | $99.99 | $99.99 |
| Rise of the Tomb Raider | $29.99 | – | $59.99 ($8.99**) | $59.99 |
| Samurai Shodown | $59.99 | – | $59.99 | $59.99 |
| Shadow of the Tomb Raider | $59.99 | – | $59.99 | $59.99 |
| Thumper | $19.99 | – | $19.99 | $19.99 |
| Tomb Raider 2013 | $19.99 | $10.00 | $29.99 ($5.99**) | $29.99 |
* Final Fantasy XV Royal Edition
** PS+ Double Discount sale pricing
As you can see, the pricing matches up relatively consistently with the US region PlayStation and Xbox stores, though there are a few oddities. Final Fantasy XV is cheaper on Xbox One, but much more expensive on PlayStation 4, and this is the Royal Edition that I’m unsure of if it’s available on Stadia. Just Dance 2020 is just more expensive, full stop.
Similarly, though there is Stadia Pro pricing – and all launch day buyers are in Stadia Pro by default for the first three months – the PS+ Double Discount sale in the US is a reminder that Black Friday is just around the corner, with prices for many of these games likely to be slashed on PlayStation and Xbox One.
Oh, and all of this is without mentioning the regularly lower pricing of games at retail.
We went hands on with Google Stadia just ahead of today’s launch, coming away with mixed feelings about the system. Catch our hands on Stadia impressions here. OK, then.
Source: press release


CHICKEN RUN
Review by John Beachem
* * * * 1/2
Directed by: Peter Lord, Nick Park Written by: Peter Lord, Nick Park, Karey Kirkpatrick
The chickens of Tweedy's farm are plotting an escape. They're tired of lives filled with nothing but laying as many eggs as possible or being sent to the chopping block. One courageous chicken, Ginger (Julia Sawalha), leads the group against the evil Mrs. Tweedy (The excellent Miranda Richardson) and the clueless Mr. Tweedy (Tony Haygarth). What Ginger lacks in brilliant escape plans she makes up for in sheer determination. Unfortunately, Mrs. Tweedy has grown tired of the low income from selling eggs and has bought a massive pie making machine ("look at the size of that thing!" one character says in a nice little "Star Wars" homage). As Mrs. Tweedy says, "Chickens go in, pies come out." The chickens grow more and more desperate to escape, but all their plans seem to lead to Ginger being tossed in "the hole". Things are looking bleak until Rocky, the flying rooster (Mel Gibson), shows up. Ginger offers him sanctuary in return for him teaching all the chickens how to fly, so they can escape over the fence to freedom. Of course the one major problem with this plan is that chickens (and roosters) can't fly. This doesn't stop the group from trying, and what follows is a great claymation chicken version of "The Great Escape" (how's that for different?).
Okay, I know what everyone's thinking - how good can a goofy looking movie about claymation chickens possibly be? That's exactly what I was thinking walking into the theater. To say I was shocked by how much I enjoyed "Chicken Run" would be an understatement. I was completely bowled over by how much I loved this movie - with everything from the eccentric characters to the great soundtrack and voice-overs. The one and only complaint I had, and the only thing that kept the film from a full five star rating, was that Lord and Park (of "Wallace and Gromit" fame) allow the film to get a bit too cutesy at times. However, this is a minor complaint about an otherwise great movie. "Chicken Run" is the kind of movie Disney used to be able to make: a film with a perfect blend of childish humor and subtle jokes for the adults. These days Disney grants us movies like "Dinosaur" which look amazing but are aimed entirely at little ones. "Chicken Run" may not look amazing, since we've all seen claymation a thousand times over, but it's far more endearing than "Dinosaur" could ever have hoped to be.
The movie's strongest point is the host of delightfully bizarre characters (this was the strong point in "The Big Lebowski" too, and look what a great movie that was). Rocky could have been your typical heroic seeming phony, but those characters are usually all show on the outside and nothing on the inside. Rocky, on the other hand, is very little on the outside (he still acts like a chicken) and a lot on the inside. Gibson's voice-over is pleasant, but he doesn't add as much to his character as the English actors do to theirs.  The real standout performances (so to speak) come from two of the supporting cast members: Miranda Richardson ("Sleepy Hollow") as the evil Mrs. Tweedy, and Jane Horrocks ("Memphis Belle") as the hysterical chicken, Babs. Miranda Richardson, who I've always found to be a wonderful actress since I first saw her as Queen Elizabeth in the "Blackadder" British comedy series, isn't used as much as I would have liked in "Chicken Run", but she's delightful when present. Jane Horrocks' character, the overweight, flighty (pardon the pun), slightly neurotic Babs is uproariously funny.  She also gets some of the film's best lines like: "Me life flashed before me eyes... that was really boring."
I think one of the things I found so endearing about "Chicken Run" was that the characters may have acted like typical heroes at times, but they were still chickens at heart. Rocky may be all bravado in front of the chickens, but whenever a human comes close to him he starts screaming for Ginger to hide him. Another great scene like this is where one of the lead chickens tries to give her flock courage by saying, "The important thing is not to panic." The chickens immediately react by screeching and running around in circles. The film's other high points include a great, if slightly underused soundtrack; some delightfully over-the-top action sequences (watch for Ginger and Rocky's run in with the pie making machine); and more movie references than I could count ("Star Wars", "Raiders of the Lost Ark", "The Great Escape" just to name a few). To top all this off, the movie runs only 84 minutes in a time when movies running less than 120 are becoming scarce. I'd recommend "Chicken Run" to anyone who likes slightly childish comedies and give it a well earned four and a half out of five stars.
Comments? Send to<EMAIL_ADDRESS>Past reviews can be found at: http://www.all-reviews.com/reviewers/JohnBeachem.htm, http://www.epinions.com/user-elerad?public=yes or http://us.imdb.com/ReviewsBy?John+Beachem
* * * * * - One of the best movies of the year. * * * * - Great flick, try and catch this one. * * * - Okay movie, hits and misses. * * - Pretty bad, see it at your own risk. * - See this one only if you enjoy pain.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


A term used in probability; it means a possible result of a particular activity or experiment.
If throwing a dice the outcomes would be scores of 1, 2, 3, 4, 5, and 6.
If tossing a coin the outcomes would be a head or a tail.
If playing football or netball the outcomes would be either win, lose or a draw.


|
ArkGameFrame
v0.1.0
ArkGameFraime is a lightweight, fast, scalable, distributed module and plugin framework to create a game server easily. Greatly inspired by OGRE and Bigworld.
|
#include <string>
#include "NFMap.h"
#include "NFList.h"
#include "NFDefine.h"
#include "NFCDataList.h"
Go to the source code of this file.
Classes | |
| class | NFCHeartBeatElement |
| A nfc heart beat element. More... | |
| class | NFIHeartBeatManager |
| Manager for nfi heart beats. More... | |


an abstract class is a class that cannot be instantiated but can be inherited. Abstract classes are used to define a characterization that some group of classes will share but each of these classes will have a different implementation of one or more aspects of this characterization.
Take, for example, the Quadrilaterals which are polygons with four sides. All quadrilaterals have four sides , a circumference and an area. but each quadrilateral has a different method of claculating its area (like sqaures and rectangles).So, a Quadrilateral is represented with an abstract class and the Square and the Rectangle are childs of it.
Defining an abstract class is done using classing.Abstract.Class
in the following mannar
var ClassName = classing.Abstract.Class({ /* Your defintion goes here */ });
Note that an abstract class must contain at least one abstract method. These abstract methods are those aspects of the characterization that differ among the group of the classes that share it. To mark a method as abstract its body must be empty and its wrapped with the classing.Abstract
function (or the Abstract
global shortcut) just like what we did with final and static. (If your abstract function is overloaded , each of the instances must have an empty body). Here's an example using the Quadrilateral case:
var Quadrilateral = classing.Abstract.Class({ protected : { side1 : null, side2 : null, side3 : null, side4 : null }, public : { Construct : Function.create(xTyped , [ types(Number,Number,Number,Number), function(a,b,c,d) { this.side1 = a; this.side2 = b; this.side3 = c; this.side4 = d; } ]), Circumference : Final(function(){ return this.side1 + this.side2 + this.side3 + this.side4; }), Area : Abstract(function(){}) } }); var Rectangle = classing.Class.Extends(Quadrilateral)({ public : { Construct : Function.create(xTyped , [ types(Number,Number), function(x,y) { base(x,y,x,y); } ]), Area : function() {return this.side1 * this.side2;} } }); var Square = classing.Class.Extends(Quadrilateral)({ public : { Construct : Function.create(xTyped , [ types(Number), function(s) { base(s,s,s,s); } ]), Area : function(){return this.side1*this.side1;} } });


My name is Jake Holt. I am a first year graduate student at Dartmouth's MCB program. I graduated from the Georgia Institute of Technology in 2020 with a B.S. in Biology. While there I completed an undergraduate thesis in Dr. Peter Yunker's lab under the guidance of Dr. Yunker and Dr. William Ratcliff. When I'm not doing school work, I can be found on my bike, playing viola or guitar, or reading.


Vimuse
HTML5 Media Player
Regular Player
Subtitles & Postroll
Only Audio
Light Skin
Youtube Playlist
Vimeo Playlist
Dailymotion Playlist
Layout Options
Player API
Audio-only Layout


Friend Finder Survey
Let us know a little about yourself
Survey
About You
Name (Required)
Link to Photo Image (Required)
Question 1
How physically big are you?
I'm small and petite
I'm smaller than most sturdily built
I'm average
I'm somewhat bigger than average
I'm XL
Question 2
How aggressive are you?
I'm shy and avoid confrontation
I'm not a troublemaker
I'm in the middle
I'm a little stubborn but I can still listen
Don't you dare mess with me
Question 3
How socialable are you?
I'm generally self-contained
I prefer small group of people
I'm in the middle
I'm outgoing
I'm a social bird
Question 4
How attractive do you think you are? (1 is the least attractive and 5 is highly attractive)
1 (least)
2
3
4
5 (highest)
Question 5
How creative are you? (1 is the least creative and 5 is highly creative)
1 (least)
2
3
4
5 (highest)
Question 6
Your selflessness and cooperation level
1 (least)
2
3
4
5 (highest)
Question 7
How intelligent are you?
1 (least)
2
3
4
5 (highest)
Question 8
How athletic are you?
1 (least)
2
3
4
5 (highest)
Question 9
You think that everyone’s views should be respected regardless of whether they are supported by facts or not.
1 (Strongly Disagree)
2
3
4
5 (Strongly Agree)
Question 10
You feel more energetic after spending time with a group of people.
1 (Strongly Disagree)
2
3
4
5 (Strongly Agree)
Submit
Your Best Match is:
×


---
layout: post
title: All you developers will belong to us
tags:
- Business
- Open Source Software
- Personal Opinion
- Windows
status: publish
type: post
published: true
meta:
_edit_last: '451289'
---
Linux.com :: Why Microsoft cozied up to open source at OSCON
The company [Microsoft] wants to lure those developers back. Its open source play is aimed squarely at them, and at independent software vendors (ISV). They mean potential sales, and Microsoft has embraced the open source development model in order to tempt them away from the open source platform and over to the Windows platform.


| |
Code Coverage |
| |
Lines |
Functions and Methods |
Classes and Traits |
| Total |
|
36.54% |
3556 / 9733 |
|
23.52% |
550 / 2338 |
|
33.49% |
70 / 209 |
| app |
|
76.47% |
390 / 510 |
|
35.71% |
10 / 28 |
|
50.00% |
4 / 8 |
| bootstrap |
|
44.95% |
1183 / 2632 |
|
35.28% |
218 / 618 |
|
56.98% |
49 / 86 |
| vendor |
|
30.09% |
1983 / 6591 |
|
19.03% |
322 / 1692 |
|
14.78% |
17 / 115 |


As modern browsers become more powerful with rich features, building full-blown web applications in JavaScript is not only feasible, but increasingly popular. Based on trends on HTTP Archive, deployed JavaScript code size has grown 45% over the course of the year.
With JavaScript's popularity climbing, our client-side applications are much more complex than before. Application development requires collaboration from multiple developers. Writing maintainable and reusable code is crucial in the new web app era. The Chrome App, with its rich client-side features, is no exception.
Design patterns are important to write maintainable and reusable code. A pattern is a reusable solution that can be applied to commonly occurring problems in software design — in our case — writing Chrome Apps. We recommend that developers decouple the app into a series of independent components following the MVC pattern.
In the last few years, a series of JavaScript MVC frameworks have been developed, such as backbone.js, ember.js, AngularJS, Sencha, Kendo UI, and more. While they all have their unique advantages, each one of them follows some form of MVC pattern with the goal of encouraging developers to write more structured JavaScript code.
MVC offers architectural benefits over standard JavaScript — it helps you write better organized, and therefore more maintainable code. This pattern has been used and extensively tested over multiple languages and generations of programmers.
MVC is composed of three components:
Model is where the application’s data objects are stored. The model doesn’t know anything about views and controllers. When a model changes, typically it will notify its observers that a change has occurred.
To understand this further, let’s use the Todo list app, a simple, one page web app that tracks your task list.
The model here represents attributes associated with each todo item such as description and status. When a new todo item is created, it is stored in an instance of the model.
View is what's presented to the users and how users interact with the app. The view is made with HTML, CSS, JavaScript and often templates. This part of your Chrome App has access to the DOM.
For example, in the above todo list web app, you can create a view that nicely presents the list of todo items to your users. Users can also enter a new todo item through some input format; however, the view doesn’t know how to update the model because that’s the controller’s job.
The controller is the decision maker and the glue between the model and view. The controller updates the view when the model changes. It also adds event listeners to the view and updates the model when the user manipulates the view.
In the todo list web app, when the user checks an item as completed, the click is forwarded to the controller. The controller modifies the model to mark item as completed. If the data needs to be persistent, it also makes an async save to the server. In rich client-side web app development such as Chrome Apps, keeping the data persistent in local storage is also crucial. In this case, the controller also handles saving the data to the client-side storage such as FileSystem API.
There are a few variations of the MVC design pattern such as MVP (Model–View–Presenter) and MVVP(Model–View–ViewModel). Even with the so called MVC design pattern itself, there is some variation between the traditional MVC pattern vs the modern interpretation in various programming languages. For example, some MVC–based frameworks will have the view observe the changes in the models while others will let the controller handle the view update. This article is not focused on the comparison of various implementations but rather on the separation–of–concerns and it's importance in writing modern web apps.
If you are interested in learning more, we recommend Addy Osmani's online book: Learning JavaScript Design Patterns.
To summarize, the MVC pattern brings modularity to application developers and it enables:
There are many different ways of implementing persistence with an MVC framework, each with different trade–offs. When writing Chrome Apps, choose the frameworks with MVC and persistence patterns that feel natural to you and fit you application needs.
Popular in both server–side frameworks like Ruby on Rails, and client-side frameworks like Backbone.js and ember.js, the ActiveRecord pattern places the responsibility for persistence on the model itself and is typically implemented via JSON API.
A slightly different take from having a model handle the persistence is to introduce a separate concept of Store and Adapter API. Store, Model and Adapter (in some frameworks it is called Proxy) work hand by hand. Store is the repository that holds the loaded models, and it also provides functions such as creating, querying and filtering the model instances contained within it.
An adapter, or a proxy, receives the requests from a store and translates them into appropriate actions to take against your persistent data layer (such as JSON API). This is interesting in the modern web app design because you often interact with more than one persistent data layer such as a remote server and browser’s local storage. Chrome Apps provides both Chrome Storage API and HTML 5 fileSystem API for client side storage.
Pros:
Cons:
In this pattern, the controller holds a reference to both the model and a datastore and is responsible for keeping the model persisted. The controller responds to lifecycle events like Load, Save, Delete, and issues commands to the datastore to fetch or update the model.
Pros:
Cons:
In some patterns, there is a supervising controller responsible for navigating between one MVC and another. The AppController decides, for example, that a ‘Back’ button moves the client from an editing screen (which contains MVC widgets/formats), to a settings screen.
In the AppController pattern, the AppController responds to events and changes the app’s current screen by issuing a call to the datastore to load any models needed and constructing all of the matching views and controllers for that screen.
Pros:
Cons:
MVC is crucial to designing Chrome Apps. We recommend the following CSP–Compliant MVC frameworks for writing secure and scalable Chrome Apps:


Multiple File Upload with Progress Tracking and a Transparent Overlay Upload Button
Select Files
Upload Files
Filename
File size
Percent uploaded


Comments
-
Greg Hurrell
Ok, I've done steps 1 and 2.
GRANT DELETE ON the_db.sessions TO pruner@localhost IDENTIFIED BY 'foobar';
Turns out that
DELETE
privileges alone are not enough due to theWHERE
clause in the query:ERROR 1143 (42000): SELECT command denied to user 'pruner'@'localhost' for column 'updated_at' in table 'sessions'
So we add the minimal
SELECT
privilege on the required column only.GRANT SELECT (updated_at) ON the_db.sessions TO pruner@localhost; FLUSH PRIVILEGES;
Now just have to wait for sufficient records to build up and do some performance testing.
-
Greg Hurrell
Ok, so it looks like automated clearing every 30 days is just not going to be an option; it's just too slow:
mysql> select count(*) from sessions; +----------+ | count(*) | +----------+ | 534861 | +----------+ 1 row in set (1.33 sec)
So that's about 6 weeks' sessions. Pruning sessions older than 30 days would delete just over 200k sessions:
mysql> select count(*) from sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY); +----------+ | count(*) | +----------+ | 201177 | +----------+ 1 row in set (0.27 sec)
So I decided to try the deletion:
mysql> DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY);
After several minutes the query was still running and so I decided to throw up a maintenance webpage on the website to reduce contention for the database:
$ mysqladmin -u root -p processlist Enter password: +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+ | 16 | foo | localhost | foo | Sleep | 17 | | | | 17 | foo | localhost | foo | Sleep | 18 | | | | 18 | foo | localhost | foo | Sleep | 16 | | | | 19 | foo | localhost | foo | Sleep | 17 | | | | 20 | foo | localhost | foo | Query | 496 | updating | DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY) | | 25 | root | localhost | | Query | 0 | | show processlist | +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+
By the time the query had been running for 10 minutes I decided to go even further and shut down the background mongrel processes which were sitting idle (not handling any requests because all queries were being directed to the maintenance page, but still with active connections to the database):
$ mysqladmin -u root -p processlist Enter password: +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+ | 20 | foo | localhost | foo | Query | 649 | updating | DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY) | | 28 | root | localhost | | Query | 0 | | show processlist | +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+
After 1000 seconds the query was still running:
$ mysqladmin -u root -p processlist Enter password: +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+ | 20 | foo | localhost | foo | Query | 1000 | updating | DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY) | | 30 | root | localhost | | Query | 0 | | show processlist | +----+----------+-----------+----------+---------+------+----------+------------------------------------------------------------------------------+
So I decided to abort it:
Query aborted by Ctrl+C
But note that the abort didn't take effect immediately; five minutes later it was still in progress:
$ mysqladmin -u root -p processlist Enter password: +----+----------+-----------+----------+---------+------+-------+------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+----------+-----------+----------+---------+------+-------+------------------------------------------------------------------------------+ | 20 | foo | localhost | foo | Query | 1459 | end | DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY) | | 37 | root | localhost | | Query | 0 | | show processlist | +----+----------+-----------+----------+---------+------+-------+------------------------------------------------------------------------------+
So I decided to go a step further and kill the corresponding thread:
$ mysqladmin -u root -p kill 20
After five or six minutes the thread was still lingering:
$ mysqladmin -u root -p processlist Enter password: +----+----------+-----------+----------+---------+------+-------+------------------------------------------------------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+----------+-----------+----------+---------+------+-------+------------------------------------------------------------------------------+ | 20 | foo | localhost | foo | Killed | 1839 | end | DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY) | | 42 | root | localhost | | Query | 0 | | show processlist | +----+----------+-----------+----------+---------+------+-------+------------------------------------------------------------------------------+
But finally exited!
ERROR 1053 (08S01): Server shutdown in progress
So now with the maintenance page up and no other threads in the database I tried once again:
mysql> DELETE FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY); ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 44 Current database: foo Query OK, 201177 rows affected (24 min 46.31 sec)
So as you can see, nearly 25 minutes to execute the query, which is clearly too long to ever turn this into an automated process.
I need to consider two options now:
- Keep fewer sessions in the database and purge them more often (for example, every seven days); will need to test if the lower number of rows in the table leads to sufficiently short queries.
- Alternatively, forget about using the MySQL-backed session store and switch to something that either doesn't need purging (ie. the cookie-based store) or is sufficiently fast (not sure what my options might be there).
-
Greg Hurrell
A little over two months since my last post and just checked the session count: 1,294,381 records. Of those, about two thirds are old enough to be pruned:
mysql> SELECT COUNT(*) FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY); +----------+ | count(*) | +----------+ | 865682 | +----------+ 1 row in set (0.90 sec)
I'm going to shut down the server and prune one more time. I am curious to see if a deletion based on the primary key (the
id
) is any faster.mysql> SELECT id FROM sessions WHERE updated_at < DATE_SUB(CURDATE(), INTERVAL 30 DAY) ORDER BY id DESC LIMIT 1; +---------+ | id | +---------+ | 1066871 | +---------+ 1 row in set (0.89 sec) mysql> DELETE FROM sessions WHERE id < 1066871; Query OK, 865688 rows affected (2 hours 6 min 37.96 sec)
Evidently no faster. Going to audit the codebase for possible security implications of moving to the cookie-backed session store.
-
Greg Hurrell
How would I get a histogram of session sizes in my current database? Would the MySQL
LENGTH
function work?Here's a test done on the staging database:
mysql> CREATE TEMPORARY TABLE session_lengths (id int, session_length int); Query OK, 0 rows affected (0.04 sec) mysql> INSERT INTO session_lengths SELECT id, length(data) FROM sessions; Query OK, 425014 rows affected (53.00 sec) Records: 425014 Duplicates: 0 Warnings: 0 mysql> SELECT session_length, COUNT(*) AS frequency FROM session_lengths GROUP BY session_length ORDER BY frequency DESC; +----------------+-----------+ | session_length | frequency | +----------------+-----------+ | 86 | 378495 | | 139 | 46504 | | 106 | 4 | | 212 | 2 | | 159 | 2 | | 171 | 2 | | 122 | 1 | | 143 | 1 | | 114 | 1 | | 167 | 1 | | 163 | 1 | +----------------+-----------+ 11 rows in set (0.21 sec)
Almost all records are 86 chars (that's the marshalled, encrypted form), with a smallish minority 129 chars, and some outliers. Evidently 86 chars is probably the baseline for an "empty" session; whatever Rails happens to be sticking in there by default, plus the overhead of marshalling, encryption, and encoding.
-
Greg Hurrell
Same thing, except done on production database:
mysql> CREATE TEMPORARY TABLE session_lengths (id int, session_length int); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO session_lengths SELECT id, length(data) FROM sessions; Query OK, 428845 rows affected (2 min 0.11 sec) Records: 428845 Duplicates: 0 Warnings: 0 mysql> SELECT session_length, COUNT(*) AS frequency FROM session_lengths GROUP BY session_length ORDER BY frequency DESC; +----------------+-----------+ | session_length | frequency | +----------------+-----------+ | 86 | 405663 | | 139 | 20927 | | 143 | 451 | | 155 | 339 | | 147 | 302 | | 163 | 183 | | 159 | 142 | | 151 | 131 | | 167 | 119 | | 171 | 114 | | 135 | 107 | | 175 | 83 | | 179 | 60 | | 183 | 56 | | 212 | 28 | | 192 | 24 | | 208 | 21 | | 188 | 21 | | 196 | 18 | | 232 | 16 | | 240 | 7 | | 228 | 6 | | 131 | 5 | | 236 | 4 | | 297 | 4 | | 106 | 3 | | 338 | 2 | | 200 | 2 | | 301 | 1 | | 216 | 1 | | 114 | 1 | | 305 | 1 | | 346 | 1 | | 362 | 1 | | 249 | 1 | +----------------+-----------+ 35 rows in set (0.22 sec)
-
Greg Hurrell
See http://fukamachi.org/wp/2008/09/19/couchdb-session-model-for-rails/ for discussion with Sho about Rails session storage.
-
Greg Hurrell
I'm going to trial the cookie-based store in my staging environment.
Not sure whether this issue will come up, but wanted to save the link here just in case I see any
TamperedWithCookie
errors pop up. -
Greg Hurrell
Yep, first page view was a
TamperedWithCookie
error, seen by the user as an internal server error. Second page view was fine. Existing login session continued uninterrupted because that's not stored in the Rails session anyway. -
Greg Hurrell
To address the
TamperedWithCookie
problem when I go live on the production server will do the following:- Deploy as usual, but before going live...
cap deploy:web:disable
- Edit
session_key
(config file on server) - Go live as normal
This effectively invalidates the session, but given the things that are stored in the session (flashes etc) this is probably not a problem at all.
-
Greg Hurrell
Doing all this has made me realize that the stuff I am storing in the session is totally transitory in nature (redirection counts, "original URI" for login etc) and keeping hold of it for a month at a time is totally unnecessary.
The only thing that I really care about persisting is the login, and that was never stored in the Rails session. So I think I'm going to do some tests on purging the sessions table with really small record counts (1 hour of sessions, for example). Any user preferences which should persist for longer than an hour will go in the user table anyway.

-
Greg Hurrell
One thing which I've discovered is that if you have a page open with a form, wait long enough for your session to be purged on the database, and then try to submit, you'll get the 422.html error page (internally,
InvalidAuthenticityToken
is raised).I'm going to have to clean up the 422.html error template so as not to confuse users and give them a helpful suggestion.
-
Greg Hurrell
I've looked at my web stats to see when the best time of day would be to do this pruning (in the case that I end up doing it once every 24 hours).
For rails.wincent.com:
- quietest hour 5:00 AM EST, traffic (hits) drops to 82% of baseline (average hits per hour)
- busiest hour 11:00 AM EST, traffic (hits) climbs to 120% of baseline
- record hour for last month, traffic rose to 301% of baseline
And for wincent.com (non-Rails part of the site):
- quietest, 1:00 AM EST, 75% of baseline
- busiest, 15:00 PM EST, 128% of baseline
- record, peaked at 909% of baseline
So I'll be testing how slow pruning is once 24 hours of records have built up. If its really slow and could interrupt service or impact performance noticeably I'd prefer to take the hit once per day instead of every hour. But if its fast then I'd rather do it every hour (still keeping 24 hours of records).
-
Greg Hurrell
More test results:
mysql> truncate sessions; Query OK, 51 rows affected (0.03 sec) mysql> SELECT COUNT(*) FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR); +----------+ | COUNT(*) | +----------+ | 571 | +----------+ 1 row in set (0.00 sec) mysql> DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR); Query OK, 571 rows affected (0.75 sec) mysql> SELECT COUNT(*) FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR); +----------+ | COUNT(*) | +----------+ | 9 | +----------+ 1 row in set (0.00 sec) mysql> DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR); Query OK, 13 rows affected (0.03 sec) mysql> DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR); Query OK, 1920 rows affected (0.22 sec) mysql> quit
Summarizing the above, you have:
- We
TRUNCATE
thesessions
table entirely, emptying it. - After just over 24 hours, we check to see how many "stale" sessions (sessions not active in the last 24 hours) exist (971 sessions).
- We
DELETE
those sessions; the query takes 0.75 seconds. - We immediately perform another
DELETE
to see if the query runs any faster when the number of stale sessions is lower (13 sessions that had become stale since the previous query); this time it takes 0.03 seconds. - We wait about three hours and do another
DELETE
; this time we delete 1920 records in 0.22 seconds.
So on the basis of these figures, looks like it will be perfectly safe, performance-wise, to set up an hourly cron job that will prune old sessions (anything over 24 hours without activity).
- We
-
Greg Hurrell
I have two options here for doing this database maintenance from a cronjob:
Either, set up a limited-privileges account solely for the purposes of cleaning up the database; something like:
mysql> GRANT SELECT, DELETE ON database_name.sessions TO purge_user@localhost identified by 'kewl_pass'; mysql> FLUSH PRIVILEGES;
And run this from cron using:
mysql -u purge_user -pkewl_pass \ -e 'DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR)' \ database_name
Or, set up a rake task to do the same using the normal database account already used by the application; something which basically does:
SomeModel.connection.execute 'DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 24 HOUR)'
Although I like the idea of keeping things all "in the app" and not having to create a separate user, I don't like the fact that breakage in the app could prevent the second solution from executing properly. Will have to think about it a little.
-
Greg Hurrell
Ok, in the end going with the second solution (the Rake task) because:
- keeps the maintenance code in the repository, so all code related to the project is together
- avoids creation of additional database account
- avoids duplicate storage of database password
- although loading the Rails environment is heavyweight just to run a tiny Rake task, the task only need run once per hour
- although app breakage will prevent the job from running, consequences of not running are insignificant
Add a comment
Comments are now closed for this issue.