- afterInvocation(IInvokedMethod, ITestResult)
- Method in class com.shaft.listeners.InvokedMethodListener
-
- assertBrowserAttribute(WebDriver, String, String, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Deprecated.
- assertBrowserAttribute(WebDriver, String, String, int, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts browser attribute equals expectedValue if AssertionType is true, or
does not equal expectedValue if AssertionType is false.
- assertComparativeRelation(Number, Number, String, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts that the expectedValue is related to the actualValue using the
desired comparativeRelationType if AssertionType is true, or not related if
AssertionType is false.
- assertElementAttribute(WebDriver, By, String, String, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Deprecated.
- assertElementAttribute(WebDriver, By, String, String, int, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts webElement attribute equals expectedValue if AssertionType is true,
or does not equal expectedValue if AssertionType is false.
- assertElementCSSProperty(WebDriver, By, String, String, int, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts webElement CSSProperty equals expectedValue if AssertionType is true,
or does not equal expectedValue if AssertionType is false.
- assertElementCSSProperty(WebDriver, By, String, String, int, Boolean)
- Static method in class com.shaft.validation.Verifications
-
Verifies webElement CSSProperty equals expectedValue if verificationType is
true, or does not equal expectedValue if verificationType is false.
- assertElementExists(WebDriver, By, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts that webElement found using the provided driver and locator exists if
AssertionType is true, or does not exist if AssertionType is false.
- assertEquals(Object, Object, int, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts that two objects are equal if AssertionType is true, or not equal if
AssertionType is false.
- assertEquals(Object, Object, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Deprecated.
- assertFileExists(String, String, int, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts that a certain file exists if AssertionType is true, or doesn't exist
if AssertionType is false.
- assertGreaterThanOrEquals(Number, Number, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Deprecated.
- Assertions - Class in com.shaft.validation
-
- assertNull(Object, Boolean)
- Static method in class com.shaft.validation.Assertions
-
Asserts that object is null if AssertionType is true, or is not null if
AssertionType is false.
- attach(String, String, InputStream)
- Static method in class com.shaft.io.ReportManager
-
Adds a new attachment using the input parameters provided.
- attach(String, String, String)
- Static method in class com.shaft.io.ReportManager
-
Adds a new attachment using the input parameters provided.
- attachAnimatedGif()
- Static method in class com.shaft.browser.BrowserFactory
-
- attachAnimatedGif()
- Static method in class com.shaft.io.ScreenshotManager
-
- attachAsStep(String, String, InputStream)
- Static method in class com.shaft.io.ReportManager
-
Adds a new attachment using the input parameters provided.
- attachAsStep(String, String, String)
- Static method in class com.shaft.io.ReportManager
-
Adds a new attachment using the input parameters provided.
- attachBrowserLogs()
- Static method in class com.shaft.browser.BrowserFactory
-
- attachFullLog() - Static method in
class com.shaft.io.ReportManager
-
- attachRecording() - Static method in
class com.shaft.io.RecordManager
-
- attachTestLog() - Static method in
class com.shaft.io.ReportManager
-
Returns the log of the current test, and attaches it in the end of the test
execution report.
- canFindUniqueElement(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Returns True if only one element matches the locator specified, and Fails the
test (with a descriptive error) if no elements were found, or if more than
one element was found.
- canFindUniqueElement(WebDriver, By, int)
- Static method in class com.shaft.element.ElementActions
-
Returns True if only one element matches the locator specified, and Fails the
test (with a descriptive error) if no elements were found, or if more than
one element was found.
- captureScreenShot(WebDriver, String, boolean)
- Static method in class com.shaft.io.ScreenshotManager
-
Used if there is no element locator.
- captureScreenShot(WebDriver, By, String, boolean)
- Static method in class com.shaft.io.ScreenshotManager
-
Used if there is an element locator.
- captureScreenShot(WebDriver, String, String, boolean)
- Static method in class com.shaft.io.ScreenshotManager
-
- captureScreenShot(WebDriver, By, String, String, boolean)
- Static method in class com.shaft.io.ScreenshotManager
-
- click(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Attempts to Click on a certain web element using selenium webdriver, or using
javascript
- clickAndHold(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Waits for the element to be clickable, and then clicks and holds it.
- clipboardActions(WebDriver, By, String)
- Static method in class com.shaft.element.ElementActions
-
Attempts to perform a native clipboard action on the text from a certain web
element, like copy/cut/paste
- close() -
Method in class com.shaft.io.GifSequenceWriter
-
Close this GifSequenceWriter object.
- closeAllDrivers()
- Static method in class com.shaft.browser.BrowserFactory
-
Close all open browser instances.
- closeCurrentWindow(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Closes the current browser window
- com.shaft.api - package com.shaft.api
-
- com.shaft.browser - package com.shaft.browser
-
- com.shaft.element - package com.shaft.element
-
- com.shaft.image - package com.shaft.image
-
- com.shaft.io - package com.shaft.io
-
- com.shaft.listeners - package com.shaft.listeners
-
- com.shaft.support - package com.shaft.support
-
- com.shaft.validation - package com.shaft.validation
-
- compareImageFolders(String, String, double)
- Static method in class com.shaft.image.ImageProcessingActions
-
- compareNonStrictly(JSONObject)
- Method in class com.shaft.io.JsonFileManager
-
Non Strictly comparison between actual jsonObject of response and expected
one initialized in the constructor.
- compareStrictly(JSONObject)
- Method in class com.shaft.io.JsonFileManager
-
Strictly comparison between actual jsonObject of response and expected one
initialized in the constructor.
- compareTwoObjects(Object, Object, int, Boolean)
- Static method in class com.shaft.support.JavaActions
-
Compares two objects (that can be cast to a string value) based on the
selected comparisonType and ValidationType, then returns the result in an
integer value
- compareTypically(JSONObject)
- Method in class com.shaft.io.JsonFileManager
-
Typically comparison between actual jsonObject of response and expected one
initialized in the constructor Return True if files are typically (order,
size, keys and values) equal and false otherwise
- containElements(JSONObject)
- Method in class com.shaft.io.JsonFileManager
-
Comparison between actual jsonObject of response and expected one initialized
in the constructor.
- convertBase64(String)
- Static method in class com.shaft.support.JavaActions
-
- copyFile(String, String)
- Static method in class com.shaft.io.FileManager
-
Copies a file from sourceFilePath to destinationFilePath on the local storage
- copyFolder(String, String)
- Static method in class com.shaft.io.FileManager
-
- createFolder(String)
- Static method in class com.shaft.io.FileManager
-
- generateAllureReportArchive()
- Static method in class com.shaft.io.ReportManager
-
- getAbsolutePath(String, String)
- Static method in class com.shaft.io.FileManager
-
Returns the full (absolute) file/folder path using the project-relative
fileFolderName and the fileName
- getAbsolutePath(String)
- Static method in class com.shaft.io.FileManager
-
- getActiveDriverSessions()
- Static method in class com.shaft.browser.BrowserFactory
-
- getAttribute(WebDriver, By, String)
- Static method in class com.shaft.element.ElementActions
-
Get the value of the given attribute of the element.
- getBrowser() - Static method in
class com.shaft.browser.BrowserFactory
-
Given that there is no test data file, read the target browser value from pom
configuration (overridable from jenkins), if "Default" it fails because it
will not be able to read the "Target Browser" cell value from the configured
test data file.
- getBrowser(ExcelFileManager)
- Static method in class com.shaft.browser.BrowserFactory
-
- getBrowser(String)
- Static method in class com.shaft.browser.BrowserFactory
-
Create and/or return an instance of the target browser (maintains a single
instance per browser type) and checks for cross-compatibility between the
selected browser and operating system
- getCellData(String)
- Method in class com.shaft.io.ExcelFileManager
-
Reads cell data from the first sheet in the desired excel workbook Reads cell
data using row name (1st column) only Reads cell data from the 2nd column
(1st Value in the test data file)
- getCellData(String, String)
- Method in class com.shaft.io.ExcelFileManager
-
Reads cell data from the first sheet in the desired excel workbook Reads cell
data using row name (1st column) and column name
- getCellData(String, String, String)
- Method in class com.shaft.io.ExcelFileManager
-
Reads cell data from a specific sheet name inside the excel file Reads cell
data using row name (1st column) and column name
- getColumnNameUsingRowNameAndCellData(String, String, String)
- Method in class com.shaft.io.ExcelFileManager
-
Looks for the column name that holds the cellData in the specified rowName
and sheetName
- getColumnNameUsingRowNameAndCellData(String, String)
- Method in class com.shaft.io.ExcelFileManager
-
Looks for the column name that holds the cellData in the specified rowName
and the default sheet name
- getCSSProperty(WebDriver, By, String)
- Static method in class com.shaft.element.ElementActions
-
Get the value of a given CSS property.
- getCurrentURL(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Gets the current page URL and returns it as a string
- getCurrentWindowTitle(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Gets the current window title and returns it as a string
- getElementsCount(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Returns the number of elements that match a certain elementLocator
- getElementsCount(WebDriver, By, boolean)
- Static method in class com.shaft.element.ElementActions
-
Returns the number of elements that match a certain elementLocator
- getElementsCount(WebDriver, By, int)
- Static method in class com.shaft.element.ElementActions
-
Returns the number of elements that match a certain elementLocator, and
respects the provided customElementIdentificationTimeout while attempting to
locate those elements.
- getElementsCount(WebDriver, By, int, int)
- Static method in class com.shaft.element.ElementActions
-
Returns the number of elements that match a certain elementLocator, and
respects the provided customElementIdentificationTimeout while attempting to
locate those elements.
- getElementsCount(WebDriver, By, int, int, boolean)
- Static method in class com.shaft.element.ElementActions
-
- getFullLog()
- Static method in class com.shaft.io.ReportManager
-
Deprecated.
- getLastColumnNumber()
- Method in class com.shaft.io.ExcelFileManager
-
Returns the last column number that contains a header value (zero based)
assuming that you are working within the default sheet.
- getLastColumnNumber(String)
- Method in class com.shaft.io.ExcelFileManager
-
Returns the last column number that contains a header value (zero based).
- getPageSource(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Gets the current page source and returns it as a string
- getResponseJSONValue(Response, String)
- Method in class com.shaft.api.RestActions
-
- getResponseStatusCode(Response)
- Method in class com.shaft.api.RestActions
-
- getResponseXMLValue(Response, String)
- Method in class com.shaft.api.RestActions
-
- getSize(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Retrieves element size from the target element and returns it as a string
value.
- getTagName(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Retrieves tag name from the target element and returns it as a string value.
- getTestLog()
- Static method in class com.shaft.io.ReportManager
-
- getText(WebDriver, By)
- Static method in class com.shaft.element.ElementActions
-
Retrieves text from the target element and returns it as a string value.
- getTotalNumberOfTests()
- Static method in class com.shaft.io.ReportManager
-
- getWindowHandle(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Gets the current window handle and returns it as a string
- getWindowPosition(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Gets the current window position and returns it as a string
- getWindowSize(WebDriver)
- Static method in class com.shaft.browser.BrowserActions
-
Gets the current window size and returns it as a string
- GifSequenceWriter
- Class in com.shaft.io
-
- GifSequenceWriter(ImageOutputStream, int, int, boolean)
- Constructor for class com.shaft.io.GifSequenceWriter
-
Creates a new GifSequenceWriter
- gifWriter -
Variable in class com.shaft.io.GifSequenceWriter
-


I'm an IT nerd, aspiring web developer, and digital creative! When I'm not doing nerd things, I'm usually out carefully raising my rare, purple unicorns. Though they require delicate care, they help me to manage my work stress and flow. I highly recommend this as a wonderful hobby.


{{ "Mnemonic is the only way to recover my wallet, I'll write it down on paper." | translate }}
{{ "No one can peek at my phone and there's no survelience cameras around." | translate }}
{{ 'Other apps have access to Photos app may steal my mnemonic.' | translate }}


Before Change
def entities_file(gcs_uri):
Detects entities in the file located in Google Cloud Storage.
language_client = language.Client(api_version="v1beta2")
// Instantiates a plain text document.
document = language_client.document_from_gcs_url(gcs_uri)
// Detects sentiment in the document. You can also analyze HTML with:
// document.doc_type == language.Document.HTML
entities = document.analyze_entities().entities
After Change
def entities_file(gcs_uri):
Detects entities in the file located in Google Cloud Storage.
client = language_v1beta2.LanguageServiceClient()
// Instantiates a plain text document.
document = types.Document(
gcs_content_uri=gcs_uri,


| Overview | Namespace | Class | Index | Help |
| PUBLIC MEMBERS: | CLASSES | STRUCTS | UNIONS | ENUMS | TYPEDEFS | METHODS | STATIC METHODS | DATA | STATIC DATA |
| PRIVATE MEMBERS: | CLASSES | STRUCTS | UNIONS | ENUMS | TYPEDEFS | METHODS | STATIC METHODS | DATA | STATIC DATA |
template< typename SingletonClass >
| virtual | abstract | interface | template |
| NO | NO | NO | YES |
Methods |
|
| SingletonRef( ); |
standard ctor. |
| ~SingletonRef( ); |
standard dtor. |
| SingletonClass * operator->( ) const; |
Allows rSingle->someBodyOp(). |
| SingletonClass & operator*( ) const; |
Allows (*rSingle).someBodyOp(). |
Structs |
|
| SingletonLockInit | creates an own mutex for guarding static contents. |
Methods |
|
| ::osl::Mutex & ownStaticLock( ) const; |
Static Data |
|
| SingletonClass * m_pInstance; | pointer to the internal wrapped singleton. |
| sal_Int32 m_nRef; | ref count, which regulate creation and removing of m_pInstance. |
Copyright © 2012, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


|
Button not working? Try pasting this link into your browser:
{{config.url}}/cabinet/auth/password-confirm?token={{{brokenToken}}}
If you ignore this message, your password won't be changed.
Thank you, Paphos CMS Team
P.S. Keep your new password safe :)
|


Data Collection
PHISHING URLs
Using the services of Phishtank has allowed us to obtain a dataset of phishing urls. Phishtank provides dataset of most recently detected phishing url in form of csv, json, xml etc.
Phishtank is basically a community site where anyone can submit, verify, track and share phishing data.
It consists of following columns - phish_id, url, phish_detail_url, submission_time, verified, verification_time, online, target.
LEGITIMATE URLs
The legitimate URLs are obtained from the open datasets of the University of New Brunswick, which contains legitimate URLs from year 2016 and onwards.
This dataset has a collection of benign, spam, phishing, malware & defacement URLs. Out of all these types, the benign URL dataset is considered for this project. From this dataset, 10,000 random legitimate URLs are collected to train the ML models.
Feature Extraction
The number of features provided to the model and the accuracy of results are directly proportional to each other. Hence, a high number of features will help our model learn with ease and provide an accurate output.
The extracted features are categorized into:
1) Address Bar based Features
Domain in the URL
IP Address in the URL
"@" Symbol in URL
Length of URL
Depth of URL
Redirection "//" in URL
"http/https" in Domain name
Prefix or Suffix "-" in Domain
Using URL Shortening Services “TinyURL”
2) Domain based Features
DNS Record
Web Traffic
Age of Domain
End Period of Domain
3) HTML & JavaScript based Features
IFrame Redirection
Status Bar Customization
Disabling Right Click
Website Forwarding
Data Preparation
1) Exploratory Data Analysis
Here we explore characteristics of our final dataset. Our dataset comprises of 17 features x
20,000 URLs which are a combination of legitimate and phishing websites.
2) Data Visualisation
Through various plots such as histogram, count-plot, scatter plot, pie-chart, correlation matrix, etc. we visualize the relationships between our extracted features. Also, visualization helps us to perform an in-depth analysis of our dataset.
3) Data Pre-processing
Using methods such as checking null values, outlier detection and data re-sampling we prepared our dataset to train machine learning algorithms
Model Creation
HYBRID MODEL
This model is a combination of two or more algorithms to obtain a model that covers all the best features of both algorithms used. This model is developed in 2 phases, in the first phase we pick our machine learning algorithms and apply it to our dataset and on evaluation we select 4 best performing algorithms. In the second phase we find the best combination of algorithms we got in phase-1 to overcome individual limitations.
The first step of model creation requires us to split the data.
Train-Test Split: Initially, we split the data into features and target set. Data in 'X' variable consists of the features which will be used by our model to perform predictions. Data in 'y' variable is the target label. The ratio of size of training set to testing set is (75:25) %.
From our dataset it was clear that this machine learning task was supervised in nature. Under supervised learning there are two types namely, classification and regression. Phishing URL detection falls under classification problem, i.e., the input of the URL and target label is 0 (legitimate) and 1 (phishing).
Therefore, the machine learning models (classifiers) used to train this dataset are:
1. Decision Tree
2. Random Forest
3. Support Vector Machine (SVM)
4. XGBoost
5. Gradient Boosting Machine
6. Adaboost
7. Multi-Layer Perceptron (MLP) - Neural Network
To evaluate the performance of our machine learning models, we have used the following evaluation metrics:
1. Classification report - The classification report visualizer displays the precision, recall, F1, and support scores for the model.
2. Precision - Precision is the ability of a classifier not to label an instance positive that is actually negative. For each class, it is defined as the ratio of true positives to the sum of a true positive and false positive.
3. Recall - Recall is the ability of a classifier to find all positive instances. For each class it is defined as the ratio of true positives to the sum of true positives and false negatives.
4. F1 score - The F1 score is a weighted harmonic mean of precision and recall such that the best score is 1.0 and the worst is 0.0.
5. Support - Support is the number of actual occurrences of the class in the specified dataset.
Confusion Matrix is a performance measurement for machine learning classification problem where output can be two or more classes. It is a table with 4 different combinations of predicted and actual values. It is extremely useful for measuring Recall, Precision, Specificity, Accuracy, and most importantly AUC-ROC curves.
1. True Positive: You predicted positive and it’s true.
2. True Negative: You predicted negative and it’s true.
3. False Positive (Type 1 Error): You predicted positive and it’s false.
4. False Negative (Type 2 Error): You predicted negative and it’s false.
ROC AUC Curve:
The Receiver Operator Characteristic (ROC) curve is an evaluation metric for binary classification problems. It is a probability curve that plots the TPR against FPR at various threshold values and essentially separates the ‘signal’ from the ‘noise’.
The Area Under the Curve (AUC) is the measure of the ability of a classifier to distinguish between classes and is used as a summary of the ROC curve. It tells how much the model is capable of distinguishing between classes. Higher the AUC, the better the model is at predicting 0 classes as 0 and 1 classes as 1. An excellent model has AUC near to the 1 which means it has a good measure of separability. The AUC score can be computed using the roc_auc_score() method of sklearn.
Hyperparamter Tuning
Comparison of Methods
The top 4 models based on their evaluation metrics are Decision Tree, Random Forest, XGBoost and MLP. However, due to its high computational complexity we will not be considering MLP for preparing our ensemble. Instead, we will make use of the Gradient Boosting Machine which is an ensemble and the next best performing model.
Hyperparameter Tuning
A hyperparameter is a parameter whose value can be used to control the learning process. In machine learning, hyperparameter tuning is the process of choosing a set of optimal hyperparameters for a learning algorithm.
Methods of Hyperparameter Tuning (scikit-learn):
In both the methods we create a grid of possible values of hyperparameters.
Grid Search - Grid Search iterates through the grid and tries the combinations of hyperparameters in a specific order. Then, it fits the model on every combination and records the performance. The result is the best model with the best hyperparameters.
Random Search - Random Search iterates through the grid, tries random combinations of hyperparameters and provides the best model with best hyperparameters.
The selected models DTC, RFC, XGB and GBM, underwent the process of hyperparameter tuning to improve their accuracy.
Hybrid Model
Ensemble Model
Ensemble methods are meta-algorithms that combine several machine learning techniques into one predictive model in order to decrease variance (bagging), bias (boosting), or improve predictions (stacking).
For our project we have considered two ensemble methods:
1. Stacking
2. Voting Classifier
Bagging and Boosting techniques are aimed to decrease variance and bias, however our aim was to combine machine learning models in order and improve accuracy and boost performance when tested against unseen tested, which is why we decided on methods that help improve accuracy i.e., Stacking and Voting Classifier.
Stacking Classifier
Stacking is an ensemble learning technique that combines multiple classification or regression models via a meta-classifier or a meta-regressor. For stacking we used StackingClassifier from sklearn.
Stacked generalization consists in stacking the output of individual estimator and use a classifier to compute the final prediction. Stacking allows to use the strength of each individual estimator by using their output as input of a final estimator.
Voting Classifier
A Voting Classifier is a machine learning model that trains on an ensemble of numerous models and predicts an output (class) based on their highest probability of chosen class as the output. It simply aggregates the findings of each classifier passed into Voting Classifier and predicts the output class based on the highest majority of voting. The idea behind this was that, instead of creating separate dedicated models and finding the accuracy for each them, we create a single model which trains by these models and predicts output based on their combined majority of voting for each output class.
Voting Classifier supports two types of voting:
1. Hard Voting: In hard voting, the predicted output class is a class with the highest majority of votes i.e., the class which had the highest probability of being predicted by each of the classifiers.
2. Soft Voting: In soft voting, the output class is the prediction based on the average of probability given to that class.
Final Model
After performing a series of combinations between the models we have trained on our dataset, we came to the conclusion that the Voting Classifier using base estimators – Decision Tree, XGBoost and Gradient Boosting Machine is the best model to classify the URL of a phishing website.


+86 186-0286-1012
2000 – 2005 Southwest JiaoTong University 西南交通大学
Co-Founder.
Technology & Product Executor.
iOS application:
- Swift & Objective-C
- AFNetworking
- YYModel
- URLNavigator
- MJRefresh
- ObjectMapper & Mantle
- SnapKit & Masonry
Backend:
Software Engineer Leader
iOS & Backend application:
- Objective-C
- Event App
- Wand OnSite Checkin Product
- Hackathon 2014 Got First team
- ARM board backend service
iOS Software Engineer
- Objective-C
- Newegg HD for iPad (First iPad in App Store)
.NET Software Engineer
- C#
- Commom CPS - Proxy 1.0 sub-system
.NET Software Leader & Consultant
- C#
- ADC Platform Projects
- ESOP Projects
2017 New Product Development Professional (NPDP)
2009 Project Management Professional (PMP)
Nobby: Photography / 3C Digital / Swimming / Apple Fans


--- layout: post title: Summer festival date: '2016-09-22T04:30:19+02:00' categories: - Storyboards picture_url: https://film-Storyboards.tumblr.com/post/150766813261 ---


Developing the Metaverse of Teknokrat University as a supporting medium for virtual learning.
Teaching at the Faculty of Engineering and Computer Science, Teknokrat University, Lampung, Indonesia. Teaching Database Systems and Programming Laboratory courses.
Teaching the Practical Database Systems and Programming course.
Master's degree in Computer Science (M.Kom.)
Thesis Research : Development of a Web-based Web3D Application using WebGL Technology to Build a Virtual Museum of Lampung Culture Aimed at Improving Public Services.
Bachelor's degree in Computer Science (S.Kom.)
Thesis Research : Color Blindness Test Application using The Ishihara 24-plate Method.
Research Focus : Enterprise Information System, Digital Education, Cultural Heritage Informatics
I have a food and beverage (fnb) business with my wife called "Miss Mojito". You can find us on Instagram missmojitolampung
You can view my complete portfolio here.


{% include head.html %}
{{ site.title }}
{{ site.description }}
|
about
|
resume
|
projects
|
blog
|
GitHub
|
YouTube
|
LinkedIn
|
e-mail
© 2014. {{ site.author.name }}. All rights reserved.
{{ content }}


{% extends 'developers/base_impala.html' %} {% from 'developers/includes/macros.html' import some_html_tip, tip, upload_webapp_features with context %} {% set title = _('Version {0}')|f(version.version) %} {% block title %}{{ hub_page_title(title, addon) }}{% endblock %} {% macro status(msg) %} {{ msg }} {% endmacro %} {% block content %} {{ hub_breadcrumbs(addon, items=[(None, title)]) }} {{ l10n_menu(addon.default_locale) }} {{ title }} {{ csrf() }} {{ _('Version Notes') }} {{ tip(None, _('Information about changes in this release, new features, known bugs, and other useful information specific to this release/version. This information is also shown in the Apps Manager when updating.')) }} {{ form.releasenotes.errors }} {{ form.releasenotes }} {{ some_html_tip() }} {{ _('Notes for Reviewers') }} {{ tip(None, _('Optionally, enter any information that may be useful to the Reviewer reviewing this app, such as test account information.')) }} {{ form.approvalnotes.errors }} {{ form.approvalnotes }} {{ tip(_("Minimum Requirements"), _("Device features required for this app to function.")) }} {{ upload_webapp_features(appfeatures_form) }} {% if version.all_files[0].status == mkt.STATUS_PENDING %} {{ form_field(form.publish_immediately) }} {% endif %} {% include 'developers/includes/addons_edit_nav.html' %} {% endblock %}


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
Gujarat High Court Case Information System Print CR.A/43319/1999 10/ 10 JUDGMENT IN THE HIGH COURT OF GUJARAT AT AHMEDABAD CRIMINAL APPEAL No. 433 of 1999 For Approval and Signature: HONOURABLE MR.JUSTICE BANKIM.N.MEHTA ===================================================== 1 Whether Reporters of Local Papers may be allowed to see the judgment ? No. 2 To be referred to the Reporter or not ? No. 3 Whether their Lordships wish to see the fair copy of the judgment ? No. 4 Whether this case involves a substantial question of law as to the interpretation of the constitution of India, 1950 or any order made thereunder ? No. 5 Whether it is to be circulated to the civil judge ? No ===================================================== DAHYABHAI KALUBHAI SOLANKI - Appellant(s) Versus P.K. GANGULY & 2 - Opponent(s) ===================================================== Appearance : MR SUNIL L MEHTA for Appellant. MS. H. B. Punani, APP for respondent No.3 State. ===================================================== CORAM : HONOURABLE MR.JUSTICE BANKIM.N.MEHTA Date : 29/12/2008 ORAL JUDGMENT
:
1. The appellant - Gujarat Pollution Control Board has preferred the present appeal u/s 378 of the Code of Criminal Procedure, 1973 and challenged the judgment and order of acquittal rendered on 3-6-1998 by learned Chief Metropolitan Magistrate, Ahmedabad in Criminal Case No. 62 of 1995 acquitting accused respondents No. 1 to 4 for the offence punishable u/ss 25 read with Section 44 of the Water (Prevention and Control of Pollution) Act, 1974 (hereinafter referred to as the Act ).
2. According to the prosecution case, accused No. 1 is the owner and accused No. 2 is the Manager of Radiant Metal Industries, Industrial Estate, Odhav, Ahmedabad. The accused are engaged in manufacturing S.S. Belts. The accused use acids and other chemicals for the purpose of their production and an outlet is created for the discharge of the trade effluent without prior consent of the Board in a drain through unauthorised outlet and not installed water treatment plant and thereby violated the provisions of Sections 24 and 25 of the Act.
3. Learned trial Judge framed charge Exh. 24 against the accused for the offence u/s 25 of the Act. The accused pleaded not guilty to the charge and hence the prosecution adduced evidence.
4. After hearing learned A.P.P. and the learned advocate for the accused, the learned Judicial Magistrate, First Class, Ankleswhar acquitted accused giving them benefit of doubt. Being aggrieved by the said decision, the Gujarat Pollution Control Board has preferred this appeal.
5. I have heard learned advocate Mr. Sunil Mehta for the appellant and learned A.P.P. Ms. Panchal at length and in great detail. I have also perused the impugned judgment and record and proceeding of the trial court.
6. Section 21 of the Act provides for the procedure to be followed in connection with taking of samples for the purpose of analysis.
Section 21 : Power to take samples of effluents and procedure to be followed in connection therewith : (1) A State Board or any officer empowered by it in this behalf shall have power to take for the purpose of analysis samples of water from any stream or well or samples of any sewage or trade effluent which is passing from any plant or vessel or from or over any place into any such stream or well.
(2) The result of any analysis of a sample of any sewage or trade effluent taken under sub-section (1) shall not be admissible in evidence in any legal proceedings unless the provisions of sub-sections (3), (4) and (5) are complied with.
(3) Subject to the provisions of sub-sections (4) and (5), when a sample (composite or otherwise as may be warranted by the process used) of any sewage or trade effluent is taken for analysis under sub- section (1), the person taking the sample shall,-
(a) serve on the person in charge of, or having control over, the plant or vessel or in occupation of the place (which person is hereinafter referred to as the occupier) or any agent of such occupier, a notice then and there in such form as may be prescribed of his intention to have it so analysed;
(b) in the presence of the occupier or his agent, divide the sample into two parts;
(c) cause each part to be placed in a container which shall be marked and sealed and shall also be signed both by the person taking the sample and the occupier or his agent;
(d) send one container forthwith,-
(i) in a case where such sample is taken from any area situated in a Union Territory, to the laboratory established or recognised by the Central Board under Section 16; and
(ii) in any other case, to the laboratory established or recognised by the State Board under section 17;
(e) on the request of the occupier or his agent, send the second container,-
(i) in a case where such sample is taken from any area situated in a Union Territory, to the laboratory established or specified under sub- section (1) of Section 51; and
(ii) in any other case, to the laboratory established or specified under sub- section (1) of Section 52.
(4) When a sample of any sewage or trade affluent is taken for analysis under sub- section (1) and the person taking sample serves on the occupier or his agent, a notice under clause (a) of sub-section (3) and the occupier or his agent willfully absents himself, then,-
(a) the sample so taken shall be placed in a container which shall be marked and sealed and shall also be signed by the person taking the sample and the same shall be sent forthwith by such person for analysis to the laboratory referred to in sub-clause (i) or sub-clause
(ii), as the case may be or clause (e) of sub-section (3) and such person shall inform the Government analyst appointed under sub-section (1) or sub- section (2), as the case may be, of section 53, in writing about the willful absence of the occupier or his agent; and
(b) the cost incurred in getting such sample analysed shall be payable by the occupier or his agent an in case of default of such payment, the same shall be recoverable from the occupier or his agent, as the case may be, as an arrear of land revenue or of public demand:
Provided that no such recovery shall be made unless the occupier or, as the case may be, his agent has been given a reasonable opportunity of being heard in the matter.
(5) When a sample of any sewage or trade effluent is taken for analysis under sub- section (1) and the person taking the sample serves on the occupier or his agent a notice under clause (a) of sub-section (3) and the occupier or his agent who is present at the time of taking the sample does not make a request for dividing the sample into two parts as provided in clause (b) of sub-section (3), then, the sample so taken shall be placed in a container which shall be marked and sealed and shall also be signed by the person taking the sample and the same shall be sent forthwith by such person for analysis to the laboratory referred to in sub-clause (i) or sub-clause (ii), as the case may be, of clause (d) of sub-section (3).
7. Rule 27 of the Gujarat Water (Prevention and Control of Pollution) Rules 1976 (hereinafter referred to 'the Rules, 1976 ) provides the procedure for submitting samples to the State Water Laboratory. It provides that :
(a) The sample shall be collected preferably in polythene container and shall be labelled giving the following details, namely :-
(i) the source, and nature of sample,
(ii) the date and time of collection,
(iii) the method of preservation used.
(b) Atleast 2.5 litres of the materials required to be analyse shall be sent in a container, the capacity of which shall not be less than 3 litres and not be more than 5 litre.
(c) The sample shall accompany with the letter from the concerned authority and shall give the number of parameters to be analysed.
(d) The sample shall be preferably transported to the laboratory by a messenger.
(e) The messenger shall take receipt of sample from the laboratory.
(f) Fees for analyses shall be paid either in advance or at the time of submission of sample.
(g) The samples shall be preserved as per the instruction given in IS-2488-1966 and 1968 (Part I, II and III) and IS-4733-1968.
8. The evidence of P.W. 2 Binaben J. Bhatt Exh. 14 indicates that only one sample was taken for the purpose of analysis and no preservative was used. It also indicates that no note was made in inspection report and forwarding letter Exh. 21 and Exh. 22 that the sample was preserved in ice. The evidence of this witness also indicates that accused No. 2 gave writing Exh. 18 indicating that the sample was not taken in his presence. It also appears that the sample was not preserved as required under Rule 27 (a). There is no evidence with regard to capacity of the container. It also appears that the inspection report did not mention about the persons in charge of and responsible for the conduct of business of the company.
9. In the decision of Dahyabhai Kalubhai Solanki V. Devine Intermediates & Chemicals & Ors., reported in 1996 (1) G.L.R. 729, this Court has held that when requirements of Rule 27 of the Rules 1976 are not complied with the accused is entitled to acquittal.
10. In view of the evidence of P.W. 2 it appears that the procedure under Section 21 of the Act was not followed while taking the sample and there was breach of Rule 27 of the Rules 1976. It also appears that there was no evidence with regard to liability of the accused under Section 47 of the Act. Therefore, the accused were entitled for acquittal and the learned Magistrate was justified in passing the impugned judgment.
11. As regards the authority to file complaint, the case of M/s. Nicosulf Industries & Exports Pvt. Ltd. & Another V/s. State of Gujarat and Another, reported in 2002 (2) G.L.R.1581, wherein this Court held that the delegation of power to file complaint was not valid, the case was taken to the Supreme Court and the Court in Criminal Appeal No.9 of 2002 decided on 4th December, 2008 held that the delegation of power of sanctioning prosecution by the Board to the Chairman was valid and effective even for the purpose of amended Section 49 (1) (a) of the Act. Therefore, learned J.M.F.C. Committed error in coming to the conclusion that the complainant had no authority to launch the prosecution.
12. In view of the fact that there was breach of Sections 21 and 47 of the Act and Rule 27 of the Rules, 1976, the trial Court was justified in acquitting the accused. The learned advocate for the appellant Board has failed to point out that the finding in that regard is erroneous. Therefore, the impugned judgment does not require any interference.
13. For the foregoing reasons, appeal fails and stands dismissed and judgment and order of acquittal rendered on 3-4-1998 by learned Judicial Magistrate, First Class, Ankleshwar in Criminal Case No. 1755 of 1989 is confirmed.
(Bankim N. Mehta, J.) /JVSatwara/ Top


ClassPet
ClassPet is a task and token management web app designed to assist teachers, caretakers, and students in a remote learning environment, built in 3 weeks for the “Microsoft Azure US Hack for Accessibility” hackathon.
Microsoft Devpost Article (ClassPet link opens in a new tab)


Former Lions prop battling cancer
Cape Town - Former Scotland captain and British and Irish Lions prop Tom Smith has revealed he's battling cancer.
According to Scottish Rugby's official website, the 48-year-old, who played 61 Tests for Scotland and six for the British and Irish Lions between 1997 and 2005, was diagnosed with stage four colorectal cancer a few months ago.
The cancer started in his colon and has spread to his liver and brain. He has undergone intensive rounds of chemotherapy, aimed at halting the tumours growth, and is undergoing radiotherapy to treat the lesions in his brain.
Smith, now resident in the south of France, remains resolute.
"I was in my hospital bed and I said to staff: 'I'm determined to fight this'," he said.
Scotland coach Gregor Townsend, who played with Smith in their historic 2-1 series victory over South Africa in 1997, said he was arguably the best Scotland player of the professional era.
"Tom’s achievement of starting six Lions Tests in a row between that tour of South Africa and then the 2001 tour of Australia is a testament of how highly he was regarded as a player.
"Fearsomely strong and competitive, he went about his business undemonstratively, but also had an outrageous skill-set.
"He has shown a similar determination that - as someone who suffered from epilepsy - having such a condition did not mean it was a barrier to playing sport.
"For me, Tom is the outstanding Scotland player of the professional era and I'm sure rugby supporters throughout Scotland and the world will rally behind him and his family in these tough times."
- Compiled by Herman Mostert


Application Stack: Django (Python), PostgreSQL, Docker containers, Redis, AWS, Bootstrap
Application Stack: PHP, MySQL, Ubuntu, Apache, Stripe
Application Stack: PHP, MySQL, Ubuntu, Apache, Mikrotik RouterBOARD.
Integrated Media Solutions is an enhanced network solutions provider in the Education, Hospitality, & Commercial Sectors in Ireland, the UK, and Europe. Their services: Connectivity, WiFi, IP Phone Systems, IPTV, Casting, Video Conferencing & Consultancy.
I enjoy and partake in all types of sport including Hurling, Soccer, Golf and Surfing.
I also enjoy reading and travelling
I started writing a blog recently in an effort to give something back to the community. To date I had really only contributerd up votes and stars :)
The blog is available at https://blog.techmill.io


|
MasterScan
Lab_Matlab_control Master Branch
|
Traverses combinations of conditions and assigns them to objects.
topsConditions organizes sets of values for various parameters and computes all the combinations of parameter values. It can traverse conditions by number, and apply parameter values to various objects automatically. Since topsConditions is a topsRunnable subclass, it can control the flow of an experiment based on the traversal of conditions.
Each time a topsConditions object run()s, it will pick a new condition, which is a unique combination of parameter values. Each parameter may have some associated "assignments" which allow parameter values to be applied automatically to properties of other objects. The object may call its startFevalable and finishFevalable just before and after applying property assignments.
A topsConditions object has a state (i.e. the condition number) that trancends multiple calls to run(). Thus, it must be reset() to begin picking conditions from scratch. When pickingMethod runs out of conditions to pick, or when maxPicks is reached (whichever is first), an object sets isDone to true and invokes donePickingFevalable. If its caller is set to a topsRunnable object, it also sets isRunning to false for that object.
Properties and Events | |
| Property | allParameters = struct([]) |
| struct array of parameter names, values and assignment targets More... | |
| Property | nConditions |
| possible number of values combinations from allParameters | |
| Property | currentCondition = 0 |
| number of the currently picked condition, from 1 to nConditions | |
| Property | previousConditions = [] |
| array of previously picked condition numbers More... | |
| Property | currentValues = struct |
| struct of all parameters and their current values More... | |
| Property | maxPicks = inf |
| maximum number of conditions to pick, regardless of pickingMethod. More... | |
| Property | pickingMethod |
| string describing how to pick the next condition More... | |
| Property | customPickFevalable |
| fevalable cell array for custom picking of condition numbers More... | |
| Property | pickSequence |
| array of condition numbers to be picked More... | |
| Property | isDone = true |
| true or false, whether all done picking conditions More... | |
| Property | donePickingFevalable = {} |
| optional fevalable cell array to invoke when isDone | |
| Property | allSizes |
| array of sizes for each parameter's values | |
| Property | subscriptCoefficients |
| coefficients to convert contion number to values indexes | |
| Property | pickingMethodDetails = {} |
| vasrargin details from the last call to setPickingMethod() | |
| Properties and Events inherited from topsRunnable | |
| Property | startFevalable = {} |
| optional fevalable cell array to invoke just before running | |
| Property | finishFevalable = {} |
| optional fevalable cell array to invoke just after running | |
| Property | isRunning = false |
| true or false, whether this object is currently busy running | |
| Property | caller |
| topsRunnable that invoked run() on this object, or empty | |
| Property | startString = 'start' |
| string used for topsDataLog entry just before run() | |
| Property | finishString = 'finish' |
| string used for topsDataLog entry just after run() | |
| Properties and Events inherited from topsFoundation | |
| Property | name = '' |
| a string name to indentify the object | |
| Property | clockFunction =@topsClock |
| clock function, to standardize | |
Methods | |
| self | topsConditions (varargin) |
| Constuct with name optional. More... | |
| fig | gui (self) |
| Open a GUI to view object details. More... | |
| addParameter (self, parameter, values) | |
| Add a parameter and set of values for condition formation. More... | |
| addAssignment (self, parameter, object, varargin) | |
| Add an assignment target for a parameter value. More... | |
| countConditions (self) | |
| Account for parameter-value combinations from allParameters. | |
| setCondition (self, n) | |
| Pick parameter values for the given condition number. More... | |
| setPickingMethod (self, pickingMethod, varargin) | |
| Choose how to pick new conditions. More... | |
| start (self) | |
| Log action and reset() as needed. More... | |
| reset (self) | |
| Clear previous conditions and begin picking from scratch. More... | |
| run (self) | |
| Pick a new condition and assign parameter values to targets. | |
| finish (self) | |
| Log action and call out as needed. More... | |
| n | pickConditionNumber (self) |
| Pick a condition number using pickingMethod. More... | |
| Methods inherited from topsRunnable | |
| self | topsRunnable (varargin) |
| Constuct with name optional.  More... | |
| g | gui (self) |
| Show heirarchy of topsRunnable[Composite] objects. | |
| start (self) | |
| Log action and prepare to do flow control. More... | |
| finish (self) | |
| Log, action and finish doing flow control. More... | |
| logAction (self, actionName, actionData) | |
| Log an event of interest with topsDataLog. More... | |
| logFeval (self, fevalName, fevalable) | |
| Log a function call with topsDataLog. More... | |
| Methods inherited from topsFoundation | |
| self | topsFoundation (name) |
| Constuct with name optional. More... | |
| fig | gui (self) |
| Open a GUI to view object details. More... | |
| p | guiPanel (self, varargin) |
| Make a topsDetailPanel with details about this object. More... | |
Additional Inherited Members | |
| Static Methods inherited from topsFoundation | |
| static c index | cellAdd (c, item, index) |
| Add an item to a cell array. More... | |
| static selector | cellContains (c, item) |
| Does a cell array conatin an item? More... | |
| static c | cellRemoveItem (c, item) |
| Remove an item from a cell array. More... | |
| static c | cellRemoveElement (c, index) |
| Remove indexed elements from a cell array. More... | |
| static index selector | findStructName (s, name) |
| Where is the given name in the given struct array? More... | |
| self topsConditions | ( | varargin | ) |
Constuct with name optional.
| name | optional name for this object |
If name is provided, assigns name to this object.
| fig gui | ( | self | ) |
Open a GUI to view object details.
Opens a new GUI with components suitable for viewing objects of this class. Returns a topsFigure object which contains the GUI.
| addParameter | ( | self | , |
| parameter | , | ||
| values | |||
| ) |
Add a parameter and set of values for condition formation.
| parameter | string field name of a parameter |
| values | cell array of posssible values for parameter |
Adds the named parameter and its values call array to allParameters. If allParameters already contains a field named parameter, its values will be replaced but any assignments will remain in place.
The parameter-value combinations in allConditions will be updated immediately to reflect parameter and its set of values.
After a parameter is added with addParameter(), parameter assignments may be added with addAssignment().
| addAssignment | ( | self | , |
| parameter | , | ||
| object | , | ||
| varargin | |||
| ) |
Add an assignment target for a parameter value.
| parameter | one of the field names of allParameters |
| object | an object to receive values of parameter |
| varargin | arguments to pass to substruct() which specify a property or element of object. |
Adds the specified property or element of object as an assignment target for the given property. During run() or setCondition(), the new value of property will be automatically assigned to the target. A property may have multiple assignment targets, each added with addAssignment().
varargin will be passed to Matlab's built-in substruct to specify an arbitrary reference into object–the reference could be to one of object's properties, a sub-element or sub-field of a property, an element of object if it's an array, and so on.
For example, to specify the 'data' property of object, you would use the following to specify a "dot" reference to the "data" field:
If parameter is not one of fields of allParameters, does nothing.
| setCondition | ( | self | , |
| n | |||
| ) |
Pick parameter values for the given condition number.
| n | the number of the condition to set, from 1 through nConditions |
Sets currentCondition to the given n, appends n to the history in previousConditions, and assigns appropriate values to the fields of currentValues. Adds the new currentCondition and currentValues to topsDataLog.
| setPickingMethod | ( | self | , |
| pickingMethod | , | ||
| varargin | |||
| ) |
Choose how to pick new conditions.
| pickingMethod | string describing how to pick conditions. @varargin additional arguments specific to each pickingMehtod, described below. |
setPickingMethod() determines how run() will choose a new conditon number and traverse parameter values. pickingMethod describes the general approach and varargin may supply some details.
The valid values for pickingMethod are:
If pickingMethod is not one of the valid values above, defaults to 'coin-toss'.
| start | ( | self | ) |
Log action and reset() as needed.
Extends the start() method of topsRunnable to also reset() condition picking as needed.
| reset | ( | self | ) |
Clear previous conditions and begin picking from scratch.
Clears out the currentCondition and currentValues, and erases the histor of condition numbers stored in previousConditions. Calls setPickingMethod() with the current pickingMethod, to generate a fresh pickSequence as necessary. Sets isDone to false.
run() and start() automatically call reset() when isDone is true, to prepare for future run() calls.
| finish | ( | self | ) |
Log action and call out as needed.
Extends the finish() method of topsRunnable to also invoke donePickingFevalable and tell caller to stop running, when condition picking is over.
| n pickConditionNumber | ( | self | ) |
Pick a condition number using pickingMethod.
Returns a new condition number picked using the pickingMethod and other details specified with setPickingMethod(). If the picking method has reached its natural conclusion, or the total number of picks is greated than maxPicks, sets isDone to true.
| Property allParameters = struct([]) |
struct array of parameter names, values and assignment targets
Each field name of allParameters is the name of an arbitrary parameter. Each field contains another struct with the fields:
Users should call addParameter() and addAssignment() instead of manipulating allParameters directly.
| Property previousConditions = [] |
array of previously picked condition numbers
Keeps track of the history of conditions that were picked, including currentCondition. reset() empties out previousConditions.
| Property currentValues = struct |
struct of all parameters and their current values
Each field name of currentValues is one of the parameter names from allParameters. Each field contains the value of that parameter that corresponds to the condition number in currentCOndition.
| Property maxPicks = inf |
maximum number of conditions to pick, regardless of pickingMethod.
| Property pickingMethod |
string describing how to pick the next condition
pickingMethod is the string name of a method for picking the next condition. See setPickingMethod() for a description of valid pickingMethods.
Users should call setPickingMethod() instead of accessing the pickingMethod property directly.
| Property customPickFevalable |
fevalable cell array for custom picking of condition numbers
When pickingMethod is 'custom', run() invokes customPickFevalable to pick the next condition number. See setPickingMethod() for a description of customPickFevalable.
Users should call setPickingMethod() instead of accessing customPickFevalable directly.
| Property pickSequence |
array of condition numbers to be picked
When pickingMethod is 'shuffled' or 'sequential', setPickingMethod() precomputes pickSequence with complete sets of condition numbers.
Users should call setPickingMethod() instead of accessing pickSequence directly.
| Property isDone = true |


Would you like to know more about Earth
Would you like to know more about Mars
Voltar para página inicial


Guanica Bay/Rio Loco Watershed
Partnership Initiative
Last Updated: October 2013
About the Watershed
Conservation Actions
Layers...
< / >


Bite Size Bayes¶
Copyright 2020 Allen B. Downey
License: Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Review¶
So far we have been working with distributions of only one variable. In this notebook we’ll take a step toward multivariate distributions, starting with two variables.
We’ll use cross-tabulation to compute a joint distribution, then use the joint distribution to compute conditional distributions and marginal distributions.
We will re-use pmf_from_seq
, which I introduced in a previous notebook.
def pmf_from_seq(seq):
"""Make a PMF from a sequence of values.
seq: sequence
returns: Series representing a PMF
"""
pmf = pd.Series(seq).value_counts(sort=False).sort_index()
pmf /= pmf.sum()
return pmf
Cross tabulation¶
To understand joint distributions, I’ll start with cross tabulation. And to demonstrate cross tabulation, I’ll generate a dataset of colors and fruits.
Here are the possible values.
colors = ['red', 'yellow', 'green']
fruits = ['apple', 'banana', 'grape']
And here’s a random sample of 100 fruits.
np.random.seed(2)
fruit_sample = np.random.choice(fruits, 100, replace=True)
We can use pmf_from_seq
to compute the distribution of fruits.
pmf_fruit = pmf_from_seq(fruit_sample)
pmf_fruit
apple 0.32
banana 0.29
grape 0.39
dtype: float64
And here’s what it looks like.
pmf_fruit.plot.bar(color='C0')
plt.ylabel('Probability')
plt.title('Distribution of fruit');
Similarly, here’s a random sample of colors.
color_sample = np.random.choice(colors, 100, replace=True)
Here’s the distribution of colors.
pmf_color = pmf_from_seq(color_sample)
pmf_color
green 0.32
red 0.33
yellow 0.35
dtype: float64
And here’s what it looks like.
pmf_color.plot.bar(color='C1')
plt.ylabel('Probability')
plt.title('Distribution of colors');
Looking at these distributions, we know the proportion of each fruit, ignoring color, and we know the proportion of each color, ignoring fruit type.
But if we only have the distributions and not the original data, we don’t know how many apples are green, for example, or how many yellow fruits are bananas.
We can compute that information using crosstab
, which computes the number of cases for each combination of fruit type and color.
xtab = pd.crosstab(color_sample, fruit_sample,
rownames=['color'], colnames=['fruit'])
xtab
| fruit | apple | banana | grape |
|---|---|---|---|
| color | |||
| green | 11 | 9 | 12 |
| red | 12 | 8 | 13 |
| yellow | 9 | 12 | 14 |
The result is a DataFrame with colors along the rows and fruits along the columns.
Heatmap¶
The following function plots a cross tabulation using a pseudo-color plot, also known as a heatmap.
It represents each element of the cross tabulation with a colored square, where the color corresponds to the magnitude of the element.
The following function generates a heatmap using the Matplotlib function pcolormesh
:
def plot_heatmap(xtab):
"""Make a heatmap to represent a cross tabulation.
xtab: DataFrame containing a cross tabulation
"""
plt.pcolormesh(xtab)
# label the y axis
ys = xtab.index
plt.ylabel(ys.name)
locs = np.arange(len(ys)) + 0.5
plt.yticks(locs, ys)
# label the x axis
xs = xtab.columns
plt.xlabel(xs.name)
locs = np.arange(len(xs)) + 0.5
plt.xticks(locs, xs)
plt.colorbar()
plt.gca().invert_yaxis()
plot_heatmap(xtab)
Joint Distribution¶
A cross tabulation represents the “joint distribution” of two variables, which is a complete description of two distributions, including all of the conditional distributions.
If we normalize xtab
so the sum of the elements is 1, the result is a joint PMF:
joint = xtab / xtab.to_numpy().sum()
joint
| fruit | apple | banana | grape |
|---|---|---|---|
| color | |||
| green | 0.11 | 0.09 | 0.12 |
| red | 0.12 | 0.08 | 0.13 |
| yellow | 0.09 | 0.12 | 0.14 |
Each column in the joint PMF represents the conditional distribution of color for a given fruit.
For example, we can select a column like this:
col = joint['apple']
col
color
green 0.11
red 0.12
yellow 0.09
Name: apple, dtype: float64
If we normalize it, we get the conditional distribution of color for a given fruit.
col / col.sum()
color
green 0.34375
red 0.37500
yellow 0.28125
Name: apple, dtype: float64
Each row of the cross tabulation represents the conditional distribution of fruit for each color.
If we select a row and normalize it, like this:
row = xtab.loc['red']
row / row.sum()
fruit
apple 0.363636
banana 0.242424
grape 0.393939
Name: red, dtype: float64
The result is the conditional distribution of fruit type for a given color.
Conditional distributions¶
The following function takes a joint PMF and computes conditional distributions:
def conditional(joint, name, value):
"""Compute a conditional distribution.
joint: DataFrame representing a joint PMF
name: string name of an axis
value: value to condition on
returns: Series representing a conditional PMF
"""
if joint.columns.name == name:
cond = joint[value]
elif joint.index.name == name:
cond = joint.loc[value]
return cond / cond.sum()
The second argument is a string that identifies which axis we want to select; in this example, 'fruit'
means we are selecting a column, like this:
conditional(joint, 'fruit', 'apple')
color
green 0.34375
red 0.37500
yellow 0.28125
Name: apple, dtype: float64
And 'color'
means we are selecting a row, like this:
conditional(joint, 'color', 'red')
fruit
apple 0.363636
banana 0.242424
grape 0.393939
Name: red, dtype: float64
Exercise: Compute the conditional distribution of color for bananas. What is the probability that a banana is yellow?
# Solution
cond = conditional(joint, 'fruit', 'banana')
cond
color
green 0.310345
red 0.275862
yellow 0.413793
Name: banana, dtype: float64
# Solution
cond['yellow']
0.41379310344827586
Marginal distributions¶
Given a joint distribution, we can compute the unconditioned distribution of either variable.
If we sum along the rows, which is axis 0, we get the distribution of fruit type, regardless of color.
joint.sum(axis=0)
fruit
apple 0.32
banana 0.29
grape 0.39
dtype: float64
If we sum along the columns, which is axis 1, we get the distribution of color, regardless of fruit type.
joint.sum(axis=1)
color
green 0.32
red 0.33
yellow 0.35
dtype: float64
These distributions are called “marginal” because of the way they are often displayed. We’ll see an example later.
As we did with conditional distributions, we can write a function that takes a joint distribution and computes the marginal distribution of a given variable:
def marginal(joint, name):
"""Compute a marginal distribution.
joint: DataFrame representing a joint PMF
name: string name of an axis
returns: Series representing a marginal PMF
"""
if joint.columns.name == name:
return joint.sum(axis=0)
elif joint.index.name == name:
return joint.sum(axis=1)
Here’s the marginal distribution of fruit.
pmf_fruit = marginal(joint, 'fruit')
pmf_fruit
fruit
apple 0.32
banana 0.29
grape 0.39
dtype: float64
And the marginal distribution of color:
pmf_color = marginal(joint, 'color')
pmf_color
color
green 0.32
red 0.33
yellow 0.35
dtype: float64
The sum of the marginal PMF is the same as the sum of the joint PMF, so if the joint PMF was normalized, the marginal PMF should be, too.
joint.to_numpy().sum()
1.0
pmf_color.sum()
1.0
However, due to floating point error, the total might not be exactly 1.
pmf_fruit.sum()
0.9999999999999999
Exercise: The following cells load the data from the General Social Survey that we used in Notebooks 1 and 2.
# Load the data file
import os
if not os.path.exists('gss_bayes.csv'):
!wget https://github.com/AllenDowney/BiteSizeBayes/raw/master/gss_bayes.csv
gss = pd.read_csv('gss_bayes.csv', index_col=0)
As an exercise, you can use this data to explore the joint distribution of two variables:
partyid
encodes each respondent’s political affiliation, that is, the party the belong to. Here’s the description.polviews
encodes their political alignment on a spectrum from liberal to conservative. Here’s the description.
The values for partyid
are
0 Strong democrat
1 Not str democrat
2 Ind,near dem
3 Independent
4 Ind,near rep
5 Not str republican
6 Strong republican
7 Other party
The values for polviews
are:
1 Extremely liberal
2 Liberal
3 Slightly liberal
4 Moderate
5 Slightly conservative
6 Conservative
7 Extremely conservative
Make a cross tabulation of gss['partyid']
and gss['polviews']
and normalize it to make a joint PMF.
# Solution
xtab2 = pd.crosstab(gss['partyid'], gss['polviews'])
joint2 = xtab2 / xtab2.to_numpy().sum()
Use plot_heatmap
to display a heatmap of the joint distribution. What patterns do you notice?
plot_heatmap(joint2)
plt.xlabel('polviews')
plt.title('Joint distribution of polviews and partyid');
Use marginal
to compute the marginal distributions of partyid
and polviews
, and plot the results.
# Solution
marginal(joint2, 'polviews').plot.bar(color='C2')
plt.ylabel('Probability')
plt.title('Distribution of polviews');
# Solution
marginal(joint2, 'polviews').plot.bar(color='C3')
plt.ylabel('Probability')
plt.title('Distribution of polviews');
Use conditional
to compute the conditional distribution of partyid
for people who identify themselves as “Extremely conservative” (polviews==7
). How many of them are “strong Republicans” (partyid==6
)?
# Solution
cond1 = conditional(joint2, 'polviews', 7)
cond1.plot.bar(label='Extremely conservative', color='C4')
plt.ylabel('Probability')
plt.title('Distribution of partyid')
cond1[6]
0.35297805642633234
Use conditional
to compute the conditional distribution of polviews
for people who identify themselves as “Strong Democrat” (partyid==0
). How many of them are “Extremely liberal” (polviews==1
)?
# Solution
cond2 = conditional(joint2, 'partyid', 0)
cond2.plot.bar(label='Strong democrat', color='C6')
plt.ylabel('Probability')
plt.title('Distribution of polviews')
cond2[1]
0.06887366818873669
Review¶
In this notebook we started with cross tabulation, which we normalized to create a joint distribution, which describes the distribution of two (or more) variables and all of their conditional distributions.
We used heatmaps to visualize cross tabulations and joint distributions.
Then we defined conditional
and marginal
functions that take a joint distribution and compute conditional and marginal distributions for each variables.
As an exercise, you had a chance to apply the same methods to explore the relationship between political alignment and party affiliation using data from the General Social Survey.
You might have noticed that we did not use Bayes’s Theorem in this notebook. In the next notebook we’ll take the ideas from this notebook and apply them Bayesian inference.


/**
* @constructs View - A View is mini configuration of both a camera position/rotation and a protion of the area of the canvas,
* where the captured projection by that camera of the scene will be rendered.
* @param {float} x - The position within the X axis of the initial point of the bbox - defaults to 0.
* @param {float} y - The position within the Y axis of the initial point of the bbox - defaults to 0.
* @param {float} width - The width of the bbox.
* @param {float} height - The height of the bbox.
* @param {Array} up - An ordered triplet of integers - the rotation of the camera.
* @param {Array} eye - An ordered triplet of integers - the position of the camera.
* @param {float} fov - Camera frustum vertical field of view.
* @param {Array} parts - Smaller rectangular portions within the bbox.
*/
var View = function (x, y, width, height, up, eye, fov, parts) {
this.x = x || 0;
this.y = y || 0;
this.up = up || [1, 0, 0];
this.width = width || 0;
this.height = height || 0;
this.eye = eye || [0, 300, 1800];
this.fov = fov || 60;
this.parts = parts || [];
}
export { View };


web
Full-Stack Web Development
My mission is to make the world a better place one line of code at a time, whether that be though an innovative app that improves a persons life or a simple game that makes someone smile.
terrain
Environmental Scientist
After earning my Bachelors of Science in Environmental Science from Western Washington University, I spent multiple seasons with the US Forest Service as a Ranger protecting and preserving the natural world.
airplanemode_active
World Traveler
Most recently, I returned from a month long backpacking trip around Japan. 18 countries and counting.
"Broad, wholesome, charitable views of men and things cannot be acquired by vegetating in one little corner of the earth all one's lifetime." - Mark Twain
Key Projects
Personal Projects and Skills
Simple social media app similar to Twitter. Built with React, GraphQL, MongoDB, Node, and Express (MERNG stack)
App designed for companies to gather user feedback via emailed surveys. Built using React, Redux, MongoDB, Express, NodeJS, and utilizing Google Oauth2.0 (signup/signin), Stripe (credit card payments), Cookie-Session, Passport, and Sendgrid (emails). To add credits use card number: 4242-4242-4242-4242-4242
A simple trivia app built with React, Redux, and the Open Trivia API. Up to 4 players, 3 difficulties, and minimal API calls show questions quickly and keep the game fast paced
- JavaScript
- HTML5/CSS3
- React
- GraphQL
- Node.js
- MongoDB
- Express
- Drupal 5
- CMS(Clickability,PCAT)
- Git/Github
- Eloqua
- AWS
- RESTful API's
- Heroku
- Photoshop
- Bootstrap/Materialize
- Jira
- Adobe Suite


if true
then the build will set environment
variables for each project in the repo. The project name
will be used as the key and the value will be set to the
revision number of the project. The project name will be
converted to a valid environment variable.
core
common
app
REPO_REV_CORE=8e52f38771c3163ec67ae32a6d35364e720ef3a8
REPO_REV_COMMON=f41af34f824a690463e157a4d2c531fa63ce6cc8
REPO_REV_APP=fdf57f76eb5cb9bd351552f7bf85be3987427918


Train notes
I'm just leaving Union Station, and it occurred to me that I know nothing about how VIA achieves their wifi-on-the-train. Apparently they're using update:GPRS and satellite, Charlie, and they need help with latency. I'm also a little concerned that I might be registering with another train, and I don't know if they've centralized the accounts off-train. Worse case is I've paid $10 for 10 minutes of access and then I spend the rest of the train working with the code and documents I brought with me.
To my Tarannian deadsquid friends, I'm just leaving the Big Smoke, but I will be back Monday. This week wasn't really a great chance to hang out anyways but I think next week will be better. The first week went cool although a bit slow, but I imagine that's normal for beginnings.
Technically, I didn't know what to expect coming into this, but right now I'm pretty excited. My belief is that once we put some commitments into order we should be able to move at a very rapid pace. The team seems competent and also experienced at playing multiple roles.
The other thing I did while in TO was check out some of the folding bikes I've had my eye on for a while. Urbane Cycle had exactly the model I'd been drooling over on the net - the Dahon Speed Pro TT. Unfortunately, the price is higher than I hoped but closer to about what I was afraid it would be. Maybe next week I will have enough free time to test drive it to determine if it, or maybe a cheaper cousin, could replace my non-folding bike.
Anyways, I should get some work done...
About this entry
You"re currently reading "Train notes," an entry on a crick in the net
- Published:
- 07.27.06 / 10am
- Category:
- Circular File, Gadget-o-rama
J! You didn't call me!!! When were you in Toronto? I could have taken you out for a few pints...


This feature has been added since Bitrate Viewer Version 2.0 - zoom a marked area within the viewer window several times downto a single sample depth view. To start a zoom just LeftClick and drag an area of your needs (see right-hand screenshot). Small tick marks as you can see on the screenshot are not displayed in the standard non-zoomed view except you move the mouse pointer within a small band at the top of the view. The tick marks are placed at every 5% of the views width of which every 25% is somewhat bigger than the others. Thus may allow you a more precise placement of your zoom. Notice if this is your first zoom you want to apply on a view you will see a zoom indicator bar below the bottom of the viewer window. A red blinking bull-eye will show you the percentage of the view currently covered.
To adjust your selection of the zoomable area hold Shift-RightMouseButton down and drag the area to your size as you want it. Hold Ctrl-RightMouseButton down within the marked zoomable area you move the area along the viewer window. Note that the percentage value displayed centered to the zoomable area is based on the width of the viewer window in pixels.
Now when you're done with you selection of a zoomable area use a RightClick into this area just marked and displayed and the tool will enter the zoom. Several things will happen now: The most important thing of course is, that the view is zoomed to your selection and now shows the amount of bitrate samples that lie between start and end of your selection.
Note: If you want to exit your current selection, LeftClick once anywhere into the viewer window to cancel the selection.
The zoom indicator below the viewer window shows an orange colored fixed bull-eye which indicated the width in percent of the amount of bitrate samples currently displayed vs. its total amount.
An additional zoom flag is displayed right-hand beneath the total time value on the right hand side of the GUI. It indicates that the view is shown with an active zoom and optional the depth number of zooming is appended. You can switch between standard and extended display of the zoom flag with RightClick.
In the headline of the viewer window you'll see a status on its right
side containing the amount of bitrate samples currently displayed
vs. its total amount, the duration in hh:mm:ss:mil of the zoom
covered and the percentage of the bitrate samples (current vs.
total). The latter may differ and is mostly less than the percentage
displayed when you've selected the zoomable are before. The pixel
values of the viewer window needn't match accurately to the amount
of bitrate samples. Some specialities occur for the frame analysis
method: The headline will show the frame number your mouse tracked
cursor is currently pointing to and the term samples here is identical
to frames. Note that the frame number starts with the value 1.
For the other analysis methods the current sample number is displayed
in the headline. Sample numbers also start with the value 1.
Note that when your zoomed area does not cover the minimum and/or maximum bitrate values with their markers, an arrow of the same color as the missing non-displayed marker is displayed indicating the direction to the true position of the missing item.
If the missing minimum and maximum bitrate values both lie on the same direction out of the view the longer arrow indicates that its position is farther outward than the other one. As you can see on the screenshot beneath these arrows are working like hyperlinks. Once you LeftClick on either one the zoomed view will be moved around the minimum or maximum bitrate position you've selected and if possible the selected item will be centered within the viewer window. The scale of the moved zoom view will remain the same across minimum and maximum bitrate jumps. By the way the zoom depth value of the zoom flag (right hand to the total time value display) won't change because the scale of the view is the same after re-positioning.
Beneath zooming around the minimum or maximum bitrate marker you have two more possibilities to move to another position and zoom with the same scale as the current zoom is displayed (so the depth value of the zoom flag also doesn't change):
The remaining zoom manipulations will all change the scale of the resulting zoom display and so the amount of bitrates on the viewer window will be different to the previous zoomed display. So here we have:


Encourage your students not to use Safari for taking exams or quizzes when
they include images as part of your exam. We have had reports recently from
several students about issues of images failing to load.
Our college encourages faculty to consider a mixed approach when building
assessments and considering different strategies when requiring students to
demonstrate various levels of understanding and knowledge. There are a number
of things to consider when creating assessments and considering academic
integrity. We are finding faculty who are having the most success are those
who are using a multi-pronged approach.
-
Conduct a student needs assessment. What kind of technology do students have
access to? What is their internet service like? Do they have things that may
interfere with their test-taking abilities? Here is a sample survey that has
been used by some faculty to figure out in advance what challenges may be
faced during an assessment.
-
Example:
Student Needs Assessment
- Turn on Canvas Quiz Log
-
Canvas Quiz log is a tool that can be turned on for each of your Canvas
that will help you identify if students are navigating away from the
Canvas space during quizzing.
-
As part of your exam or quiz, ask your students to review and complete an
Academic Integrity Quiz or agreement
-
Example:
Academic Integrity Agreement/quiz
- Use
Zoom Rooms
- Mix the types of Questions
-
Some faculty start out with retention questions that are multiple choice
and then add a few questions later that test transfer through short
response or essay.
- Leverage Canvas Quiz functionality
-
What is a Quiz?
-
Intro to Assessment Tools and Practices
- Reconsider your types of assessments
-
Implement many low-stakes assessments as opposed to few high stakes
assessments
-
Have students generate material, such as a paper, project, or even a video
- Have students work in groups
-
Have students submit hand-written assignments (so you can check for
consistency across assignments)
- Have students submit e-portfolios
When building your tests and quizzes, you will also want to review our
Academic Integrity information


{%extends "base.html" %} {%block title%} Flask connect API {%endblock%} {%block titleH1%}Article(s):{%endblock%} {%block body%}
To access to one user profil : httpd://[...]/users/#id (replace #id by the user'id)
To delete one user profil : httpd://[...]/users/delete/#id (replace #id by the user'id)
Get all users


Before we create a file corruption fault we need to create the file we want to test with. This is useful because it allows you to corrupt a file differently each time the application tries to access it to test all aspects of file processing.
Create a file to test:
Create a text file with the following text, save it as for_corruption.txt to your desktop. We will use this file in corruption, because it is well formed and any corruption will be easy to see.
This file has been created to show off the file corruption of Holodeck.
It should be exactly 73 characters long and 13 lines down.xxxxxxxxxxxxx
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
This file has been created to show off the file corruption of Holodeck.
Create a New File Corruption Fault:
To create a file corruption fault click Application -> "Create a New File Corruption Fault…" This will bring up the file corruption wizard.
In this tutorial we want to create random corruption throughout this file. Holodeck’s File corruption will select random bits to corrupt in random lengths throughout the file. This can generate anywhere from only slightly corrupted data, to extremely corrupted data.
For our purposes we want the file to be as corrupted as possible so the corruption will find any easy to find file reading bugs. Slide the corruption amount slider all the way to the right until it displays 200 out of every 10,000 bytes to be corrupted. Leave Overwrite and Corrupt random single bytes at their default values.
The final page shows a summary of the file corruption that you have selected. To return to any page, simply highlight the information you would like to change, and click edit; doing this will return you to the page of the wizard which contains that information.


The Caterpillar and Alice looked at each other for some time
in silence: at last the Caterpillar took the hookah out of its
mouth, and addressed her in a languid, sleepy voice.
'Who are you?' said the Caterpillar.
This was not an encouraging opening for a conversation. Alice
replied, rather shyly, 'I--I hardly know, sir, just at present--
at least I know who I was when I got up this morning, but I think
I must have been changed several times since then.'
'What do you mean by that?' said the Caterpillar sternly.

'I'm afraid I can't put it more clearly,' Alice replied very
politely, 'for I can't understand it myself to begin with; and
being so many different sizes in a day is very confusing.'
'It isn't,' said the Caterpillar.
'Well, perhaps you haven't found it so yet,' said Alice; 'but
when you have to turn into a chrysalis--you will some day, you
know--and then after that into a butterfly, I should think you'll
feel it a little queer, won't you?'
'Not a bit,' said the Caterpillar.
'Well, perhaps your feelings may be different,' said Alice;
'all I know is, it would feel very queer to me.'
'You!' said the Caterpillar contemptuously. 'Who are
you?'
Which brought them back again to the beginning of the
conversation.
Here was another puzzling question; and as Alice could not
think of any good reason, and as the Caterpillar seemed to be in
a very unpleasant state of mind, she turned away.
'Come back!' the Caterpillar called after her. 'I've something
important to say!'
This sounded promising, certainly: Alice turned and came back
again.
'Keep your temper,' said the Caterpillar.
'Is that all?' said Alice, swallowing down her anger as well
as she could.
'No,' said the Caterpillar.
Alice thought she might as well wait, as she had nothing else
to do, and perhaps after all it might tell her something worth
hearing. For some minutes it puffed away without speaking, but at
last it unfolded its arms, took the hookah out of its mouth
again, and said, 'So you think you're changed, do you?'
'I'm afraid I am, sir,' said Alice; 'I can't remember things
as I used--and I don't keep the same size for ten minutes
together!'
'Can't remember what things?' said the Caterpillar.
'Well, I've tried to say "How doth the little busy
bee," but it all came different!' Alice replied in a very
melancholy voice.
'Repeat, "you are old, Father William,"' said the
Caterpillar.
 Do you think I can listen
all day to such stuff? Be off, or I'll kick you down
stairs!'
'That is not said right,' said the Caterpillar.
'Not quite right, I'm afraid,' said Alice, timidly;
'some of the words have got altered.'
'It is wrong from beginning to end,' said the Caterpillar
decidedly, and there was silence for some minutes.
The Caterpillar was the first to speak.
'What size do you want to be?' it asked.
'Oh, I'm not particular as to size,' Alice hastily replied;
'only one doesn't like changing so often, you know.'
'I don't know,' said the Caterpillar.
Alice said nothing: she had never been so much contradicted in
her life before, and she felt that she was losing her temper.
'Are you content now?' said the Caterpillar.
'Well, I should like to be a little larger, sir, if you
wouldn't mind,' said Alice: 'three inches is such a wretched
height to be.'
'It is a very good height indeed!' said the Caterpillar
angrily, rearing itself upright as it spoke (it was exactly three
inches high).
'But I'm not used to it!' pleaded poor Alice in a piteous
tone. And she thought of herself, 'I wish the creatures wouldn't
be so easily offended!'
'You'll get used to it in time,' said the Caterpillar; and it
put the hookah into its mouth and began smoking again.
This time Alice waited patiently until it chose to speak
again. In a minute or two the Caterpillar took the hookah out of
its mouth and yawned once or twice, and shook itself. Then it got
down off the mushroom, and crawled away in the grass, merely
remarking as it went, 'One side will make you grow taller, and
the other side will make you grow shorter.'
'One side of what? The other side of what?'
thought Alice to herself.
'Of the mushroom,' said the Caterpillar, just as if she had
asked it aloud; and in another moment it was out of sight.
Alice remained looking thoughtfully at the mushroom for a
minute, trying to make out which were the two sides of it; and as
it was perfectly round, she found this a very difficult question.
However, at last she stretched her arms round it as far as they
would go, and broke off a bit of the edge with each hand.
'And now which is which?' she said to herself, and nibbled a
little of the right-hand bit to try the effect: the next moment
she felt a violent blow underneath her chin: it had struck her
foot!
She was a good deal frightened by this very sudden change, but
she felt that there was no time to be lost, as she was shrinking
rapidly; so she set to work at once to eat some of the other bit.
Her chin was pressed so closely against her foot, that there was
hardly room to open her mouth; but she did it at last, and
managed to swallow a morsel of the lefthand bit.
'Come, my head's free at last!' said Alice in a tone of
delight, which changed into alarm in another moment, when she
found that her shoulders were nowhere to be found: all she could
see, when she looked down, was an immense length of neck, which
seemed to rise like a stalk out of a sea of green leaves that lay
far below her.
'What can all that green stuff be?' said Alice. 'And
where have my shoulders got to? And oh, my poor hands, how
is it I can't see you?' She was moving them about as she spoke,
but no result seemed to follow, except a little shaking among the
distant green leaves.
As there seemed to be no chance of getting her hands up to her
head, she tried to get her head down to them, and was delighted
to find that her neck would bend about easily in any direction,
like a serpent. She had just succeeded in curving it down into a
graceful zigzag, and was going to dive in among the leaves, which
she found to be nothing but the tops of the trees under which she
had been wandering, when a sharp hiss made her draw back in a
hurry: a large pigeon had flown into her face, and was beating
her violently with its wings.
'Serpent!' screamed the Pigeon.
'I'm not a serpent!' said Alice indignantly. 'Let me
alone!'
'Serpent, I say again!' repeated the Pigeon, but in a more
subdued tone, and added with a kind of sob, 'I've tried every
way, and nothing seems to suit them!'
'I haven't the least idea what you're talking about,' said
Alice.
'I've tried the roots of trees, and I've tried banks, and I've
tried hedges,' the Pigeon went on, without attending to her; 'but
those serpents! There's no pleasing them!'
Alice was more and more puzzled, but she thought there was no
use in saying anything more till the Pigeon had finished.
'As if it wasn't trouble enough hatching the eggs,' said the
Pigeon; 'but I must be on the look-out for serpents night and
day! Why, I haven't had a wink of sleep these three weeks!'
'I'm very sorry you've been annoyed,' said Alice, who was
beginning to see its meaning.
'And just as I'd taken the highest tree in the wood,'
continued the Pigeon, raising its voice to a shriek, 'and just as
I was thinking I should be free of them at last, they must needs
come wriggling down from the sky! Ugh, Serpent!'
'But I'm not a serpent, I tell you!' said Alice. 'I'm
a--I'm a--'
'Well! what are you?' said the Pigeon. 'I can see
you're trying to invent something!'
'I--I'm a little girl,' said Alice, rather doubtfully, as she
remembered the number of changes she had gone through that
day.
'A likely story indeed!' said the Pigeon in a tone of the
deepest contempt. 'I've seen a good many little girls in my time,
but never one with such a neck as that! No, no!
This was such a new idea to Alice, that she was quite silent
for a minute or two, which gave the Pigeon the opportunity of
adding, 'You're looking for eggs, I know that well enough;
and what does it matter to me whether you're a little girl or a
serpent?'
'It matters a good deal to me,' said Alice hastily;
'but I'm not looking for eggs, as it happens; and if I was, I
shouldn't want yours: I don't like them raw.'
'Well, be off, then!' said the Pigeon in a sulky tone, as it
settled down again into its nest. Alice crouched down among the
trees as well as she could, for her neck kept getting entangled
among the branches, and every now and then she had to stop and
untwist it. After a while she remembered that she still held the
pieces of mushroom in her hands, and she set to work very
carefully, nibbling first at one and then at the other, and
growing sometimes taller and sometimes shorter, until she had
succeeded in bringing herself down to her usual height.
It was so long since she had been anything near the right
size, that it felt quite strange at first; but she got used to it
in a few minutes, and began talking to herself, as usual. 'Come,
there's half my plan done now! How puzzling all these changes
are! I'm never sure what I'm going to be, from one minute to
another! However, I've got back to my right size: the next thing
is, to get into that beautiful garden--how is that to be
done, I wonder?' As she said this, she came suddenly upon an open
place, with a little house in it about four feet high. 'Whoever
lives there,' thought Alice, 'it'll never do to come upon them
this size: why, I should frighten them out of their wits!'
So she began nibbling at the righthand bit again, and did not
venture to go near the house till she had brought herself down to
nine inches high.
Project Gutenberg Release 2.7a of Alice in Wonderland
These electronic texts of the classics are released in the CopyLeft traditions of the Free Software Foundation and Richard M. Stallman. This means the document is to be considered under copyright, and an individual may make as may copies for self and/or friends, etc. and will be under no obligation as long as this is not commercial. Not for profit corporations and all other corporate entities are not to distribute this file for any more cost to the user than $2 and only if a disk is provided for that fee, including all shipping-handling and/or other fees associated with that disk. If this file is to be included with any other hardware, software or other material no fee may be charged for this file. If anyone finds an error, and we are sure you will, please email location of the errors to hart@uiucvmd, (BITNET) or<EMAIL_ADDRESS>(INTERNET), or to Duncan Research via U.S. Mail at the address below.


Actions
| Title | Manual trigger |
{{#actions}}
| {{title}}
{{#pendingExecution}}
pending
{{/pendingExecution}}
|
Run |
{{/actions}}
Currently running subprocesses
{{#running.length}}
| Running since | Action |
{{#running}}
| {{since}} |
{{title}} |
{{/running}}
{{/running.length}}
{{^running}}
No currently running subprocesses
{{/running}}
Recently terminated subprocesses
{{#finished.length}}
| Finished | Action | Termination status |
{{#finished}}
| {{finished}} |
{{title}} |
{{status}} |
{{/finished}}
{{/finished.length}}
{{^finished}}
No recently terminated subprocesses
{{/finished}}


Turkey arrests 4 Daesh-linked suspects in Adana
by ANADOLU AGENCYPolice in southern Turkey's Adana arrested Sunday four Daesh-linked suspects, according to security sources.
The suspects were arrested at dawn, confirmed one source who asked not to be named due to security concerns.
The detained are Syrian nationals. They entered Turkey through the Syria border and were plotting a terrorist attack in the southern province.
Since recognizing Daesh as a terrorist group in 2013, Turkey has faced several Daesh attacks, including 10 suicide bombings, seven bombings and four armed attacks, killing 315 people and injuring hundreds.
In response to the attacks, Turkey launched counterterrorism operations at home and Syria, neutralizing 3,500 Daesh terrorists and arresting 5,500.


TODAY'S PRAYER
by Randy EllisCreator God, help us grow in knowledge, wisdom and insight so that we might have a better understanding of Your will for our lives. Amen.
Creator God, help us grow in knowledge, wisdom and insight so that we might have a better understanding of Your will for our lives. Amen.


What’s next?¶
Want to know more about DDS? The primary source of information is the OMG website at http://www.omg.org and specifically the DDS Getting Started page and the DDS specification itself. The specification is a bit wordy and of course deals with minute details, but it is surprisingly easy to follow for a specification.
There are also various resources on the web dealing with DDS in general, as the various vendors have posted tutorials, presentations, general information and documentation on their products. While the details between the various implementations do differ, they have much more in common than what separates them, and so this information is also applicable to Eclipse Cyclone DDS. The one thing in which Eclipse Cyclone DDS really differs is in the details of API, but that’s just syntax.
Obviously there are also things specific to Eclipse Cyclone DDS. The level of documentation of Eclipse is not nearly what it should be, but that will improve over time.
And last but note least: please always feel welcome to ask questions on GitHub!


Package org.apache.sis.referencing.operation.matrix
- The class specializations for such small matrices.
- Methods specific to coordinate systems support like
Matrices.createTransform(…)
. - Matrix inversions tolerant to
NaN
values and non-square matrix in some situations.
This package provides public implementations of small square matrices, with size ranging from 1×1 to 4×4. Those implementations are made public because in many cases, the user know that (s)he is working with (for example) three-dimensional Coordinate Reference Systems (CRS). If the number of CRS dimensions is fixed to 3, then affine transforms between those CRS can be represented by 4×4 matrices, and the derivatives of those transforms can be represented by 3×3 matrices. Since the user know the matrices size, (s)he can use the specific implementation and read or write directly the mrow column field.
Example: in the two dimensional case, an affine transform from a map projection (units in metres) to the screen (units in pixels) can be performed by the following matrix multiplication:
The current implementation uses double-double arithmetic. However this may change in any future SIS version.
org.apache.sis.referencing
for making clearer that this is not a general-purpose library.
For computational intensive calculations, better guarantees on numerical stability, sparse matrices support
and more, consider using an dedicated library like jblas instead.
The Vecmath library shares similar goals than MatrixSIS
.
Like SIS, Vecmath is optimized for small matrices of interest for 2D and 3D graphics.
- Since:
- 0.4
Defined in the sis-referencing
module
-
Class Summary Class Description AffineTransforms2D Bridge betweenMatrix
and Java2DAffineTransform
instances.Matrices Matrix
factory methods and utilities.Matrix1 Matrix2 Matrix3 Matrix4 MatrixSIS AMatrix
able to perform some operations of interest to Spatial Information Systems (SIS). -
Exception Summary Exception Description MismatchedMatrixSizeException Thrown when two matrices can not be added or multiplied because the sizes do not match.NoninvertibleMatrixException Thrown when a matrix can not be inverted.