The Elkme Suite
Sending SMS from your Terminal
elkme
elkme is a tool for empowering your UNIX® shell with the ability to send SMS from the command-line using the 46elks API.
You can with minimal effort set up a cronjob to send you a SMS with information about load, the status of the backup-task or the progress of downloading 7½ hours of Norwegian trains (in HD)1.
The idea of elkme is to provide sysadmins, developers and power users with a toolkit to communicate with any phone anywhere at any time from a command-line. SMS is the de facto standard for real-time notifications, and elkme makes using SMS as convenient and accessible as using less.
Installation
Install elkme from the pypi package elkme using pip:
pip install elkme
The source code for elkme is also available on github.com/46elks/elkme and is compatible with Python 2 and 3 (with the sole dependency requests).
You may have to run pip in a virtualenv or as root using sudo if you are trying to install elkme and see something similar to the message below.
OSError: [Errno 13] Permission denied: '/usr/lib/pthon3.5/site-packages/requests-2.9.1.dist-info/DESCRIPTION.rst'
Congratulations, you have now installed elkme!
You can now verify that it works:
elkme --version
elkme 0.4.7 (release date 2016-10-11)
(c) 2015-2016 46elks AB<EMAIL_ADDRESS>Setup
Get started with elkme by registering for a 46elks account and extracting your API keys from the dashboard.
Let elkme generate your configuration file2 for you so you can use elkme whenever you want without having to look for your credentials by using the elkme --saveconf command as seen below.
elkme --saveconf -u (API key) -p
(API secret) --to
(Your Phonenumber)
--from (Your Phonenumber)
elkme "Good morning, upper east side"
elkme Python SDK
elkme isn't just your new best friend when it comes to sending SMS from the command-line, it is also the reference implementation for connecting to the 46elks API from Python.
Note:
The elkme Python SDK is in early-beta and is prone to change with every release.
The elkme.elks module contains a very minimal SDK for connecting to 46elks from Python. There is no particular reason to opt for using the SDK over writing your own implementation based on the requests library as the SDK is only a very thin wrapper around the 46elks API.
Connecting 46elks with Python takes less than 100 LoC and you should browse the code to try to understand how it works.
from elkme.elks import Elks
elks_connector = Elks(('API USERNAME', 'API PASSWORD'))
# Allocate a Swedish number
elks_connector.query_api(data={'country':'se'}, endpoint='Numbers')
# Fetch information about the current user
print(elks_connector.query_api(endpoint='Me'))
Help & Support
Is something broken with elkme or you need support
with 46elks in general, feel free to contact
<EMAIL_ADDRESS>or open a ticket on the GitHub issues page.


Izdanje 1.3.1
Sljedeće promjene su urađene u ovoj verziji:
Ispravke bugova:
Issue 97: Working Directory for Applications
Issue 98: Not possible to cancel check for updates
Issue 100: Alerts tab has 2 'Resend...' right click popups
Issue 104: Display warning dialog, when no root CA certificate exists
Issue 110: Choosing user's language by default, when starting the first time
Issue 112: Provide a way to apply language packs on Mac OS
Issue 121: Session compare report javascript broken in Firefox 3
Issue 123: Cant select https site from Active scan window if theres an http equivalent
Issue 127: CSRF token feature does not work in fuzz - added help explanation for partial fix
Issue 140: The Display options shouldnt include the advanced or windows manager options
SSL Bug which prevented SSL connections from being established in any browser
Known issues:
Mac OS X: Dynamic SSL and Google Chrome
Currently Dynamic SSL is not working when using Google Chrome. This is because of an unresolved known issue with Google Chrome and Mac OS X Keychain. When importing OWASP ZAP's Root CA into the keychain and requesting a SSL website, an "Invalid certificate" error message is shown.
Još vidjeti
| |
Uvod | uvod u ZAP |
| |
Izdanja | the full set of releases |
| |
Zasluge | the people and groups who have made this release possible |


PROJECT
Mortgage Project
Animation CSS
Water Cycle - Long Scroll
YATISH SOMNAME
ART 3870 WEB AUTHORING
WINTER 2017


Excess Correlation Experiment
ORIGIN DOCUMENTATION
ACREW HARDWARE
DOWNLOAD ASSETS
VIEW SCHEMATIC
External DB
Anthropic Technology
INSTRUCTABLES
GITHUB


Find π to the nth digit
A approximation of pi, based on Liu Hui's pi formula
Get π to n decimal places


NETP Trainer - Sulphur, LA
Gulf Coast Business Unit
Job Title:
New Employee Training Facilitator
Reports to :
Division Training Manager
Department:
HR/Training
FSLA Status:
Non-Exempt
Effective Date:
April 27, 2018
ROLE SUMMARY:
The Field Trainer is an active partner in monitoring and delivering Gulf Coast Business Unit training programs. Responsibilities include, but are not limited to, attendance tracking, class scheduling , facilitation, & required record-keeping, and maintaining communication with all departments requiring feedback and information.
Requirements:
Gulf Coast Business Unit
Job Title:
Field Trainer
Page 2
- Facilitates class and proctors exam within state, Circle K, and NRFSP guidelines.
- Assists with completion of state certification for Louisiana classes.
Responsible Vendor
- Schedules, coordinates and conducts Responsible Vendor Classes as designated by the state of the Training Center’s location; and, refresher classes for sites failing compliance checks by any agency.
Store Manager-In-Training (MIT)
- Completes MIT Assessments within region when assigned by Field Training Specialist.
- Provides verbal feedback to MIT, Mentor, Market Manager and Regional Operations Directors when needed after an assessment.
- Provides written re-cap of assessment within 48 hours.
Miscellaneous
- Communicates the following information to Store Managers, Market Managers, and Regional Operations Director via phone and/or email as appropriate:
- Lack of punctuality, ability to arrive in appropriate dress, or skill issues exhibited by New Hires and class attendees.
- Incomplete and missing TrainTracks Courses, NETP Passports to include 30-day Checklist, and other training.
- Incorrect completion of hiring process by Store Managers.
- Makes copies of NETP Passports, Responsible Vendor, Food Safety, and other training materials as needed.
- Maintains a clean and professional work environment in line with store image guidelines by completing the following tasks:
- Daily dusting of desktops, keyboards, other office equipment and furniture.
- Daily vacuuming.
- Daily cleaning of bathrooms.
- Other cleaning as required in training center/store.
- Runs, complies, files, and communicates training reports using existing systems and excel as needed. Dedicated NETP Facilitators will compile reports for their regions and collect reporting from outpost NETP Facilitators.
- Maintains the following training files (for designated Training Centers) or ensures their transport to a designated Training Center (for outpost NETP Facilitators):
- NETP Passport with 30-day Checklist.
- Responsible Vendor Records as required by each state and assigned by Training Manager.
- Food Safety Manager Certificates
Physical Requirements
- Ability to stand and or walk for an entire work shift
- Ability to sit and or drive for up to 6 hours
- Ability to lift and/or carry up to 60 pounds from ground to waist (i.e., supply boxes, papers, computers)
The physical requirements described here are examples of those that must be met by an employee to successfully perform the essential functions of this job. Reasonable accommodations will be considered that might assist those individuals with disabilities in order to perform the essential task and duties.
The above statements reflect the general duties/responsibilities necessary to the job and are not necessarily intended to set forth all of the specific requirements. Additional expectations may be set by the Regional Operations Director. NETP Facilitators report to RODs directly while supporting the Training Department.
NOTE: These expectations may change with the needs of the Business Unit with or without prior notice. Changes may be communicated via email, telephone, or in person.


See this new featurette for Tom Hanks’ ‘A Beautiful Day in the Neighborhood’ (VIDEO)
by BY SERENA KAURLOS ANGELES, Nov 18 — Sony Pictures has released a new featurette for A Beautiful Day in the Neighborhood that stars Tom Hanks as US television legend Fred Rogers.
The story focuses on how a jaded journalist (played by Matthew Rhys) went from being reluctantly assigned to write a profile about Rogers and his Mister Rogers’ Neighborhood show. Along the way, he learns about empathy and kindness, while forming a lifelong friendship with Rogers.
The film also stars Susan Kelechi Watson, Chris Cooper, Enrico Colantoni, Maryann Plunkett, Tammy Blanchard, Wendy Makkena, Sakina Jaffrey and Carmen Cusack.
The synopsis of the film reads: “Two-time Academy Award-winner Hanks portrays Fred Rogers, best known as Mister Rogers, in A Beautiful Day in the Neighbourhood, a timely story of kindness triumphing over cynicism, based on the true story of a friendship between Fred Rogers and journalist Tom Junod. When a jaded magazine writer is assigned a profile of Fred Rogers, he overcomes his scepticism, learning lessons about empathy, kindness, and decency from America’s most beloved neighbour.”
A Beautiful Day in the Neighborhood is set for US release this week.


Without this value, users will have to type "joe@europe" and "annie@japan" (or "europe\joe") by themselves.
This field must be the full user principal name with domain name, like<EMAIL_ADDRESS>or a LDAP-style distinguished name, such as "CN=Joe Chin,OU=europe,DC=contoso,DC=com".
In case you are using DN in the bind, Active Directory requires that the following ten characters are escaped with the backslash "\" escape character if they appear in any of the individual components of a distinguished name.


7 July 2013 - The Ministry of Health (MoH) in Saudi Arabia has announced one additional laboratory-confirmed case and two deaths in previously confirmed cases of Middle East respiratory syndrome coronavirus (MERS-CoV) infection in Saudi Arabia.
The new case is a 56 year-old female from Hafr Al- Batin city, North-eastern region. She is a health care worker with contact of a previously reported laboratory confirmed MERS-CoV case who subsequently recovered and was discharged.
In addition, the two deaths in previously confirmed cases are a 53 year-old citizen from the Eastern Region and a two year-old male from Jeddah.
Globally, from September 2012 to date, WHO has been informed of a total of 80 laboratory-confirmed cases of infection with MERS-CoV, including 44 deaths.
Based on the current situation and available information, WHO encourages all Member States to continue their surveillance for severe acute respiratory infections (SARI) and to carefully review any unusual patterns.
Health care providers are advised to maintain vigilance. Recent travelers returning from the Middle East who develop SARI should be tested for MERS-CoV as advised in the current surveillance recommendations. Specimens from patients’ lower respiratory tracts should be obtained for diagnosis where possible. Clinicians are reminded that MERS-CoV infection should be considered even with atypical signs and symptoms, such as diarrhea, in patients who are immunocompromised.
Health care facilities are reminded of the importance of systematic implementation of infection prevention and control (IPC). Health care facilities that provide care for patients suspected or confirmed with MERS-CoV infection should take appropriate measures to decrease the risk of transmission of the virus to other patients, health care workers and visitors.
All Member States are reminded to promptly assess and notify WHO of any new case of infection with MERS-CoV, along with information about potential exposures that may have resulted in infection and a description of the clinical course. Investigation into the source of exposure should promptly be initiated to identify the mode of exposure, so that further transmission of the virus can be prevented.
WHO does not advise special screening at points of entry with regard to this event nor does it currently recommend the application of any travel or trade restrictions.
WHO continues to closely monitor the situation.


Video: MMA veteran Dustin Long knocks out Marsellos Wilder, brother of Deontay Wilder
by Mookie AlexanderOminous sign? Probably not, but the Wilder family will not have an undefeated night in Las Vegas.
On the FS2 undercard of Deontay Wilder vs. Luis Ortiz 2, Deontay’s brother Marsellos Wilder (5-2-1 NC, 2 KOs) took on Dustin Long (3-1-2, 2 KOs) in a scheduled six-round cruiserweight bout. Marsellos was in control of the fight entering the 4th round, but a big left hook by Dustin Long smoked Marsellos and ended his night early. Referee Jay Nady saw no need to even count, as Wilder was in no condition to continue.
Watch the video of the KO below.
Marsellos turned pro in 2018, winning his first three bouts before he was knocked out this past January by William Deets, who currently has a record of 8-14. Needless to say, it is unlikely that the 30-year-old has what it takes to reach the heights of his brother.
As for Dustin Long, he is actually an MMA fighter who has a record of 8-5, including appearances in Ring of Combat and Valor Fights. The most notable opponent he’s faced is Nah-Shon Burrell, who beat him by decision back in 2016.
Marsellos simply could not handle those MMA angles.


TERMS AND CONDITIONS
I) SupremeBot is not guaranteed to work in any way, and may malfunction in any number of ways, including, but not limited to: not purchasing item, not purchasing correct item, purchasing multiple items, overcharging credit card, etc. We do our best to make the SupremeBot as effective as possible, and it has performed well in our tests, but we cannot be fully certain that it will work perfectly in every case.
II) In essence, SupremeBot is simply a tool that changes the urls, autofills some text, and clicks certain buttons. It does nothing truly finanical and therefore cannot be held liable in any way for any money lost or stolen, including accidental purchases of Supreme clothing.
III) SupremeBot does not store credit card information, or any other information 100% securely. All information entered into the form has inherent risk of being stolen, although Google Chrome storage has certain security capabilities. Never let anyone have access to this chrome account, this extension, or your computer, as they may be able to gain access to your credit card information.
IV) SupremeBot uses several libraries, including Bootstrap, AngularJS, jQuery, and aleritfy, and is not responsible for any of the effects of those libraries, as they may be updated or may change over time. We use the libraries to the best of our ability but cannot guarantee they will always work as intended.
V) SupremeBot puts ALL liability on the user and therefore SupremeBot and its creators cannot be held liable on any counts.


{% set htmlClasses = "mhclg" %} {% set mainContainerClasses = "govuk-width-container-full" %} {% extends "default.html" %} {% from "jinja-components/select/macro.html" import govukSelect %} {% block headEnd %} {{ super() }} {% endblock %} {% block header %} {{ govukHeader(serviceName="Developer contributions", containerClasses="govuk-width-container-full") }} {% endblock %} {% block beforeContent %} {{ super() }} Back {% endblock %} {% block content %}
CIL contributions are only categorised when the money has been spend by the Local Authority on a project.
| Planning application ID | Planning authority | Contribution category | Link | Contribution value |
|---|---|---|---|---|
| YGOX0902 | Borchester Council | Transport | See agreement | £119,458 |
| KOMA9489 | Borchester Council | Transport | See agreement | £449,956 |
| RFFM2899 | Borchester Council | Open space | See agreement | £550,958 |
| EOTL6247 | Borchester Council | Health | See agreement | £502,145 |
| GTZD3480 | Borchester Council | Health | See agreement | £488,472 |
| YGOX1902 | Borchester Council | Transport | See agreement | £119,458 |
| KOMA9589 | Borchester Council | Transport | See agreement | £419,956 |
| RAFM2897 | Borchester Council | Open space | See agreement | £250,958 |
| HOTL6244 | Borchester Council | Health | See agreement | £402,145 |
| HTZD7490 | Borchester Council | Health | See agreement | £533,472 |


Dogdog's Schedule
Join the Dark Side!
Come into the light!
OG
Monday
Eat
Walk
Meet
Daisy
for doggie
date
Wednesday
Bark to to get outside
Chew on a shoe
Dogdog dog park
Friday
Sleep in
Dog training
Swimming at river
Main menu


Landing Page
Special Projects
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.
12/6/2018
This past year a lot has gone on in the world of Ohio athletics. A new videboard was hung up from the ceiling of The Convo, softball hired a new coach and Ohio football finished the regular season 8-4. All of this bodes well for the Ohio athletic department, but as seasons change, so do years.
Here are five things to look for in Ohio athletics in 2019:
The Ohio women’s basketball team is off to a 6-0 start, one of its best in the Bob Boldon era. Still, the Bobcats’ toughest test this season will be against Central Michigan on Wednesday, Jan. 9 at The Convo. The Chippewas made the NCAA Tournament last season after a 96-91 win over Buffalo in the Mid-American Conference Tournament Championship Game. More impressive, CMU went on to win two games in the NCAA Tournament to advance to the Sweet 16, eventually losing to Oregon.
CMU is off to a 7-1 start, and the Bobcats and Chippewas seem to be on a collision course. Their first meeting is set for this January date.
The Bobcats’ baseball team still hasn’t announced their schedule, but this spring they’ll play their first-ever game on the newly installed turf. The upgrade is monumental for the program, most importantly the ability to practice outside in the winter and play home games earlier in the season, which will help the fan base know the team better, too. The installation of turf was only done to the infield, as the outfield will stay grass. Coach Rob Smith has been working on completing the turf project for the past few years.
For Ohio men’s basketball, last season didn’t go how many thought it would with the number of injuries the Bobcats were dealt. This season, the Bobcats are off to a 5-2 start, including a win over rival Marshall. The Bulls and Bobcats will meet days before the 2019 MAC Tournament, and by then we’ll know if Ohio is a threat in Cleveland, or if things will be coming to a close.
Ohio will start spring football in late March or early April. The football program will be entering its 51st season without a MAC Championship, and a few questions will be brought up in spring camp. Javon Hagan announced that he’ll be returning for his redshirt senior season, and quarterback Nathan Rourke will be entering his senior year. Still, Ohio will be without its one-two running back punch of A.J. Ouellette and Maleek Irons, and the Bobcats’ defense will take a hit with multiple leaders leaving due to graduation.
Other questions may arise, and there may be coaching turnover. Ohio will be in good shape, but as usual, there will be areas of focus when spring football gets underway.
Kelsey Boeing | FOR THE POST
Ohio guard Antonio Cowart Jr. drives into the post during the Bobcats’ game against Marshall on Saturday. (FILE)
The “Battle of the Bell” rivalry will be renewed next fall, the first meeting between the two teams since Ohio defeated Marshall at Peden Stadium on Saturday, Sept. 12, 2015. The rivalry has come and gone throughout coach Frank Solich’s tenure in Athens, but it’s been filled with storied games. It’s the only rivalry Ohio plays in where a trophy is on the line, and whenever the two teams meet a large crowd is usually guaranteed.
Landing Page
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.


{% if site.projects %}
The large majority of the code I've written is proprietary and not sharable, but these are some fun projects I've worked on that are available to view.
{% assign projects = site.projects | sort: "order" %} {% for project in projects %}


Muzicast has shutdown successfully
To start Muzicast again:
Windows
On Windows go to the Start --> Programs --> Muzicast --> Start Muzicast
Linux
On Linux you may invoke Muzicast from your desktop environment's menu or run `muzicast` from the terminal.


Piecewise constant from boundaries and interval values.
tf.compat.v1.train.piecewise_constant_decay
tf.compat.v1.train.piecewise_constant( x, boundaries, values, name=None )
Example: use a learning rate that's 1.0 for the first 100001 steps, 0.5 for the next 10000 steps, and 0.1 for any additional steps.
global_step = tf.Variable(0, trainable=False) boundaries = [100000, 110000] values = [1.0, 0.5, 0.1] learning_rate = tf.compat.v1.train.piecewise_constant(global_step, boundaries, values) # Later, whenever we perform an optimization step, we increment global_step.
x
: A 0-D scalar Tensor
. Must be one of the following types: float32
,
float64
, uint8
, int8
, int16
, int32
, int64
.boundaries
: A list of Tensor
s or int
s or float
s with strictly
increasing entries, and with all elements having the same type as x
.values
: A list of Tensor
s or float
s or int
s that specifies the values
for the intervals defined by boundaries
. It should have one more element
than boundaries
, and all elements should have the same type.name
: A string. Optional name of the operation. Defaults to
'PiecewiseConstant'.A 0-D Tensor. Its value is values[0]
when x <= boundaries[0]
,
values[1]
when x > boundaries[0]
and x <= boundaries[1]
, ...,
and values[-1] when x > boundaries[-1]
.
ValueError
: if types of x
and boundaries
do not match, or types of all
values
do not match or
the number of elements in the lists does not match.When eager execution is enabled, this function returns a function which in turn returns the decayed learning rate Tensor. This can be useful for changing the learning rate value across different invocations of optimizer functions.


Camila Cabello Gives a Sexy Performance of 'Living Proof' at AMAs 2019 (Video)
Camila Cabello shows off her sexy side while performing her new single “Living Proof” at the 2019 American Music Awards on Sunday (November 24) at the Microsoft Theater in Los Angeles.
The 22-year-old singer wore white lingerie for her second performance of the night. She also performed “Senorita” with her real-life boyfriend Shawn Mendes. They even won Collaboration of the Year for the song!
PHOTOS: Check out the latest pics of Camila Cabello
“Living Proof” is the latest offering from Camila‘s upcoming studio album, Romance.
Watch Camila Cabello‘s 2019 AMAs performance below!


|
HypePubSub
Hype demo for a publish/subscribe protocol.
|
#include "hype_pub_sub/protocol.h"
Functions | |
| HpbProtocol * | hpb_protocol_create (HypePubSub *hpb) |
| HLByte * | hpb_protocol_send_subscribe_msg (HLByte service_key[], HLByte dest_network_id[]) |
| HLByte * | hpb_protocol_send_unsubscribe_msg (HLByte service_key[], HLByte dest_network_id[]) |
| HLByte * | hpb_protocol_send_publish_msg (HLByte service_key[], HLByte dest_network_id[], char *msg, size_t msg_length) |
| HLByte * | hpb_protocol_send_info_msg (HLByte service_key[], HLByte dest_network_id[], char *msg, size_t msg_length) |
| HLByte * | hpb_protocol_build_packet (int n_fields,...) |
| int | hpb_protocol_receive_msg (HpbProtocol *protocol, HLByte origin_network_id[], HLByte *msg, size_t msg_length) |
| int | hpb_protocol_receive_subscribe_msg (HpbProtocol *protocol, HLByte origin_network_id[], HLByte *msg, size_t msg_length) |
| int | hpb_protocol_receive_unsubscribe_msg (HpbProtocol *protocol, HLByte origin_network_id[], HLByte *msg, size_t msg_length) |
| int | hpb_protocol_receive_publish_msg (HpbProtocol *protocol, HLByte origin_network_id[], HLByte *msg, size_t msg_length) |
| int | hpb_protocol_receive_info_msg (HpbProtocol *protocol, HLByte *msg, size_t msg_length) |
| MessageType | hpb_protocol_get_message_type (HLByte *msg) |
| void | hpb_protocol_destroy (HpbProtocol **protocol) |
| HLByte* hpb_protocol_build_packet | ( | int | n_fields, |
| ... | |||
| ) |
Method to build a packet to be sent through the network.
| n_fields | Number of parameters supplied to the function. We have to supply a number of HpbProtocolPacketField parameters equal to n_fields. |
| HpbProtocol* hpb_protocol_create | ( | HypePubSub * | hpb | ) |
Allocates space for a HpbProtocol struct.
| void hpb_protocol_destroy | ( | HpbProtocol ** | protocol | ) |
Deallocates the space previously allocated for the given HpbProtocol struct.
| protocol | Pointer to the pointer of the HpbProtocol struct to be deallocated. |
| MessageType hpb_protocol_get_message_type | ( | HLByte * | msg | ) |
Analyzes a message and determines its type.
| msg | Message to be analyzed. |
| int hpb_protocol_receive_info_msg | ( | HpbProtocol * | protocol, |
| HLByte * | msg, | ||
| size_t | msg_length | ||
| ) |
Method that processes an info message.
| protocol | Pointer to the HpbProtocol. |
| origin_network_id | ID of the Hype device which sent the message. |
| msg | Received info message. |
| msg_length | Size of the received info message. |
| int hpb_protocol_receive_msg | ( | HpbProtocol * | protocol, |
| HLByte | origin_network_id[], | ||
| HLByte * | msg, | ||
| size_t | msg_length | ||
| ) |
Method called when a message is received.
| protocol | Pointer to the HpbProtocol. |
| origin_network_id | ID of the Hype device which sent the message. |
| msg | Received message. |
| msg_length | Size of the received message. |
| int hpb_protocol_receive_publish_msg | ( | HpbProtocol * | protocol, |
| HLByte | origin_network_id[], | ||
| HLByte * | msg, | ||
| size_t | msg_length | ||
| ) |
Method that processes a publish message.
| protocol | Pointer to the HpbProtocol. |
| origin_network_id | ID of the Hype device which sent the message. |
| msg | Received publish message. |
| msg_length | Size of the received publish message. |
| int hpb_protocol_receive_subscribe_msg | ( | HpbProtocol * | protocol, |
| HLByte | origin_network_id[], | ||
| HLByte * | msg, | ||
| size_t | msg_length | ||
| ) |
Method that processes a subscribe message.
| protocol | Pointer to the HpbProtocol. |
| origin_network_id | ID of the Hype device which sent the message. |
| msg | Received subscribe message. |
| msg_length | Size of the received subscribe message. |
| int hpb_protocol_receive_unsubscribe_msg | ( | HpbProtocol * | protocol, |
| HLByte | origin_network_id[], | ||
| HLByte * | msg, | ||
| size_t | msg_length | ||
| ) |
Method that processes an unsubscribe message.
| protocol | Pointer to the HpbProtocol. |
| origin_network_id | ID of the Hype device which sent the message. |
| msg | Received unsubscribe message. |
| msg_length | Size of the received unsubscribe message. |
| HLByte* hpb_protocol_send_info_msg | ( | HLByte | service_key[], |
| HLByte | dest_network_id[], | ||
| char * | msg, | ||
| size_t | msg_length | ||
| ) |
| HLByte* hpb_protocol_send_publish_msg | ( | HLByte | service_key[], |
| HLByte | dest_network_id[], | ||
| char * | msg, | ||
| size_t | msg_length | ||
| ) |


1. Link your Facebook account.
You can link multiple Facebook account.
2. Choose time to post.
For example 3 times a day, at 11am, 2pm and 8pm.
3. Add your post.
Fill up your queue with post.
4. Sit back and relax.
We will post to Facebook on your behalf according to the time you set.


/* <CoffeeScript> # !TODO: Add summary metrics # !TODO: Be smart enough to move dependent metrics to the deriveFieldsOnOutput utils = require('./utils') functions = require('./functions').functions {arrayOfMaps_To_CSVStyleArray, csvStyleArray_To_ArrayOfMaps} = require('./dataTransform') class OLAPCube </CoffeeScript> */ /** * @class analize.OLAPCube * * __An efficient, in-memory, incrementally-updateable, hierarchy-capable OLAP Cube implementation.__ * * [OLAP Cubes](http://en.wikipedia.org/wiki/OLAP_cube) are a powerful abstraction that makes it easier to do everything * from simple group-by operations to more complex multi-dimensional and hierarchical analysis. This implementation has * the same conceptual ancestry as implementations found in business intelligence and OLAP database solutions. However, * it is meant as a light weight alternative primarily targeting the goal of making it easier for developers to implement * desired analysis. It also supports serialization and incremental updating so it's ideally * suited for visualizations and analysis that are updated on a periodic or even continuous basis. * * ## Features ## * * * In-memory * * Incrementally-updateable * * Serialize (`getStateForSaving()`) and deserialize (`newFromSavedState()`) to preserve aggregations between sessions * * Accepts simple JavaScript Objects as facts * * Storage and output as simple JavaScript Arrays of Objects * * Hierarchy (trees) derived from fact data assuming [materialized path](http://en.wikipedia.org/wiki/Materialized_path) * array model commonly used with NoSQL databases * * ## 2D Example ## * * Let's walk through a simple 2D example from facts to output. Let's say you have this set of facts: * * facts = [ * {ProjectHierarchy: [1, 2, 3], Priority: 1, Points: 10}, * {ProjectHierarchy: [1, 2, 4], Priority: 2, Points: 5 }, * {ProjectHierarchy: [5] , Priority: 1, Points: 17}, * {ProjectHierarchy: [1, 2] , Priority: 1, Points: 3 }, * ] * * The ProjectHierarchy field models its hierarchy (tree) as an array containing a * [materialized path](http://en.wikipedia.org/wiki/Materialized_path). The first fact is "in" Project 3 whose parent is * Project 2, whose parent is Project 1. The second fact is "in" Project 4 whose parent is Project 2 which still has * Project 1 as its parent. Project 5 is another root Project like Project 1; and the fourth fact is "in" Project 2. * So the first fact will roll-up the tree and be aggregated against [1], and [1, 2] as well as [1, 2, 3]. Root Project 1 * will get the data from all but the third fact which will get aggregated against root Project 5. * * We specify the ProjectHierarchy field as a dimension of type 'hierarchy' and the Priorty field as a simple value dimension. * * dimensions = [ * {field: "ProjectHierarchy", type: 'hierarchy'}, * {field: "Priority"} * ] * * This will create a 2D "cube" where each unique value for ProjectHierarchy and Priority defines a different cell. * Note, this happens to be a 2D "cube" (more commonly referred to as a [pivot table](http://en.wikipedia.org/wiki/Pivot_Table)), * but you can also have a 1D cube (a simple group-by), a 3D cube, or even an n-dimensional hypercube where n is greater than 3. * * You can specify any number of metrics to be calculated for each cell in the cube. * * metrics = [ * {field: "Points", f: "sum", as: "Scope"} * ] * * You can use any of the aggregation functions found in Lumenize.functions except `count`. The count metric is * automatically tracked for each cell. The `as` specification is optional unless you provide a custom function. If missing, * it will build the name of the resulting metric from the field name and the function. So without the `as: "Scope"` the * second metric in the example above would have been named "Points_sum". * * You can also use custom functions in the form of `f(values) -> return <some function of values>`. * * Next, we build the config parameter from our dimension and metrics specifications. * * config = {dimensions, metrics} * * Hierarchy dimensions automatically roll up but you can also tell it to keep all totals by setting config.keepTotals to * true. The totals are then kept in the cells where one or more of the dimension values are set to `null`. Note, you * can also set keepTotals for individual dimension and should probably use that if you have more than a few dimensions * but we're going to set it globally here: * * config.keepTotals = true * * Now, let's create the cube. * * {OLAPCube} = require('../') * cube = new OLAPCube(config, facts) * * `getCell()` allows you to extract a single cell. The "total" cell for all facts where Priority = 1 can be found as follows: * * console.log(cube.getCell({Priority: 1})) * # { ProjectHierarchy: null, Priority: 1, _count: 3, Scope: 30 } * * Notice how the ProjectHierarchy field value is `null`. This is because it is a total cell for Priority dimension * for all ProjectHierarchy values. Think of `null` values in this context as wildcards. * * Similarly, we can get the total for all descendants of ProjectHierarchy = [1] regarless of Priority as follows: * * console.log(cube.getCell({ProjectHierarchy: [1]})) * # { ProjectHierarchy: [ 1 ], Priority: null, _count: 3, Scope: 18 } * * `getCell()` uses the cellIndex so it's very efficient. Using `getCell()` and `getDimensionValues()`, you can iterate * over a slice of the OLAPCube. It is usually preferable to access the cells in place like this rather than the * traditional OLAP approach of extracting a slice for processing. However, there is a `slice()` method for extracting * a 2D slice. * * rowValues = cube.getDimensionValues('ProjectHierarchy') * columnValues = cube.getDimensionValues('Priority') * s = OLAPCube._padToWidth('', 7) + ' | ' * s += ((OLAPCube._padToWidth(JSON.stringify(c), 7) for c in columnValues).join(' | ')) * s += ' | ' * console.log(s) * for r in rowValues * s = OLAPCube._padToWidth(JSON.stringify(r), 7) + ' | ' * for c in columnValues * cell = cube.getCell({ProjectHierarchy: r, Priority: c}) * if cell? * cellString = JSON.stringify(cell._count) * else * cellString = '' * s += OLAPCube._padToWidth(cellString, 7) + ' | ' * console.log(s) * # | null | 1 | 2 | * # null | 4 | 3 | 1 | * # [1] | 3 | 2 | 1 | * # [1,2] | 3 | 2 | 1 | * # [1,2,3] | 1 | 1 | | * # [1,2,4] | 1 | | 1 | * # [5] | 1 | 1 | | * * Or you can just call `toString()` method which extracts a 2D slice for tabular display. Both approachs will work on * cubes of any number of dimensions two or greater. The manual example above extracted the `count` metric. We'll tell * the example below to extract the `Scope` metric. * * console.log(cube.toString('ProjectHierarchy', 'Priority', 'Scope')) * # | || Total | 1 2| * # |==============================| * # |Total || 35 | 30 5| * # |------------------------------| * # |[1] || 18 | 13 5| * # |[1,2] || 18 | 13 5| * # |[1,2,3] || 10 | 10 | * # |[1,2,4] || 5 | 5| * # |[5] || 17 | 17 | * * ## Dimension types ## * * The following dimension types are supported: * * 1. Single value * * Number * * String * * Does not work: * * Boolean - known to fail * * Object - may sorta work but sort-order at least is not obvious * * Date - not tested but may actually work * 2. Arrays as materialized path for hierarchical (tree) data * 3. Non-hierarchical Arrays ("tags") * * There is no need to tell the OLAPCube what type to use with the exception of #2. In that case, add `type: 'hierarchy'` * to the dimensions row like this: * * dimensions = [ * {field: 'hierarchicalDimensionField', type: 'hierarchy'} #, ... * ] * * ## Hierarchical (tree) data ## * * This OLAP Cube implementation assumes your hierarchies (trees) are modeled as a * [materialized path](http://en.wikipedia.org/wiki/Materialized_path) array. This approach is commonly used with NoSQL databases like * [CouchDB](http://probablyprogramming.com/2008/07/04/storing-hierarchical-data-in-couchdb) and * [MongoDB (combining materialized path and array of ancestors)](http://docs.mongodb.org/manual/tutorial/model-tree-structures/) * and even SQL databases supporting array types like [Postgres](http://www.monkeyandcrow.com/blog/hierarchies_with_postgres/). * * This approach differs from the traditional OLAP/MDX fixed/named level hierarchy approach. In that approach, you assume * that the number of levels in the hierarchy are fixed. Also, each level in the hierarchy is either represented by a different * column (clothing example --> level 0: SEX column - mens vs womens; level 1: TYPE column - pants vs shorts vs shirts; etc.) or * predetermined ranges of values in a single field (date example --> level 0: year; level 1: quarter; level 2: month; etc.) * * However, the approach used by this OLAPCube implementaion is the more general case, because it can easily simulate * fixed/named level hierachies whereas the reverse is not true. In the clothing example above, you would simply key * your dimension off of a derived field that was a combination of the SEX and TYPE columns (e.g. ['mens', 'pants']) * * ## Date/Time hierarchies ## * * Lumenize is designed to work well with the tzTime library. Here is an example of taking a bunch of ISOString data * and doing timezone precise hierarchical roll up based upon the date segments (year, month). * * data = [ * {date: '2011-12-31T12:34:56.789Z', value: 10}, * {date: '2012-01-05T12:34:56.789Z', value: 20}, * {date: '2012-01-15T12:34:56.789Z', value: 30}, * {date: '2012-02-01T00:00:01.000Z', value: 40}, * {date: '2012-02-15T12:34:56.789Z', value: 50}, * ] * * {Time} = require('tztime') * * config = * deriveFieldsOnInput: [{ * field: 'dateSegments', * f: (row) -> * return new Time(row.date, Time.MONTH, 'America/New_York').getSegmentsAsArray() * }] * metrics: [{field: 'value', f: 'sum'}] * dimensions: [{field: 'dateSegments', type: 'hierarchy'}] * * cube = new OLAPCube(config, data) * console.log(cube.toString(undefined, undefined, 'value_sum')) * # | dateSegments | value_sum | * # |==========================| * # | [2011] | 10 | * # | [2011,12] | 10 | * # | [2012] | 140 | * # | [2012,1] | 90 | * # | [2012,2] | 50 | * * Notice how '2012-02-01T00:00:01.000Z' got bucketed in January because the calculation was done in timezone * 'America/New_York'. * * ## Non-hierarchical Array fields ## * * If you don't specify type: 'hierarchy' and the OLAPCube sees a field whose value is an Array in a dimension field, the * data in that fact would get aggregated against each element in the Array. So a non-hierarchical Array field like * ['x', 'y', 'z'] would get aggregated against 'x', 'y', and 'z' rather than ['x'], ['x', 'y'], and ['x','y','z]. This * functionality is useful for accomplishing analytics on tags, but it can be used in other powerful ways. For instance * let's say you have a list of events: * * events = [ * {name: 'Renaissance Festival', activeMonths: ['September', 'October']}, * {name: 'Concert Series', activeMonths: ['July', 'August', 'September']}, * {name: 'Fall Festival', activeMonths: ['September']} * ] * * You could figure out the number of events active in each month by specifying "activeMonths" as a dimension. * Lumenize.TimeInStateCalculator (and other calculators in Lumenize) use this technique. * * @constructor * @param {Object} config See Config options for details. DO NOT change the config settings after the OLAP class is instantiated. * @param {Object[]} [facts] Optional parameter allowing the population of the OLAPCube with an intitial set of facts * upon instantiation. Use addFacts() to add facts after instantiation. * @cfg {Object[]} dimensions Array which specifies the fields to use as dimension fields. If the field contains a * hierarchy array, say so in the row, (e.g. `{field: 'SomeFieldName', type: 'hierarchy'}`). Any array values that it * finds in the supplied facts will be assumed to be tags rather than a hierarchy specification unless `type: 'hierarchy'` * is specified. * * For example, let's say you have a set of facts that look like this: * * fact = { * dimensionField: 'a', * hierarchicalDimensionField: ['1','2','3'], * tagDimensionField: ['x', 'y', 'z'], * valueField: 10 * } * * Then a set of dimensions like this makes sense. * * config.dimensions = [ * {field: 'dimensionField'}, * {field: 'hierarchicalDimensionField', type: 'hierarchy'}, * {field: 'tagDimensionField', keepTotals: true} * ] * * Notice how a keepTotals can be set for an individual dimension. This is preferable to setting it for the entire * cube in cases where you don't want totals in all dimensions. * * If no dimension config is provided, then you must use syntactic sugar like groupBy. * * @cfg {String} [groupBy] Syntactic sugar for single-dimension/single-metric usage. * @cfg {String} [f] Syntactic sugar for single-dimension/single-metric usage. If provided, you must also provide * a `groupBy` config. If you provided a `groupBy` but no `f` or `field`, then the default `count` metric will be used. * @cfg {String} [field] Syntactic sugar for single-dimension/single-metric usage. If provided, you must also provide * a `groupBy` config. If you provided a `groupBy` but no `f` or `field`, then the default `count` metric will be used. * * @cfg {Object[]} [metrics=[]] Array which specifies the metrics to calculate for each cell in the cube. * * Example: * * config = {} * config.metrics = [ * {field: 'field3'}, # defaults to metrics: ['sum'] * {field: 'field4', metrics: [ * {f: 'sum'}, # will add a metric named field4_sum * {as: 'median4', f: 'p50'}, # renamed p50 to median4 from default of field4_p50 * {as: 'myCount', f: (values) -> return values.length} # user-supplied function * ]} * ] * * If you specify a field without any metrics, it will assume you want the sum but it will not automatically * add the sum metric to fields with a metrics specification. User-supplied aggregation functions are also supported as * shown in the 'myCount' metric above. * * Note, if the metric has dependencies (e.g. average depends upon count and sum) it will automatically add those to * your metric definition. If you've already added a dependency but put it under a different "as", it's not smart * enough to sense that and it will add it again. Either live with the slight inefficiency and duplication or leave * dependency metrics named their default by not providing an "as" field. * * @cfg {Boolean} [keepTotals=false] Setting this will add an additional total row (indicated with field: null) along * all dimensions. This setting can have an impact on the memory usage and performance of the OLAPCube so * if things are tight, only use it if you really need it. If you don't need it for all dimension, you can specify * keepTotals for individual dimensions. * @cfg {Boolean} [keepFacts=false] Setting this will cause the OLAPCube to keep track of the facts that contributed to * the metrics for each cell by adding an automatic 'facts' metric. Note, facts are restored after deserialization * as you would expect, but they are no longer tied to the original facts. This feature, especially after a restore * can eat up memory. * @cfg {Object[]} [deriveFieldsOnInput] An Array of Maps in the form `{field:'myField', f:(fact)->...}` * @cfg {Object[]} [deriveFieldsOnOutput] same format as deriveFieldsOnInput, except the callback is in the form `f(row)` * This is only called for dirty rows that were effected by the latest round of addFacts. It's more efficient to calculate things * like standard deviation and percentile coverage here than in config.metrics. You just have to remember to include the dependencies * in config.metrics. Standard deviation depends upon `sum` and `sumSquares`. Percentile coverage depends upon `values`. * In fact, if you are going to capture values anyway, all of the functions are most efficiently calculated here. * Maybe some day, I'll write the code to analyze your metrics and move them out to here if it improves efficiency. */ /* <CoffeeScript> Maybe some day, I'll write the code to analyze your metrics and move them out to here if it improves efficiency. @config = utils.clone(@userConfig) @cells = [] @cellIndex = {} @currentValues = {} # Syntactic sugar for groupBy if @config.groupBy? @config.dimensions = [{field: @config.groupBy}] if @config.f? and @config.field? @config.metrics = [{field: @config.field, f: @config.f}] utils.assert(@config.dimensions?, 'Must provide config.dimensions.') unless @config.metrics? @config.metrics = [] @_dimensionValues = {} # key: fieldName, value: {} where key: uniqueValue, value: the real key (not stringified) for d in @config.dimensions @_dimensionValues[d.field] = {} unless @config.keepTotals @config.keepTotals = false unless @config.keepFacts @config.keepFacts = false for d in @config.dimensions if @config.keepTotals or d.keepTotals d.keepTotals = true else d.keepTotals = false<EMAIL_ADDRESS>true, true) # Set required fields requiredFieldsObject = {} for m in @config.metrics if m.field?.length > 0 # Should only be false if function is count requiredFieldsObject[m.field] = null @requiredMetricsFields = (key for key, value of requiredFieldsObject) requiredFieldsObject = {} for d in @config.dimensions requiredFieldsObject[d.field] = null @requiredDimensionFields = (key for key, value of requiredFieldsObject) @summaryMetrics = {} @addFacts(facts) @_possibilities: (key, type, keepTotals) -> switch utils.type(key) when 'array' if keepTotals a = [null] else a = [] if type == 'hierarchy' len = key.length while len > 0 a.push(key.slice(0, len)) len-- else # assume it's a tag array if keepTotals a = [null].concat(key) else a = key return a when 'string', 'number' if keepTotals return [null, key] else return [key] @_decrement: (a, rollover) -> i = a.length - 1 a[i]-- while a[i] < 0 a[i] = rollover[i] i-- if i < 0 return false else a[i]-- return true _expandFact: (fact) -> possibilitiesArray = [] countdownArray = [] rolloverArray = [] for d in @config.dimensions p = OLAPCube._possibilities(fact[d.field], d.type, d.keepTotals) if p is undefined console.log(fact) possibilitiesArray.push(p) countdownArray.push(p.length - 1) rolloverArray.push(p.length - 1) # !TODO: If I need some speed, we could calculate the rolloverArray once and make a copy to the countdownArray for each run for m in @config.metrics @currentValues[m.field] = [fact[m.field]] # !TODO: Add default values here. I think this is the only place it is needed. write tests with incremental update to confirm. out = [] more = true while more outRow = {} for d, index in @config.dimensions outRow[d.field] = possibilitiesArray[index][countdownArray[index]] outRow._count = 1 if @config.keepFacts outRow._facts = [fact] for m in @config.metrics outRow[m.as] = m.f([fact[m.field]], undefined, undefined, outRow, m.field + '_') out.push(outRow) more = OLAPCube._decrement(countdownArray, rolloverArray) return out @_extractFilter: (row, dimensions) -> out = {} for d in dimensions out[d.field] = row[d.field] return out _mergeExpandedFactArray: (expandedFactArray) -> for er in expandedFactArray # set _dimensionValues for d in @config.dimensions fieldValue = er[d.field] @_dimensionValues[d.field][JSON.stringify(fieldValue)] = fieldValue # start merge filterString = JSON.stringify(OLAPCube._extractFilter(er, @config.dimensions)) olapRow = @cellIndex[filterString] if olapRow? for m in @config.metrics olapRow[m.as] = m.f(olapRow[m.field + '_values'], olapRow[m.as], @currentValues[m.field], olapRow, m.field + '_') if olapRow._facts? olapRow._facts = olapRow._facts.concat(er._facts) else olapRow = er @cellIndex[filterString] = olapRow @cells.push(olapRow) @dirtyRows[filterString] = olapRow addFacts: (facts) -> </CoffeeScript> */ /** * @method addFacts * @member analize.OLAPCube * Adds facts to the OLAPCube. * * @chainable * @param {Object[]} facts An Array of facts to be aggregated into OLAPCube. Each fact is a Map where the keys are the field names * and the values are the field values (e.g. `{field1: 'a', field2: 5}`). */ /* <CoffeeScript> @dirtyRows = {} if utils.type(facts) == 'array' if facts.length <= 0 return else if facts? facts = [facts] else return if @config.deriveFieldsOnInput for fact in facts for d in @config.deriveFieldsOnInput if d.as? fieldName = d.as else fieldName = d.field fact[fieldName] = d.f(fact) for fact in facts @addMissingFields(fact) @currentValues = {} expandedFactArray = @_expandFact(fact) @_mergeExpandedFactArray(expandedFactArray) # deriveFieldsOnOutput for @dirtyRows if @config.deriveFieldsOnOutput? for filterString, dirtyRow of @dirtyRows for d in @config.deriveFieldsOnOutput if d.as? fieldName = d.as else fieldName = d.field dirtyRow[fieldName] = d.f(dirtyRow) @dirtyRows = {} return this addMissingFields: (fact) -> for field in @requiredMetricsFields if fact[field] is undefined fact[field] = null for field in @requiredDimensionFields unless fact[field]? fact[field] = '<missing>' return fact getCells: (filterObject) -> </CoffeeScript> */ /** * @method getCells * @member analize.OLAPCube * Returns a subset of the cells that match the supplied filter. You can perform slice and dice operations using * this. If you have criteria for all of the dimensions, you are better off using `getCell()`. Most times, it's * better to iterate over the unique values for the dimensions of interest using `getCell()` in place of slice or * dice operations. However, there is a `slice()` method for extracting a 2D slice * @param {Object} [filterObject] Specifies the constraints that the returned cells must match in the form of * `{field1: value1, field2: value2}`. If this parameter is missing, the internal cells array is returned. * @return {Object[]} Returns the cells that match the supplied filter */ /* <CoffeeScript> unless filterObject? return @cells output = [] for c in @cells if utils.filterMatch(filterObject, c) output.push(c) return output getCell: (filter, defaultValue) -> </CoffeeScript> */ /** * @method getCell * @member analize.OLAPCube * Returns the single cell matching the supplied filter. Iterating over the unique values for the dimensions of * interest, you can incrementally retrieve a slice or dice using this method. Since `getCell()` always uses an index, * in most cases, this is better than using `getCells()` to prefetch a slice or dice. * @param {Object} [filter={}] Specifies the constraints for the returned cell in the form of `{field1: value1, field2: value2}. * Any fields that are specified in config.dimensions that are missing from the filter are automatically filled in * with null. Calling `getCell()` with no parameter or `{}` will return the total of all dimensions (if @config.keepTotals=true). * @return {Object[]} Returns the cell that match the supplied filter */ /* <CoffeeScript> unless filter? filter = {} for key, value of filter foundIt = false for d in @config.dimensions if d.field == key foundIt = true unless foundIt throw new Error("#{key} is not a dimension for this cube.") normalizedFilter = {} for d in @config.dimensions if filter.hasOwnProperty(d.field) normalizedFilter[d.field] = filter[d.field] else if d.keepTotals normalizedFilter[d.field] = null else throw new Error('Must set keepTotals to use getCell with a partial filter.') cell = @cellIndex[JSON.stringify(normalizedFilter)] if cell? return cell else return defaultValue getDimensionValues: (field, descending = false) -> </CoffeeScript> */ /** * @method getDimensionValues * @member analize.OLAPCube * Returns the unique values for the specified dimension in sort order. * @param {String} field The field whose values you want * @param {Boolean} [descending=false] Set to true if you want them in reverse order */ /* <CoffeeScript> values = utils.values(@_dimensionValues[field]) values.sort(utils.compare) unless descending values.reverse() return values @roundToSignificance: (value, significance) -> unless significance? return value multiple = 1 / significance return Math.floor(value * multiple) / multiple toString: (rows, columns, metric, significance) -> </CoffeeScript> */ /** * @method toString * @member analize.OLAPCube * Produces a printable table with the first dimension as the rows, the second dimension as the columns, and the count * as the values in the table. * @return {String} A string which will render as a table when written to the console. * @param {String} [rows=<first dimension>] * @param {String} [columns=<second dimension>] * @param {String} [metric='count'] * @param {Number} [significance] The multiple to which you want to round the bucket edges. 1 means whole numbers. * 0.1 means to round to tenths. 0.01 to hundreds. Etc. */ /* <CoffeeScript> unless metric? metric = '_count' if @config.dimensions.length == 1 return<EMAIL_ADDRESS>metric, significance) else return @toStringTwoDimensions(rows, columns, metric, significance) toStringOneDimension: (field, metric, significance) -> rowValues = @getDimensionValues(field) rowValueStrings = (JSON.stringify(r) for r in rowValues) rowLabelWidth = Math.max.apply({}, (s.length for s in rowValueStrings)) rowLabelWidth = Math.max(rowLabelWidth, 'Total'.length, field.length) maxColumnWidth = metric.length valueStrings = [] for r, indexRow in rowValues filter = {} filter[field] = r cell = @getCell(filter) if cell? cellString = JSON.stringify(OLAPCube.roundToSignificance(cell[metric], significance)) else cellString = '' maxColumnWidth = Math.max(maxColumnWidth, cellString.length) valueStrings.push(cellString) maxColumnWidth += 1 fullWidth = rowLabelWidth + maxColumnWidth + 4 s = '| ' + (OLAPCube._padToWidth(field, rowLabelWidth, ' ', true)) + ' |' s += OLAPCube._padToWidth(metric, maxColumnWidth) + ' |' s += '\n|' + OLAPCube._padToWidth('', fullWidth, '=') + '|' for r, indexRow in rowValueStrings s += '\n| ' if r == 'null' s += OLAPCube._padToWidth('Total', rowLabelWidth, ' ', true) else s += OLAPCube._padToWidth(r, rowLabelWidth, ' ', true) s += ' |' + OLAPCube._padToWidth(valueStrings[indexRow], maxColumnWidth) + ' |' if r == 'null' s += '\n|' + OLAPCube._padToWidth('', fullWidth, '-') + '|' return s toStringTwoDimensions: (rows, columns, metric, significance) -> unless rows? rows = @config.dimensions[0].field unless columns? columns = @config.dimensions[1].field rowValues = @getDimensionValues(rows) columnValues = @getDimensionValues(columns) rowValueStrings = (JSON.stringify(r) for r in rowValues) columnValueStrings = (JSON.stringify(c) for c in columnValues) rowLabelWidth = Math.max.apply({}, (s.length for s in rowValueStrings)) rowLabelWidth = Math.max(rowLabelWidth, 'Total'.length) valueStrings = [] maxColumnWidth = Math.max.apply({}, (s.length for s in columnValueStrings)) maxColumnWidth = Math.max(maxColumnWidth, 'Total'.length) for r, indexRow in rowValues valueStringsRow = [] for c, indexColumn in columnValues filter = {} filter[rows] = r filter[columns] = c cell = @getCell(filter) if cell? cellString = JSON.stringify(OLAPCube.roundToSignificance(cell[metric], significance)) else cellString = '' maxColumnWidth = Math.max(maxColumnWidth, cellString.length) valueStringsRow.push(cellString) valueStrings.push(valueStringsRow) maxColumnWidth += 1 s = '|' + (OLAPCube._padToWidth('', rowLabelWidth)) + ' ||' for c, indexColumn in columnValueStrings if c == 'null' s += OLAPCube._padToWidth('Total', maxColumnWidth) + ' |' else s += OLAPCube._padToWidth(c, maxColumnWidth) fullWidth = rowLabelWidth + maxColumnWidth * columnValueStrings.length + 3 if columnValueStrings[0] == 'null' fullWidth += 2 s += '|\n|' + OLAPCube._padToWidth('', fullWidth, '=') for r, indexRow in rowValueStrings s += '|\n|' if r == 'null' s += OLAPCube._padToWidth('Total', rowLabelWidth, ' ', true) else s += OLAPCube._padToWidth(r, rowLabelWidth, ' ', true) s += ' ||' for c, indexColumn in columnValueStrings s += OLAPCube._padToWidth(valueStrings[indexRow][indexColumn], maxColumnWidth) if c == 'null' s += ' |' if r == 'null' s += '|\n|' + OLAPCube._padToWidth('', fullWidth, '-') s += '|' return s slice: (rows, columns, metric, significance) -> </CoffeeScript> */ /** * @method slice * @member analize.OLAPCube * Extracts a 2D slice of the data. It outputs an array of arrays (JavaScript two-dimensional array) organized as the * C3 charting library would expect if submitting row-oriented data. * * Note, the calling parameters and output of this function are very similar to the 2D toString() function output * except the data is organized as a two-dimensional array instead of newline-separated lines and the cells are * filled with actual values instead of padded string representations of those values. * @return {[[]]} An array of arrays with the one row for the header and each row label * @param {String} [rows=<first dimension>] * @param {String} [columns=<second dimension>] * @param {String} [metric='count'] * @param {Number} [significance] The multiple to which you want to round the bucket edges. 1 means whole numbers. * 0.1 means to round to tenths. 0.01 to hundreds. Etc. */ /* <CoffeeScript> unless rows? rows = @config.dimensions[0].field unless columns? columns = @config.dimensions[1].field unless metric? metric = '_count' rowValues = @getDimensionValues(rows) columnValues = @getDimensionValues(columns) values = [] topRow = [] topRow.push(rows) for c, indexColumn in columnValues if c is null topRow.push('Total') else topRow.push(c) values.push(topRow) for r, indexRow in rowValues valuesRow = [] if r is null valuesRow.push('Total') else valuesRow.push(r) for c, indexColumn in columnValues filter = {} filter[rows] = r filter[columns] = c cell = @getCell(filter) if cell? cellValue = OLAPCube.roundToSignificance(cell[metric], significance) else cellValue = null valuesRow.push(cellValue) values.push(valuesRow) return values @_padToWidth: (s, width, padCharacter = ' ', rightPad = false) -> if s.length > width return s.substr(0, width) padding = new Array(width - s.length + 1).join(padCharacter) if rightPad return s + padding else return padding + s getStateForSaving: (meta) -> </CoffeeScript> */ /** * @method getStateForSaving * @member analize.OLAPCube * Enables saving the state of an OLAPCube. * @param {Object} [meta] An optional parameter that will be added to the serialized output and added to the meta field * within the deserialized OLAPCube * @return {Object} Returns an Ojbect representing the state of the OLAPCube. This Object is suitable for saving to * to an object store. Use the static method `newFromSavedState()` with this Object as the parameter to reconstitute the OLAPCube. * * facts = [ * {ProjectHierarchy: [1, 2, 3], Priority: 1}, * {ProjectHierarchy: [1, 2, 4], Priority: 2}, * {ProjectHierarchy: [5] , Priority: 1}, * {ProjectHierarchy: [1, 2] , Priority: 1}, * ] * * dimensions = [ * {field: "ProjectHierarchy", type: 'hierarchy'}, * {field: "Priority"} * ] * * config = {dimensions, metrics: []} * config.keepTotals = true * * originalCube = new OLAPCube(config, facts) * * dateString = '2012-12-27T12:34:56.789Z' * savedState = originalCube.getStateForSaving({upToDate: dateString}) * restoredCube = OLAPCube.newFromSavedState(savedState) * * newFacts = [ * {ProjectHierarchy: [5], Priority: 3}, * {ProjectHierarchy: [1, 2, 4], Priority: 1} * ] * originalCube.addFacts(newFacts) * restoredCube.addFacts(newFacts) * * console.log(restoredCube.toString() == originalCube.toString()) * # true * * console.log(restoredCube.meta.upToDate) * # 2012-12-27T12:34:56.789Z */ /* <CoffeeScript> out = config: @userConfig # cellsAsCSVStyleArray: arrayOfMaps_To_CSVStyleArray(@cells) cells: @cells summaryMetrics: @summaryMetrics if meta? out.meta = meta return out @newFromSavedState: (p) -> </CoffeeScript> */ /** * @method newFromSavedState * @member analize.OLAPCube * Deserializes a previously stringified OLAPCube and returns a new OLAPCube. * * See `getStateForSaving()` documentation for a detailed example. * * Note, if you have specified config.keepFacts = true, the values for the facts will be restored, however, they * will no longer be references to the original facts. For this reason, it's usually better to include a `values` or * `uniqueValues` metric on some ID field if you want fact drill-down support to survive a save and restore. * @static * @param {String/Object} p A String or Object from a previously saved OLAPCube state * @return {OLAPCube} */ /* <CoffeeScript> if utils.type(p) is 'string' p = JSON.parse(p) cube = new OLAPCube(p.config) cube.summaryMetrics = p.summaryMetrics if p.meta? cube.meta = p.meta if p.cellsAsCSVStyleArray? cube.cells = csvStyleArray_To_ArrayOfMaps(p.cellsAsCSVStyleArray) else cube.cells = p.cells cube.cellIndex = {} cube._dimensionValues = {} for d in cube.config.dimensions cube._dimensionValues[d.field] = {} for c in cube.cells filterString = JSON.stringify(OLAPCube._extractFilter(c, cube.config.dimensions)) # rebuild cellIndex cube.cellIndex[filterString] = c # rebuild _dimensionValues for d in cube.config.dimensions fieldValue = c[d.field] cube._dimensionValues[d.field][JSON.stringify(fieldValue)] = fieldValue return cube exports.OLAPCube = OLAPCube </CoffeeScript> */


Authorize this device to access your SmartThings account. Edit the NodeMCU SmartThings SmartApp in the SmartThings web based IDE. Scroll down to the the OAuth section and copy the Client ID and Client Secret here.


gradle farmStop
farmStop sends "stop" command to a running servlet-container process.
farmStop does not build source code, it only sends "stop" command to localhost:servicePort. Usually farmStop is used to stop servlet-container process started by farmStart[War][Debug].
|
Warning
|
do not try to stop servlet-container process with farmStop, if it was started with appStart[War][Debug] or with farmStart[War][Debug] from another farm. Reason is simple: each farm may define it’s own set of TCP-ports in farm configuration, so farmStop may be sending a command to incorrect port, when paired with wrong start task. |


{% extends "sketch/index.html" %} {% block content %}
This Privacy Policy governs the manner in which Whiteboard collects, uses, maintains and discloses information collected from users (each, a "User") of the whiteboardcmu.heroku.com website ("Site"). This privacy policy applies to the Site and all products and services offered by Whiteboard.
Personal identification information
We may collect personal identification information from Users in a variety of ways in connection with activities, services, features or resources we make available on our Site.. Users may visit our Site anonymously. We will collect personal identification information from Users only if they voluntarily submit such information to us. Users can always refuse to supply personally identification information, except that it may prevent them from engaging in certain Site related activities.
Non-personal identification information
We may collect non-personal identification information about Users whenever they interact with our Site. Non-personal identification information may include the browser name, the type of computer and technical information about Users means of connection to our Site, such as the operating system and the Internet service providers utilized and other similar information.
Web browser cookies
Our Site may use "cookies" to enhance User experience. User's web browser places cookies on their hard drive for record-keeping purposes and sometimes to track information about them. User may choose to set their web browser to refuse cookies, or to alert you when cookies are being sent. If they do so, note that some parts of the Site may not function properly.
How we use collected information
Whiteboard may collect and use Users personal information for the following purposes:
- To improve our Site
We may use feedback you provide to improve our products and services.
- To send periodic emails
We may use the email address to send them information and updates pertaining to their order.
How we protect your information
We adopt appropriate data collection, storage and processing practices and security measures to protect against unauthorized access, alteration, disclosure or destruction of your personal information, username, password, transaction information and data stored on our Site.
Sharing your personal information
We do not sell, trade, or rent Users personal identification information to others. We may share generic aggregated demographic information not linked to any personal identification information regarding visitors and users with our business partners, trusted affiliates and advertisers for the purposes outlined above.
Changes to this privacy policy
Whiteboard has the discretion to update this privacy policy at any time. When we do, we will revise the updated date at the bottom of this page. We encourage Users to frequently check this page for any changes to stay informed about how we are helping to protect the personal information we collect. You acknowledge and agree that it is your responsibility to review this privacy policy periodically and become aware of modifications.
Your acceptance of these terms
By using this Site, you signify your acceptance of this policy. If you do not agree to this policy, please do not use our Site. Your continued use of the Site following the posting of changes to this policy will be deemed your acceptance of those changes.
Contacting us
If you have any questions about this Privacy Policy, the practices of this site, or your dealings with this site, please contact us at:
Whiteboard
whiteboardcmu.heroku.com
This document was last updated on November 25, 2014


@* @params litters is a sequence of tuples. The first element is the litterText and the second element is the "-- author @ time" string *@ @(litters: Seq[(String,String)]) @main("Litter"){
@litter._1
@litter._2


Hi, I'm Tim! I’m currently a new grad from Georgia Tech with a B.S. in Computer Science with concentrations in Media and Databases. I spend a majority of my free time around fitness, sports, music, food reviewing, fashion, and meeting others!
I'm extremely passionate about helping the mentally ill in our society today. I want to erase this stigma around mental health that causes people to be labeled "crazy" and scared to come forward and receive the help they so desperately need. Instead of
kicking them while they are down, we should be helping them back up. It's socially acceptable to take medicine for high blood pressure, yet isn't deemed okay by society to take medicine for the most important part of the
human body: the brain. 800,000 people a year die from suicide every single year and I'm determined to lower that statistic. I've given speeches, organized on-campus awareness events, and have challenged peoples perspectives.
However, that's not enough. Many of these people aren't lucky enough to come from a privileged socioeconomic background. While they are just trying to recover from their illnesses many are faced with the daunting prospect
of finding their next meal or a roof over their heads.
I aim to merge my passions in Computer Science and passion to help the "outcasts" of our society by creating technology to help those in rehabilitation facilities access the support they need easier. Accessing resources such as homeless shelters, food
banks, partial hospitalization programs, and support groups like AA are NA are objectively much more difficult to do without access to internet, laptops, or technological conveniences that we take for granted. There are
many other solutions that could be created that could streamline and improve the rehabilitation process. I believe that our society is able to change in a positive direction and I plan to facilitate that for the rest of
my life.


Tabler comes with tons of well-designed components and features.
Clear and telling code that you won't get lost in. It was made with care and loves so that you don't have to spend hours on making it work <3
You can see the code of Tabler on its GitHub account. If you miss any feature feel free to create a pull request there, we'll definitely check it.
We used CSS3 for most of our components to avoid using unnecessary JavaScript libraries. All this to make it fast, reliable and pleasant to use by everyone!
Tabler used Bootstrap, the most popular HTML, CSS, and JS framework. Thanks to this developers without experience can modify code without any problems.
Tabler is build with the newest version of Feather icons made by Cole Bemis. Each icon is designed with an emphasis on simplicity, consistency and readability.


So this is going to be interesting on how this works… We are going to use the native Plesk Backup Manager, but we are going to choose the FTP solution and the server will essentially FTP the backup file to itself. Sounds very strange, but there are a few reasons why I did it this way which we will discover as we go through the set up.
Here is an image that essentially demonstrates our full server backup:
Now since we have the logic down, we have to create a Subscription to store our backups. But before we do that, we need to make sure that we have a Plan that will allow us to do that. Plesk would get quite emotional if we tried to store our 5GB backup in a plan that only allowed 1GB. To do this, select Service Plans, choose Add New Plan. Set the name to S3 Backup and make sure that you allow Unlimited storage a subscription and Traffic (you can choose whatever subdomain that you want). It would also be a wise choice to set the notifications to make sure that your subscription does not get out of control. Set these values to whatever you think suits your server best. Since our backups will be MOVED (not copy) to Amazon S3, we don’t have to worry about the subscription keeping an archive of backups.
Once you have the Service Plan created, it’s now time to create the Subscription. You can use any domain that you would like, but it just has to exist and have the DNS properly pointed to your server’s IP address. Once you have your domain configured, create the Subscription and assign it to the new plan that we created.
Once the subscription is created, let’s lock down that subscription so we don’t have any data leaks. We won’t be needing any web hosting, only FTP:
Now that we have the web hosting disabled, we can create our directories for our backup (be sure to change the path to the domain name that you chose):
mkdir -p /var/www/vhosts/backup.mysite.com/s3backups/fullserver
Before we get too excited, we need to make sure that our backupuser
has ownership of the s3backups
folder.
chown -R backupuser:psacln /var/www/vhosts/backup.mysite.com/s3backups/
This directory that we just created is what we will be using to store our full server backups. We now need to create an FTP account that will have access only to this directory.
The user is now configured, but we need to tell our server where to run the backup. Go to Tools & Settings and then choose Personal FTP Settings. Here is where you can enter in the information that we just created. When you are filling this out, be sure to select FTPS. Even though we are sending it to ourselves, we want to make sure that we use FTPS to secure the transfer. Also, it is a wise idea to create an archive password. This is another step that will prevent unauthorized hands from getting on your data. Be sure to save these passwords in a safe place!:
With the FTP settings set, we can now schedule our backup to run. Choosing the frequency of the backup is all up to you. Yes, Amazon is only pennies per GB, but it can add up fast if you are running large backups frequently. Go back to the Backup Manager then choose Scheduled Backup Settings.
When you are configuring your settings, be sure that you click Activate at the top (many people forget to select that). Fill out the other fields anyway you want, but you can put in your email for notifications upon any errors (very good idea). Also, make sure that you select All Configuration and Content and make sure you uncheck the domain suspension. This will disable your sites while the backup runs. Only in special cases would you want that to happen.
We’re almost there! Now we can test it by choosing Backup from the Backup Manager.
Here is where we can run our first test. Instead of backing up everything, lets just back up the server configuration. This will save A LOT of time in testing.
It will start to run a backup. This is your cue to go grab another coffee/beer while it finishes. Once it is complete, you will see it appear in the Personal FTP tab:
Since that backup is done, lets see where it is at. We can check by running the ll
or ls
command:
[root@myserver ~]# ll /var/www/vhosts/backup.mysite.com/s3backups/fullserver
total 284
-rw-r--r-- 1 backupuser psacln 287916 Apr 3 16:18 test_1404031618.tar
Now since the file is there, lets move it to Amazon S3. This is going to be the same command as our test from before, but we need to change the directory to the fullserver directory. You will see its output as it moves the file.
[root@myserver ~]# aws s3 mv /var/www/vhosts/backup.mysite.com/s3backups/fullserver/ s3://myserver-pleskfull --recursive
move: ../var/www/vhosts/backup.mysite.com/s3backups/fullserver/test_1404031618.tar to s3://myserver-pleskfull/test_1404031618.tar
We can now list out the directory on the Amazon S3 bucket to confirm our file made it safely. When I run the command, you can see it shows our test text file as well:
[root@myserver ~]# aws s3 ls s3://myserver-pleskfull --recursive
2014-04-03 12:13:13 0 test1.txt
2014-04-03 16:47:19 287916 test_1404031618.tar


|
Avril
Lavigne
|
|
|
Let
Go
|
1.
Losing Grip
2. Complicated 3. Sk8er Boi 4. I'm With You 5. Mobile 6. Unwanted 7. Tomorrow 8. Anything But Ordinary 9. Things I'll Never Say 10. My World 11. Nobody's Fool 12. Too Much To Ask 13. Naked |
|
|


Public Complaint Sorting
Home
Register
Gallery
Complaint Registration
Name
Please Enter Name.
Mobile
Please Enter Mobile Number.
Address
Please Enter Address.
Complaint Description
Please Enter any Description.
File
Submit
Cancel


Seems your browser doesn't support Javascript! Websocket relies on Javascript being enabled. Please enable Javascript and reload this page!
Subscribe
What is your name?
Connect
Disconnect
Schema:
{ bookAdded{ title isbn pageCount author { firstName lastName } } }
Subscribe
Waiting to new data...


Claptrap is an AI that makes up its own jokes. It looks for words that sound alike or mean similar things and links them together into puns. They'll probably be terrible. Sorry.
Rate the jokes to help Claptrap learn what's funny and what isn't. Or what doesn't make any sense at all. You can even help Claptrap improve by teaching it how words relate to one another.


This package contains the core code for an OPeNDAP servlet engine. The
DAP2Servlet
class contains all of the logic for decoding a client request and then making the appropriate response.


This website was made using Atom as the main text editor, GitHub to host the code and Bootstrap for the base html framework. This website is written in HTML5 and CSS which structure content for the internet ann describe the style/layout of a HTML doc respectively.
These free resources can be found at Atom, GitHub & Bootstrap.
These website creation tools were chosen because they're both new user friendly and able to carry out complex commands. Atom and GitHub syncronise extremely well, and allow for website templates to be easily uploaded. These templates were taken from Bootstrap because they're open source and professional in appearance.
Describe the steps to register and setup a domain name for your website
Quality content is king. Too much detail and it will be boring and frustrating to read.  The best way to convey lots of information is to have clear breating spaces and section topics using a navigation bar.
There's nothing more frustrating than a buffering website. For good user experience the pages should load quickly at even low wifi speeds of 1-2 Mbps. Similary, fluid grids and flexible layouts should be incorporated to work quickly when the screen size changes or the website is veiwed on a smartphone.
Simplicity is best for web design. Cluttering the page distracts from they key content and makes the website difficult to navigate for first time users.
Website accessibility is about designing websites so that people from all parts of the disabled community and others such as people in rural areas can use them. As our society becomes more reliant on internet resources this an essential thing to consider to prevent dicrimination be negligence. In many ways the world wide web can be a fantastic tool for promoting equal access and opportunities, but measures must be taken not to exclude those who have different accessibility needs. Some examples of these measures are:
Using the Alt-tag in html for an image means that equivalent text is provided. This allows those who are visually impaired or live in areas with low bandwith to access the information
By making the website able to be navigated without a mouse it makes it accessible to those who have limited motor control.
Screen Readers convert website text into audio, but rely on the default html tags being used for their intended purpose. So using the default settings is not only easier, but makes the website more accesible.
GDPR stands for General Data Protection Rules, and regulates how personal data is collected and processed. It has 7 key principles:
Image from Medium Sphere Identity.
This website accounts for GDPR in a few ways, firstly it does not collect unnescessary data from thoe that visit it (nobody likes the wrong type of cookies). Secondly we only store the details of those who fill in the contact us form for a limited period of time. Finally, we ask for permission to continuing using any individuals images and contact details that are on the website on an opt-in annual basis.
The key steps we would take to market this website in future would be Search Engine Optimisation (SEO), Social Media advertising and regular blogging
SEO is a tough competition, so lots of research on the best way to do it is required. Embedding key words and phrases throughout should partly help this, as well as adding alt tags to images, which has the benefit of making the websit more accesible.
Social Media can offer a huge boost to how many people visit a site, with the average facebook user having over 300 friends just a few people sharing the website means a massive target audience can be reached. However care should be taken to make advertisements attractive first.
Regular blogging on the website with updates of how the project prototyping is developing can improve the websites search engine ranking, as well as providing a great history of the products development
As the prototype continues to develop into a complete product this website would be vital for taking it to market. Keeping track of the development history and regular updates via the aforementioned blogging method.
Links to popular start up funding websites such as kickstarter could be included when the product is ready for that stage, so that people interested could invest in its development. The website could even evolve into a platform by which individual units could be purchased if supply lines were fully developed.
More immediate ways this website could be improved are the further breaking down of the navigation on the home bar, and adding a 3D viewable model of the prototype.


%inherit file="base.html"/> <%def name="title()"> Unsubscribed %def>
ExtrasolarExploring the Universe One Photo at a Time
% if error is not UNDEFINED:
${error}
% endif
% if user is not UNDEFINED:
You have been unsubscribed from all notifications. Continue to Rover Operations.
% endif
|


Variables
Variables are names given to data that we want to store and manipulate in programs. A variable has a name and a value. The value representation depends on what type of object the variable represents. We have been calling these things containers, but variable is the more appropriate terminology.
The utility of variables comes in when we have a structure that is universal, but values of variables within the structure will change - otherwise it would be simple enough to use named constants (a container whose name is also its value, like 3 and 5.267).
Suppose we want to store the time of concentration for some hydrologic calculation.
To do so, we can name a variable TimeOfConcentration
, and then assign
a value to the variable,
for instance:
TimeOfConcentration = 0.0
After this assignment statement the variable is created in the program and has a value of 0.0. The use of a decimal point in the initial assignment establishes the variable as a float (a real variable is called a floating point representation -- or just a float).
print(TimeOfConcentration)
0.0
Naming Rules
Variable names in Python can only contain letters (a - z, A - Z), numerals (0 - 9), or underscores.
The first character cannot be a number, otherwise there is considerable freedom in naming.
The names can be reasonably long.
runTime
, run_Time
, _run_Time2
, _2runTime
are all valid names, but 2runTime
is not valid, and will create an error when you try to use it.
# Script to illustrate variable names
runTime = 1
_2runTime = 2 # change to 2runTime = 2 and rerun script
runTime2 = 2
print(runTime,_2runTime,runTime2)
1 2 2
There are some reserved words that cannot be used as variable names because they have preassigned meaning in Parseltongue.
These words include print
, input
, if
, while
, and for
.
There are several more; the interpreter won't allow you to use these names as variables and will issue an error message when you attempt to run a program with such words used as variables.
while = 72
print(while)
File "<ipython-input-4-85c15d632191>", line 1
while = 72
^
SyntaxError: invalid syntax
Variables in Expressions
Recall that expressions are the "algebraic" constructions that are evaluated and then placed into a variable.
Consider
x1 = 7 + 3 * 6 / 2 - 1
The expression is evaluated from the left to right and in words is
Into the object named x1 place the result of:
integer 7 + (integer 6 divide by integer 2 = float 3 * integer 3 = float 9 - integer 1 = float 8) = float 15
The division operation by default produces a float result unless forced otherwise. The result is the variable x1
is a float with a value of 15.0
x1 = 7 + 3 * 6 / 2 - 1
print(x1)
15.0
Suppose we want to replace the named constant 7 with a variable, simple enough, but now future changes need only be implemented once instead of every appearance of the named constant 7. Here we are using a reset for a bit later on.
%reset -f
# use the reset so hex addresses in blocks below don't change when switching machines
seven = 7
x1 = seven + 3 * 6 / 2 - 1
print(x1)
15.0
Why are they called named constants? Its a weird construct, but the name and the value are treated as the same thing, as depicted in the next few script blocks. The last block prints virtual memory address locations of the variables - notice how seven
and 7
have the same location - this is called equivalence, but look at what happens when you change seven
7
print(7)
print(7, 'is type : ',type(7))
7
7 is type : <class 'int'>
7.7
print(7.7)
print(7.7, 'is type : ',type(7.7))
7.7
7.7 is type : <class 'float'>
print(hex(id(7)))
print(hex(id(7.7)))
print(hex(id(seven)))
seven = seven+2
print(hex(id(seven)))
0x9257e8
0xffffa9fe0ef0
0x9257e8
0x925828
So assuming the memory locations are approximately sequential then "7" and "seven" start out at the same location, but after execution of seven=seven+2 the result is stored about 40 addresses away as shown:
Readings
-
Learn Python the Hard Way (Online Book) (https://learnpythonthehardway.org/book/) Recommended for beginners who want a complete course in programming with Python.
-
LearnPython.org (Interactive Tutorial) (https://www.learnpython.org/) Short, interactive tutorial for those who just need a quick way to pick up Python syntax.
-
How to Think Like a Computer Scientist (Interactive Book) (https://runestone.academy/runestone/books/published/thinkcspy/index.html) Interactive "CS 101" course taught in Python that really focuses on the art of problem solving.
-
How to Learn Python for Data Science, The Self-Starter Way (https://elitedatascience.com/learn-python-for-data-science)
-
Reverse lookup contents of a memory address https://stackoverflow.com/questions/8250625/access-memory-address-in-pytho
-
Finding memory address https://www.codespeedy.com/find-the-memory-address-of-a-variable-in-python/


{% extends "ldap_admin.html" %}
{% block content %}
LDAP {{ groupname }}
{% for member in ldap %}
- {{ member }}
{% endfor %}
LDAP missing {{ groupname }}
{% for member in ldap_missing %}
- {{ member }}
{% endfor %}
Django {{ groupname }}
{% for member in django %}
- {{ member }}
{% endfor %}
Django missing {{ groupname }}
{% for member in django_missing %}
- {{ member }}
{% endfor %}
{% endblock %}
{# vim: set et sw=2: #}


Text It is a clean and simple writing zone, made by Álvaro Araoz. Based on Tim Holman ZenPen. Text It is open source on Github. If you have any questions, send me an email.
Markdown HTML Texto Plano


Hedge Math
A
B
Operation
Add
Subtract
Multiply
Divide
Calculate
Answer:
History
A
B
Operation
Answer
@lionelthehog


Definitions for shr-base-Entry.
| DomainResource | |
| Definition | Metadata attributes that apply to any item represented in the standard health record. An Entry may not belong exclusively to a single person's health record, but could represent an entity that surfaces in multiple records, such as organizations or practitioners. If the entry belongs to a single person's record, then the identity of the person of record must be recorded. |
| Control | 0..* |
| Invariants | Defined on this element dom-1: If the resource is contained in another resource, it SHALL NOT contain any narrative (: contained.text.empty()) dom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources (: contained.contained.empty()) dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource (: contained.where(('#'+id in %resource.descendants().reference).not()).empty()) dom-4: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated (: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()) |
| DomainResource.id | |
| Definition | The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes. |
| Control | 1..1 |
| Type | id |
| Comments | The only time that a resource does not have an id is when it is being submitted to the server using a create operation. |
| DomainResource.meta | |
| Definition | The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource. |
| Control | 1..1 |
| Type | Meta |
| DomainResource.meta.id | |
| Definition | unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces. |
| Control | 0..1 |
| Type | string |
| DomainResource.meta.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the element. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Control | 0..* |
| Type | Extension |
| Alternate Names | extensions, user content |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| DomainResource.meta.versionId | |
| Definition | The version specific identifier, as it appears in the version portion of the URL. This values changes when the resource is created, updated, or deleted. |
| Control | 0..1 |
| Type | id |
| Comments | The server assigns this value, and ignores what the client specifies, except in the case that the server is imposing version integrity on updates/deletes. |
| DomainResource.meta.lastUpdated | |
| Definition | When the resource last changed - e.g. when the version changed. |
| Control | 0..1 |
| Type | instant |
| Comments | This value is always populated except when the resource is first being created. The server / resource manager sets this value; what a client provides is irrelevant. |
| DomainResource.meta.profile | |
| Definition | A list of profiles (references to StructureDefinition resources) that this resource claims to conform to. The URL is a reference to StructureDefinition.url. |
| Control | 1..* |
| Type | uri |
| Comments | It is up to the server and/or other infrastructure of policy to determine whether/how these claims are verified and/or updated over time. The list of profile URLs is a set. |
| DomainResource.meta.security | |
| Definition | Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure. |
| Control | 0..* |
| Binding | Security Labels from the Healthcare Privacy and Security Classification System. The codes SHALL be taken from All Security Labels; other codes may be used where these codes are not suitable |
| Type | Coding |
| Comments | The security labels can be updated without changing the stated version of the resource The list of security labels is a set. Uniqueness is based the system/code, and version and display are ignored. |
| DomainResource.meta.tag | |
| Definition | Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource. |
| Control | 0..* |
| Binding | Codes that represent various types of tags, commonly workflow-related; e.g. "Needs review by Dr. Jones" For example codes, see Common Tags |
| Type | Coding |
| Comments | The tags can be updated without changing the stated version of the resource. The list of tags is a set. Uniqueness is based the system/code, and version and display are ignored. |
| DomainResource.implicitRules | |
| Definition | A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. |
| Control | 0..1 |
| Type | uri |
| Is Modifier | true |
| Comments | Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. This element is labelled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation. |
| DomainResource.language | |
| Definition | The base language in which the resource is written. |
| Control | 0..1 |
| Binding | A human language. The codes SHALL be taken from Common Languages; other codes may be used where these codes are not suitable |
| Type | code |
| Comments | Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute). |
| DomainResource.text | |
| Definition | A human-readable narrative that contains a summary of the resource, and may be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it "clinically safe" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety. |
| Control | 0..1 This element is affected by the following invariants: dom-1 |
| Type | Narrative |
| Alternate Names | narrative, html, xhtml, display |
| Comments | Contained resources do not have narrative. Resources that are not contained SHOULD have a narrative. In some cases, a resource may only have text with little or no additional discrete data (as long as all minOccurs=1 elements are satisfied). This may be necessary for data from legacy systems where information is captured as a "text blob" or where text is additionally entered raw or narrated and encoded in formation is added later. |
| DomainResource.contained | |
| Definition | These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope. |
| Control | 0..* |
| Type | Resource |
| Alternate Names | inline resources, anonymous resources, contained resources |
| Comments | This should never be done when the content can be identified properly, as once identification is lost, it is extremely difficult (and context dependent) to restore it again. |
| DomainResource.extension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the resource. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. |
| Control | 0..* |
| Type | Extension |
| Alternate Names | extensions, user content |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |
| DomainResource.modifierExtension | |
| Definition | May be used to represent additional information that is not part of the basic definition of the resource, and that modifies the understanding of the element that contains it. Usually modifier elements provide negation or qualification. In order to make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions. |
| Control | 0..* |
| Type | Extension |
| Is Modifier | true |
| Alternate Names | extensions, user content |
| Comments | There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone. |