--- layout: default # title: No title should not show up in header permalink: 02-02-MODEL.html ---
Users
State of entity Users
is modeled using tla+ module
tla/Timeoff_Users.tla
\* State variable Timeoff_Users initialized to an empty set Timeoff_Users = {};
Companies
State of entity Companies
is modeled using tla+ module
tla/Timeoff_Companies.tla
\* State variable Timeoff_Companies initialized to an empty set Timeoff_Companies = {};
tla/TimeoffRegisterCompany.tla
(* * Service entry point for interface /registerCompany(post). * Calls service implementation in procedure * proc_TimeoffRegisterCompany *) macro TimeoffRegisterCompany( input ) { call proc_TimeoffRegisterCompany( input ); }
tla/proc_TimeoffRegisterCompany.tla
(* * Service implementation for interface /registerCompany(post). * Adds user and company entities for valid input and returns status 200 for * valid input. For invalid input return status "400". *) procedure proc_TimeoffRegisterCompany( input_proc_TimeoffRegisterCompany ) { proc_TimeoffRegisterCompany_start: if ( valid_User( input_proc_TimeoffRegisterCompany ) /\ valid_Company( input_proc_TimeoffRegisterCompany ) ) { TimeoffAddUser( [ user_name |-> input_proc_TimeoffRegisterCompany.user_name, user_lastname |-> input_proc_TimeoffRegisterCompany.user_lastname, user_email |-> input_proc_TimeoffRegisterCompany.user_email ] ); TimeoffAddCompany( [ company_name |-> input_proc_TimeoffRegisterCompany.company_name ] ); InfrastructureServiceReturn( "/registerCompany(post)", "status_200", Nil ); } else { InfrastructureServiceReturn( "/registerCompany(post)", "status_400", Nil ); }; proc_TimeoffRegisterCompany_exit: return; }
user
In file tla/TimeoffAddUser.tla
(* * Add new user entry to model state - if it does not exist *) macro TimeoffAddUser( user ) { if ( ~ user \in Timeoff_Users ) { Timeoff_Users := Timeoff_Users \union { user }; }; }
company
In file tla/TimeoffAddCompany.tla
(* * Add new companry entry to model state - if it does not exist *) macro TimeoffAddCompany( company ) { if ( ~ company \in Timeoff_Companies ) { Timeoff_Companies := Timeoff_Companies \union { company }; }; }
User
entity
Operator tla/valid_User.tla
(* * Validate data model entry user *) valid_User( user ) == user # Nil /\ user.user_name # Nil /\ user.user_lastname # Nil /\ user.user_email # Nil
Company
Entity
Operator tla/valid_Company.tla
(* * Validate data model entry companry *) valid_Company( co ) == co # Nil /\ co.company_name # Nil
Verify formal model state in tla/correct_Database.tla
as given by
operators valid User and valid Company.
(* * All user and company entries in formal model state are valid *) correct_Database == \A user \in Timeoff_Users: valid_User(user) /\ \A co \in Timeoff_Companies: valid_Company(co)
cnf/setup_companyRegistered.yaml
The very contrived environment setup below defines cardinality value
1
to domain default_domain
, resolved below. In the formal model,
this translates to a definition of a set with one element plus a
special value Nil
. Value Nil
represent missing data in the formal
model.
The environment setup defines also one step with interface call to
/registerCompany(post)
. The definition does not restrict input to
the interface call, and during model checking, environment model uses
all possible value combinations for the interface call.
- domain-extension: # superflous cardinality 1 is the default - domain: default_domain cardinality: 1 - step-extension: - interface: /registerCompany(post)
cnf/timeoff-resolver.yaml
A very contrived resolver maps all variables to one deafult_domain
.
# This matches everyting - with default domain - Name: default-resolver Matcher: !ruby/regexp /.*/ Rules: - Matcher: !ruby/regexp /.*/ Domain: default_domain
cnf/sbuider.yaml
The YAML configuration below combiness elements, presented in this document, and controls formal model translation.
preferences: debug-output: false extend: resolvers: - url: cnf/timeoff-resolver.yaml # Use sbuilder API loader extension point interfaces: - className: Sbuilder::ParamSetLoaderSwagger infrastructureServices: true url: ../stage/timeoff-swagger.yaml # Use sbuilder Snippet loader extension point snippets: - className: Sbuilder::SnippetLoaderSimple snippets: # Load - metatype: framework-svc appName: Timeoff_Users url: tla/Timeoff_Users.tla - metatype: framework-svc appName: Timeoff_Companies url: tla/Timeoff_Companies.tla - metatype: framework-svc appName: TimeoffAddUser url: tla/TimeoffAddUser.tla - metatype: framework-svc appName: TimeoffAddCompany url: tla/TimeoffAddCompany.tla - metatype: framework-svc appName: proc_TimeoffRegisterCompany url: tla/proc_TimeoffRegisterCompany.tla - metatype: framework-svc appName: TimeoffRegisterCompany url: tla/TimeoffRegisterCompany.tla # Define - metatype: service_implementation appName: /registerCompany(post) name : TimeoffRegisterCompany - className: Sbuilder::SnippetLoaderSimple snippets: - metatype: framework-svc appName: isCompanyRegistered url: tla/isCompanyRegistered.tla - metatype: framework-svc appName: isCompanyRegisteredFails url: tla/isCompanyRegisteredFails.tla - metatype: framework-svc appName: correct_Database url: tla/correct_Database.tla - metatype: framework-svc appName: valid_User url: tla/valid_User.tla - metatype: framework-svc appName: valid_Company url: tla/valid_Company.tla # Configure setup setups: - setupDirectory: setup1 - setupDirectory: setup_companyRegistered possibilities: - isCompanyRegistered - isCompanyRegisteredFails extensions: - url: cnf/setup_companyRegistered.yaml invariants: - correct_Database: user and companry entries valid
The configuration above
cnf/timeoff-resolver.yaml
../stage/timeoff-swagger.yaml
Sbuilder::SnippetLoaderSimple
/registerCompany(post)
with TLA+ snippet
TimeoffRegisterCompany
ethLoader
from class
Sbuilder::Eth::Plugin::Plugin
implemented in sbuilder-eth
GEM.
setup1
and setup_companyRegistered
,
configured above. Setup setupcompanyRegistered defines two
possibility operators isCompanyRegistered and
isCompanyRegisteredFailssetup1
To validate that a formal model can be succesfully
run the following command
(SETUP=setup1; TLATOOLS_JAR=$(pwd)/java/tla2tools.jar; \ bundle exec sbuilder.rb generate $SETUP; \ cd gen/$SETUP/tla && \ java -cp $TLATOOLS_JAR pcal.trans model; \ java -cp $TLATOOLS_JAR tlc2.TLC setup | \ tee ../tlc.out ) | \ grep 'No error has been found\|states generated' -
and observe the output with the following lines.
Model checking completed. No error has been found. 3 states generated, 2 distinct states found, 0 states left on queue.
The output above shows only two distinct states found. First state is
the initial state, and the second state corresponds to the situation,
where environment model has processed all setup steps. For setup1
,
there were no stesp defined, unlike to setup_companyRegistered
, which
defines one step.


|
|
Dear workshop participants,
To gain the most benefit from the workshop
you will need to run code on your personal laptops. Detailed instructions with
respect to expected software installation and configuration are found below.
You are expected to configure your computer and download all of the course material and
data before arriving at the conference venue. For those of you arriving from outside of Germany,
please don't forget to bring a power plug adapter. As there are limited electrical outlets in the room,
please make sure to fully charge your laptop before the workshop.
To contact us with problems or questions, please post to this repository's GitHub issue reporting system (requires a GitHub user account).
We look forward to seeing you in Berlin.
Brad and Ziv
|
Overview
SimpleITK is a simplified
programming interface to the algorithms and data structures of the Insight Toolkit
(ITK). It supports bindings for multiple programming languages including C++,
Python, R, Java, C#, Lua, Ruby and TCL. These bindings enable scientists to
develop image analysis workflows in the programming language they are most
familiar with. The toolkit supports more than 15 different image file formats,
provides over 280 image analysis filters, and implements a unified interface to
the ITK intensity-based registration framework. The SimpleITK user base is
rapidly growing, with more than 100,000 downloads of the Python bindings in the
past year. Finally, by combining SimpleITK’s Python bindings with the Jupyter
notebook web application one can create an environment which facilitates
collaborative and reproducible development of biomedical image analysis
workflows.
In this workshop, we will use a hands-on approach utilizing Jupyter
notebooks to explore and experiment with various SimpleITK features in the
Python programming language. Participants will follow along using their personal
laptops, enabling them to explore the effects of code changes and parameter
settings not covered by the instructor. Examples using anatomical and microscopy
images will highlight the various capabilities of the toolkit.
The workshop starts by introducing the toolkit’s two basic data elements, Images
and Transformations. Combining the two, we illustrate how to perform image
resampling and how to use SimpleITK components for image preparation and data
augmentation in the context of deep learning. We then explore the features
available in the toolkit’s registration framework. Finally, we illustrate the
use of a variety of SimpleITK filters to perform segmentation and for segmentation
evaluation.
Beyond the notebooks used in this course you can find the main SimpleITK notebooks repository on GitHub.
Organizers
- Bradley C. Lowekamp, Medical Science & Computing and National Institutes of Health.
- Ziv Yaniv, Medical Science & Computing and National Institutes of Health.
Prerequisites
If you encounter problems or have questions, please post using this repository's
GitHub issue
reporting system (requires a GitHub user account).
In this course we will use the Anaconda Python distribution. Please follow the
instructions below to setup the environment we will use during the course. All
commands below are issued on the command line (Linux/Mac - terminal,
Windows - Anaconda Prompt).
-
Download and install the Fiji image viewer. This is the default image viewer used by SimpleITK:
-
On Windows: Install into your user directory (e.g. C:\Users\[your_user_name]\).
-
On Linux: Install into ~/bin/ .
-
On Mac: Install into /Applications/ .
-
Download and install the most
recent version of Anaconda for your operating system. We assume it is installed
in a directory named anaconda3. Regardless of the installer, we will be working
with Python 3.7
-
- On Windows: open the Anaconda Prompt (found under the Anaconda3 start menu).
- On Linux/Mac: on the command line
source path_to_anaconda3/bin/activate base
-
Update the base anaconda environment and install the git version control system into it.
conda update conda
conda update anaconda
conda install git
-
Clone this repository:
git clone https://github.com/SimpleITK/EMBC2019_WORKSHOP.git
-
Create the virtual environment containing all packages required for the course:
conda env create -f EMBC2019_WORKSHOP/environment.yml
-
Activate the virtual environment:
- On Windows: open the Anaconda Prompt (found under the Anaconda3 start menu)
conda activate sitkpyEMBC19
- On Linux/Mac: on the command line
source path_to_anaconda3/bin/activate sitkpyEMBC19
-
Go over the setup notebook (requires internet connectivity). This notebook checks the environment setup and downloads
all of the required data.
cd EMBC2019_WORKSHOP
jupyter notebook setup.ipynb
Program
Click the launch binder button to try it out without installing (some display functions will not work):
- [8:30AM- 9:00AM] History and overview [ppt: setup and schedule, history, overview]
- [9:00AM- 10:00AM] Fundamentals: spatial transformations, images and resampling, data augmentation for deep learning.
- [10:00AM - 10:30AM] Coffee break []
- [10:30AM - 11:30AM] Registration: basic, advanced, application.
- [11:30AM - 12:15PM] Segmentation: workflow, evaluation.
- [12:15PM - 12:30PM] Notebook development and testing [ppt: development], concluding remarks.
Supplementary Material
For those interested in reading more about SimpleITK (Python and beyond):
-
R. Beare, B. C. Lowekamp, Z. Yaniv, "Image Segmentation, Registration and Characterization in R with SimpleITK", J Stat Softw, 86(8), 2018.
-
Z. Yaniv, B. C. Lowekamp, H. J. Johnson, R. Beare, "SimpleITK Image-Analysis Notebooks: a Collaborative Environment for
Education and Reproducible Research", J Digit Imaging., 31(3): 290-303, 2018.
-
B. C. Lowekamp, D. T. Chen, L. Ibáñez, D. Blezek, "The Design of SimpleITK", Front. Neuroinform., 7:45., 2013.
|


--- layout: post title: The sequence of updated value in MySQL date: 2012-10-05 19:34:14.000000000 +09:30 type: post published: true status: publish categories: - MySQL tags: - mysql - sql meta: posturl_add_url: 'yes' _edit_last: '1' views: '1521' ---
It was a confused phenomenon when I found it.
[cc lang="sql"]CREATE TABLE `tmp_xf` (
`id` int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) not null,
`status` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into tmp_xf(name,status) values ('dbaeyes',1);
select * from tmp_xf;
+----+---------+--------+
| id | name | status |
+----+---------+--------+
| 1 | dbaeyes | 1 |
+----+---------+--------+[/cc]
Phase 1:
[cc lang="sql"]update tmp_xf
set status= if(name='dbaeyes',8,status),
name = 'toby'
where id =1;
+----+------+--------+
| id | name | status |
+----+------+--------+
| 1 | toby | 8 |
+----+------+--------+[/cc]
--restore data
update tmp_xf set status=1,name='dbaeyes' where id = 1;
[cc lang="sql"]update tmp_xf
set name = 'toby',
status= if(name='dbaeyes',8,status)
where id =1;
+----+------+--------+
| id | name | status |
+----+------+--------+
| 1 | toby | 1 |
+----+------+--------+[/cc]
The deifference is the seq of "set values".
It can be considered that MySQL use the updated value for the next action, then the result is different.
It just like
i++ and i=i+1
You can find the detail info by the source code.


Run the command script to the right.
With all the application objects created, execute the code to see the
following processing steps:
- Call the procedure tax_pay to calculate the tax_payable
by an employee depending on his income and update the payroll table.
- Update the payroll table with the tax proof submitted by the employees.
For ease of demonstration, set tax exemption for each employee as 100,000 and proof submitted by the employee as 50,000.
- After all the employees of a department submit their tax proofs, update the calculate_tax column of payroll table to 1.
This update invokes the trigger tax_update.
- Execute RUNSTATS command to update the created temporary table cgtt.tax_cal to update statistics.
- CALL the table function to print the IT sheet for the employees.
You should see success and success with warnings messages in the lower right.
The success with warnings messages indicate that values in an entire table will be changed,
it is expected for this tutorial.


{% for field in info_form %}
{% for error in field.errors %}
*{{field.label}}: {{ error|escape }}
{% endfor %}
{% endfor %}
{% for error in info_form.non_field_errors %}
*{{ error|escape }}
{% endfor %}
{% endif %}
{# Form design is borrowed from "http://www.sanwebe.com/2014/08/css-html-forms-designs" #}
{# Form design is borrowed from "http://www.sanwebe.com/2014/08/css-html-forms-designs" #}


Working on updates
0%
complete.
 This will take a while.
Your PC will restart several times


--- layout: page title: About header-img: "img/about-bg.png" ---
Learning programming, at my own pace, so that I can reach greater heights in life.


Here’s an introduction to the cryptographic systems in Helios. It’s important that these be made clear for a wide range of readers, since the auditability and security, and thus the trustworthiness of Helios is based on their operation.
Public key cryptography allows two parties to begin communicating securely over a public network, with no previously arranged secret codes. The discrete logarithm problem enables this by making it very hard to calculate private keys given the portions of an ElGamal cipher that are sent over public channels.
ElGamal is assumed to be very strong, since it requires a previously unknown, very efficient, maybe impossible algorithm to compute the discrete log problem. For this reason, public key is generally treated as a primitive construct in discussions of Helios.
Homomorphic encryption is a technique that allows a system to manipulate data while the data is encrypted, never seeing decryptions of the data. In Helios, that means we can add together 1’s and 0’s of ballot choices without decrypting a ballot. This is a key factor in the public-auditing portion of Helios, since anyone can add up the ballots without being able to decrypt them and reveal an individual voter’s choices.
This provides a good deal of auditability, although ensuring that the election officials honestly decrypt the correct sum requires measures like threshold encryption and a varied pool of trustees.
All ballots should be certified as valid before this tally. Removal requires either:
Altering the tally after the auditing process requires special attention to procedures around invalid or previously uncounted valid ballots.
Helios Elections begin by creating a database entry containing a unique election id and name, a default trustee to decode the election, a set of questions, and settings for who can vote, how questions are answered, when the election starts and ends, and whether the names of voters will be visible or replaced by random strings.
Closed elections have another database table that stores a list of voters with a name, id, and email for each.
By default, Helios acts as a trustee. This means that the creator of an election does not have to input any information to edit or tally and election.
Additional trustees can be added. Each trustee receives a public and private key, and all trustees must cooperate with the automatic Helios trustee to edit or tally the election.
Helios does not currently support threshold encryption, which allows a subset of trustees to execute administrative functions.
Helios shows voter names by default, but can replace names with aliases to help prevent coercion and enhance privacy. Administrators can decrypt ballots, but trustees and threshold encryption can be used to prevent this.
Votes are encrypted entirely on the client’s computer, so a voter’s choices are never transmitted in the clear. Votes can be cast with provided code, but Helios’ creator recommends building a personalized casting system as a challenge. The possibility of writing your own encryption service adds to the transparency of the system.
Once a vote is encrypted, an independent audit system allows a voter to spoil their vote and see what their choices were encoded as. When this is implemented in a stateless manner, the auditor cannot tell when it is being tested. This makes it hard to fool voters and encrypt votes incorrectly.
These properties follow from Benaloh’s 2006 paper Simple Verifiable Elections, which recommended that election machines be split up to improve trustworthiness. Ballot generation, encryption, and auditing can all be run independently of each other.
Homomorphic tally: The response sections of all ballots are added to produce a public encrypted tally (the sum of all responses)
Trustees decrypt the tally: All trustees perform partial decryptions, resulting in a private decrypted sum for each candidate. This sum is released, while the keys enabling decryption are kept private.
Auditors verify encrypted tally: Anyone can calculate the public encrypted tally and compare it to the published version, so the election is trustworthy as long as every voter trusts at least one trustee. This assumes that trustees are sourced from opposing or neutral sides and thus have an interest in spotting and rejecting manipulation of the results.
Threshold encryption allows any subset of a sufficient number of trustees to execute tallying, decrypting, and other tasks like roster modifications. This prevents individuals from changing election details without approval and also prevents elections from being held up by the loss or subversion of a minority of trustees.


FrameLevel
When multiple Frames are at the same space, there is an rule that tells who will take the mouse Events and is displayed on top. FrameLevel set with BlzFrameSetLevel manages that, it only matters when Frames colide/overlap on the screen. Only visible Frames matter for the FrameLevel order.
FrameLevel works different for SimpleFrames and Frames.
For Frames:
FrameLevel define the order in which child-Frames are above their Parent. Frames only compete with their siblings. They are ordered descending. The childFrame with the highest Level is onTop. the one with the lowest Level is directly above the parent but below it's brothers and sisters. A Frame's children are below a sibling with a higher level.
For SimpleFrames:
The one with the highest Level is on Top, parentship does not matter. When a SimpleFrame is created it copies the current Level of the Parent so it is above it. But one can change the Levels to have the parent on top, this also means that later changes to Level of the Parent are not taken over by child-SimpleFrames except for Texture/Strings, they do.
One could say both use the same rule except that Frames start new Layers in which the Frame's children are placed while SimpleFrames have only one Layer, started by the SimpleFrame Ancient. But the special SimpleFrame children Texture/String are in Layers started by their parent SimpleFrame. Texture/String can't have children hence the layer mechanic for that group is quite simple.


Intro to Tensorflow - MINST
rpi.analyticsdojo.com
Adopted from Hands-On Machine Learning with Scikit-Learn and TensorFlow by Aurélien Géron.
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
For full license see repository.
Chapter 10 – Introduction to Artificial Neural Networks
This notebook contains all the sample code and solutions to the exercices in chapter 10.
Setup¶
First, let’s make sure this notebook works well in both python 2 and 3, import a few common modules, ensure MatplotLib plots figures inline and prepare a function to save the figures:
# Common imports
import numpy as np
import os
# to make this notebook's output stable across runs
def reset_graph(seed=42):
tf.reset_default_graph()
tf.set_random_seed(seed)
np.random.seed(seed)
# To plot pretty figures
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
# Where to save the figures
PROJECT_ROOT_DIR = "/home/jovyan/techfundamentals-fall2017-materials/classes/13-deep-learning"
def save_fig(fig_id, tight_layout=True):
path = os.path.join(PROJECT_ROOT_DIR, 'images', fig_id + ".png")
print("Saving figure", fig_id)
if tight_layout:
plt.tight_layout()
plt.savefig(path, format='png', dpi=300)
MNIST¶
Very common machine learning library with goal to classify digits.
This example is using MNIST handwritten digits, which contains 55,000 examples for training and 10,000 examples for testing. The digits have been size-normalized and centered in a fixed-size image (28x28 pixels) with values from 0 to 1. For simplicity, each image has been flattened and converted to a 1-D numpy array of 784 features (28*28).
More info: http://yann.lecun.com/exdb/mnist/
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/")
X_train = mnist.train.images
X_test = mnist.test.images
y_train = mnist.train.labels.astype("int")
y_test = mnist.test.labels.astype("int")
print ("Training set: ", X_train.shape,"\nTest set: ", X_test.shape)
Extracting /tmp/data/train-images-idx3-ubyte.gz
Extracting /tmp/data/train-labels-idx1-ubyte.gz
Extracting /tmp/data/t10k-images-idx3-ubyte.gz
Extracting /tmp/data/t10k-labels-idx1-ubyte.gz
Training set: (55000, 784)
Test set: (10000, 784)
# List a few images and print the data to get a feel for it.
images = 2
for i in range(images):
#Reshape
x=np.reshape(X_train[i], [28, 28])
print(x)
plt.imshow(x, cmap=plt.get_cmap('gray_r'))
plt.show()
# print("Model prediction:", preds[i])
[[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.38039219 0.37647063
0.3019608 0.46274513 0.2392157 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0.35294119 0.5411765 0.92156869
0.92156869 0.92156869 0.92156869 0.92156869 0.92156869 0.98431379
0.98431379 0.97254908 0.99607849 0.96078438 0.92156869 0.74509805
0.08235294 0. 0. 0. 0. 0. 0.
0. 0. 0. ]
[ 0. 0. 0.54901963 0.98431379 0.99607849 0.99607849
0.99607849 0.99607849 0.99607849 0.99607849 0.99607849 0.99607849
0.99607849 0.99607849 0.99607849 0.99607849 0.99607849 0.99607849
0.74117649 0.09019608 0. 0. 0. 0. 0.
0. 0. 0. ]
[ 0. 0. 0.88627458 0.99607849 0.81568635 0.78039223
0.78039223 0.78039223 0.78039223 0.54509807 0.2392157 0.2392157
0.2392157 0.2392157 0.2392157 0.50196081 0.8705883 0.99607849
0.99607849 0.74117649 0.08235294 0. 0. 0. 0.
0. 0. 0. ]
[ 0. 0. 0.14901961 0.32156864 0.0509804 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0.13333334 0.83529419 0.99607849 0.99607849
0.45098042 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.32941177 0.99607849 0.99607849
0.91764712 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.32941177 0.99607849 0.99607849
0.91764712 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0.41568631 0.6156863 0.99607849 0.99607849
0.95294124 0.20000002 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.09803922 0.45882356
0.89411771 0.89411771 0.89411771 0.99215692 0.99607849 0.99607849
0.99607849 0.99607849 0.94117653 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0.26666668 0.4666667 0.86274517 0.99607849
0.99607849 0.99607849 0.99607849 0.99607849 0.99607849 0.99607849
0.99607849 0.99607849 0.55686277 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0.14509805 0.73333335 0.99215692 0.99607849 0.99607849 0.99607849
0.87450987 0.80784321 0.80784321 0.29411766 0.26666668 0.84313732
0.99607849 0.99607849 0.45882356 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0.
0.44313729 0.8588236 0.99607849 0.94901967 0.89019614 0.45098042
0.34901962 0.12156864 0. 0. 0. 0.
0.7843138 0.99607849 0.9450981 0.16078432 0. 0. 0.
0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0.
0.66274512 0.99607849 0.6901961 0.24313727 0. 0. 0.
0. 0. 0. 0. 0.18823531 0.90588242
0.99607849 0.91764712 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0.
0.07058824 0.48627454 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.32941177 0.99607849
0.99607849 0.65098041 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.54509807 0.99607849 0.9333334
0.22352943 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0.82352948 0.98039222 0.99607849 0.65882355
0. 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0.94901967 0.99607849 0.93725497 0.22352943
0. 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0.34901962 0.98431379 0.9450981 0.33725491 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0.01960784 0.80784321 0.96470594 0.6156863 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0.01568628 0.45882356 0.27058825 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]]
[[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.
0.12156864 0.51764709 0.99607849 0.99215692 0.99607849 0.83529419
0.32156864 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.08235294 0.55686277
0.91372555 0.98823535 0.99215692 0.98823535 0.99215692 0.98823535
0.87450987 0.07843138 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.48235297 0.99607849 0.99215692
0.99607849 0.99215692 0.87843144 0.7960785 0.7960785 0.87450987
1. 0.83529419 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.7960785 0.99215692 0.98823535
0.99215692 0.83137262 0.07843138 0. 0. 0.2392157
0.99215692 0.98823535 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0.16078432 0.95294124 0.87843144 0.7960785
0.71764708 0.16078432 0.59607846 0.11764707 0. 0. 1.
0.99215692 0.40000004 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.15686275 0.07843138 0. 0.
0.40000004 0.99215692 0.19607845 0. 0.32156864 0.99215692
0.98823535 0.07843138 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0.32156864 0.83921576 0.12156864 0.44313729 0.91372555 0.99607849
0.91372555 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.24313727 0.40000004
0.32156864 0.16078432 0.99215692 0.90980399 0.99215692 0.98823535
0.91372555 0.19607845 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.59607846 0.99215692
0.99607849 0.99215692 0.99607849 0.99215692 0.99607849 0.91372555
0.48235297 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.59607846 0.98823535
0.99215692 0.98823535 0.99215692 0.98823535 0.75294125 0.19607845
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0.24313727 0.71764708
0.7960785 0.95294124 0.99607849 0.99215692 0.24313727 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0.15686275 0.67450982 0.98823535 0.7960785 0.07843138 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0.
0.08235294 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.71764708 0.99607849 0.43921572
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0.24313727
0.7960785 0.63921571 0. 0. 0. 0. 0.
0. 0. 0. 0.2392157 0.99215692 0.59215689
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0.08235294 0.83921576
0.75294125 0. 0. 0. 0. 0. 0.
0. 0. 0.04313726 0.83529419 0.99607849 0.59215689
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0.40000004 0.99215692
0.59215689 0. 0. 0. 0. 0. 0.
0. 0.16078432 0.83529419 0.98823535 0.99215692 0.43529415
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0.16078432 1.
0.83529419 0.36078432 0.20000002 0. 0. 0.12156864
0.36078432 0.67843139 0.99215692 0.99607849 0.99215692 0.55686277
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0.67450982
0.98823535 0.99215692 0.98823535 0.7960785 0.7960785 0.91372555
0.98823535 0.99215692 0.98823535 0.99215692 0.50980395 0.07843138
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0.08235294
0.7960785 1. 0.99215692 0.99607849 0.99215692 0.99607849
0.99215692 0.95686281 0.7960785 0.32156864 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0.
0.07843138 0.59215689 0.59215689 0.99215692 0.67058825 0.59215689
0.59215689 0.15686275 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. ]]
TFLearn: Deep learning library featuring a higher-level API for TensorFlow¶
TFlearn is a modular and transparent deep learning library built on top of Tensorflow.
It was designed to provide a higher-level API to TensorFlow in order to facilitate and speed-up experimentations
Fully transparent and compatible with Tensorflow
hidden_units
list of hidden units per layer. All layers are fully connected. Ex. [64, 32] means first layer has 64 nodes and second one has 32.
import tensorflow as tf
config = tf.contrib.learn.RunConfig(tf_random_seed=42) # not shown in the config
feature_cols = tf.contrib.learn.infer_real_valued_columns_from_input(X_train)
# List of hidden units per layer. All layers are fully connected. Ex. [64, 32] means first layer has 64 nodes and second one has 32.
dnn_clf = tf.contrib.learn.DNNClassifier(hidden_units=[300,100], n_classes=10,
feature_columns=feature_cols, config=config)
dnn_clf = tf.contrib.learn.SKCompat(dnn_clf) # if TensorFlow >= 1.1
dnn_clf.fit(X_train, y_train, batch_size=50, steps=4000)
WARNING:tensorflow:Using temporary folder as model directory: /var/folders/2l/hz84cqd11f1_kgngygpjvbmh0000gn/T/tmp9ryubfoi
INFO:tensorflow:Using config: {'_task_id': 0, '_is_chief': True, '_save_checkpoints_steps': None, '_tf_config': gpu_options {
per_process_gpu_memory_fraction: 1
}
, '_keep_checkpoint_max': 5, '_save_summary_steps': 100, '_master': '', '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x11fc21ef0>, '_task_type': None, '_num_ps_replicas': 0, '_environment': 'local', '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_save_checkpoints_secs': 600, '_tf_random_seed': 42}
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-5b9939f7137a> in <module>()
5 dnn_clf = tf.contrib.learn.DNNClassifier(hidden_units=[300,100], n_classes=10,
6 feature_columns=feature_cols, config=config)
----> 7 dnn_clf = tf.contrib.learn.SKCompat(dnn_clf) # if TensorFlow >= 1.1
8 dnn_clf.fit(X_train, y_train, batch_size=50, steps=4000)
AttributeError: module 'tensorflow.contrib.learn' has no attribute 'SKCompat'
#We can use the sklearn version of metrics
from sklearn import metrics
y_pred = dnn_clf.predict(X_test)
#This calculates the accuracy.
print("Accuracy score: ", metrics.accuracy_score(y_test, y_pred['classes']) )
#Log Loss is a way of score classes probabilsitically
print("Logloss: ",metrics.log_loss(y_test, y_pred['probabilities']))
Tensorflow¶
Direct access to Python API for Tensorflow will give more flexibility
Like earlier, we will define the structure and then run the session.
set placeholders
import tensorflow as tf
n_inputs = 28*28 # MNIST
n_hidden1 = 300 # hidden units in first layer.
n_hidden2 = 100
n_outputs = 10 # Classes of output variable.
#Placehoder
reset_graph()
X = tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")
y = tf.placeholder(tf.int64, shape=(None), name="y")
def neuron_layer(X, n_neurons, name, activation=None):
with tf.name_scope(name):
n_inputs = int(X.get_shape()[1])
stddev = 2 / np.sqrt(n_inputs)
init = tf.truncated_normal((n_inputs, n_neurons), stddev=stddev)
W = tf.Variable(init, name="kernel")
b = tf.Variable(tf.zeros([n_neurons]), name="bias")
Z = tf.matmul(X, W) + b
if activation is not None:
return activation(Z)
else:
return Z
with tf.name_scope("dnn"):
hidden1 = neuron_layer(X, n_hidden1, name="hidden1", activation=tf.nn.relu)
hidden2 = neuron_layer(hidden1, n_hidden2, name="hidden2", activation=tf.nn.relu)
logits = neuron_layer(hidden2, n_outputs, name="outputs")
with tf.name_scope("loss"):
xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)
loss = tf.reduce_mean(xentropy, name="loss")
learning_rate = 0.01
with tf.name_scope("train"):
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
training_op = optimizer.minimize(loss)
with tf.name_scope("eval"):
correct = tf.nn.in_top_k(logits, y, 1)
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
init = tf.global_variables_initializer()
saver = tf.train.Saver()
Running the Analysis over 40 Epocs¶
40 passes through entire dataset.
n_epochs = 40
batch_size = 50
with tf.Session() as sess:
init.run()
for epoch in range(n_epochs):
for iteration in range(mnist.train.num_examples // batch_size):
X_batch, y_batch = mnist.train.next_batch(batch_size)
sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})
acc_test = accuracy.eval(feed_dict={X: mnist.test.images,
y: mnist.test.labels})
print("Epoc:", epoch, "Train accuracy:", acc_train, "Test accuracy:", acc_test)
save_path = saver.save(sess, "./my_model_final.ckpt")
Epoc: 0 Train accuracy: 0.94 Test accuracy: 0.9084
Epoc: 1 Train accuracy: 0.94 Test accuracy: 0.9289
Epoc: 2 Train accuracy: 0.96 Test accuracy: 0.9401
Epoc: 3 Train accuracy: 0.94 Test accuracy: 0.946
Epoc: 4 Train accuracy: 0.96 Test accuracy: 0.9501
Epoc: 5 Train accuracy: 0.94 Test accuracy: 0.9546
Epoc: 6 Train accuracy: 0.94 Test accuracy: 0.957
Epoc: 7 Train accuracy: 0.98 Test accuracy: 0.9582
Epoc: 8 Train accuracy: 0.98 Test accuracy: 0.9613
Epoc: 9 Train accuracy: 0.96 Test accuracy: 0.9649
Epoc: 10 Train accuracy: 0.96 Test accuracy: 0.9661
Epoc: 11 Train accuracy: 0.98 Test accuracy: 0.9662
Epoc: 12 Train accuracy: 0.94 Test accuracy: 0.9679
Epoc: 13 Train accuracy: 1.0 Test accuracy: 0.9693
Epoc: 14 Train accuracy: 0.96 Test accuracy: 0.969
Epoc: 15 Train accuracy: 1.0 Test accuracy: 0.9703
Epoc: 16 Train accuracy: 1.0 Test accuracy: 0.9717
Epoc: 17 Train accuracy: 1.0 Test accuracy: 0.9718
Epoc: 18 Train accuracy: 0.98 Test accuracy: 0.9718
Epoc: 19 Train accuracy: 1.0 Test accuracy: 0.9736
Epoc: 20 Train accuracy: 1.0 Test accuracy: 0.9736
Epoc: 21 Train accuracy: 0.98 Test accuracy: 0.9735
Epoc: 22 Train accuracy: 1.0 Test accuracy: 0.9736
Epoc: 23 Train accuracy: 1.0 Test accuracy: 0.9745
Epoc: 24 Train accuracy: 1.0 Test accuracy: 0.9758
Epoc: 25 Train accuracy: 1.0 Test accuracy: 0.9758
Epoc: 26 Train accuracy: 1.0 Test accuracy: 0.9756
Epoc: 27 Train accuracy: 1.0 Test accuracy: 0.9757
Epoc: 28 Train accuracy: 1.0 Test accuracy: 0.977
Epoc: 29 Train accuracy: 0.98 Test accuracy: 0.9762
Epoc: 30 Train accuracy: 1.0 Test accuracy: 0.9773
Epoc: 31 Train accuracy: 1.0 Test accuracy: 0.977
Epoc: 32 Train accuracy: 1.0 Test accuracy: 0.9769
Epoc: 33 Train accuracy: 0.98 Test accuracy: 0.9773
Epoc: 34 Train accuracy: 0.98 Test accuracy: 0.9758
Epoc: 35 Train accuracy: 0.98 Test accuracy: 0.978
Epoc: 36 Train accuracy: 0.98 Test accuracy: 0.9787
Epoc: 37 Train accuracy: 0.98 Test accuracy: 0.9779
Epoc: 38 Train accuracy: 1.0 Test accuracy: 0.9785
Epoc: 39 Train accuracy: 1.0 Test accuracy: 0.978
with tf.Session() as sess:
saver.restore(sess, "./my_model_final.ckpt") # or better, use save_path
X_new_scaled = mnist.test.images[:20]
Z = logits.eval(feed_dict={X: X_new_scaled})
y_pred = np.argmax(Z, axis=1)
print("Predicted classes:", y_pred)
print("Actual classes: ", mnist.test.labels[:20])
from IPython.display import clear_output, Image, display, HTML
def strip_consts(graph_def, max_const_size=32):
"""Strip large constant values from graph_def."""
strip_def = tf.GraphDef()
for n0 in graph_def.node:
n = strip_def.node.add()
n.MergeFrom(n0)
if n.op == 'Const':
tensor = n.attr['value'].tensor
size = len(tensor.tensor_content)
if size > max_const_size:
tensor.tensor_content = "<stripped %d bytes>"%size
return strip_def
def show_graph(graph_def, max_const_size=32):
"""Visualize TensorFlow graph."""
if hasattr(graph_def, 'as_graph_def'):
graph_def = graph_def.as_graph_def()
strip_def = strip_consts(graph_def, max_const_size=max_const_size)
code = """

<link rel="import" href="https://tensorboard.appspot.com/tf-graph-basic.build.html" onload=load()>

<tf-graph-basic id="{id}"></tf-graph-basic>

""".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))
iframe = """

""".format(code.replace('"', '"'))
display(HTML(iframe))
show_graph(tf.get_default_graph())
Using dense()
instead of neuron_layer()
¶
Note: the book uses tensorflow.contrib.layers.fully_connected()
rather than tf.layers.dense()
(which did not exist when this chapter was written). It is now preferable to use tf.layers.dense()
, because anything in the contrib module may change or be deleted without notice. The dense()
function is almost identical to the fully_connected()
function, except for a few minor differences:
several parameters are renamed:
scope
becomesname
,activation_fn
becomesactivation
(and similarly the_fn
suffix is removed from other parameters such asnormalizer_fn
),weights_initializer
becomeskernel_initializer
, etc.the default
activation
is nowNone
rather thantf.nn.relu
.a few more differences are presented in chapter 11.
n_inputs = 28*28 # MNIST
n_hidden1 = 300
n_hidden2 = 100
n_outputs = 10
reset_graph()
X = tf.placeholder(tf.float32, shape=(None, n_inputs), name="X")
y = tf.placeholder(tf.int64, shape=(None), name="y")
with tf.name_scope("dnn"):
hidden1 = tf.layers.dense(X, n_hidden1, name="hidden1",
activation=tf.nn.relu)
hidden2 = tf.layers.dense(hidden1, n_hidden2, name="hidden2",
activation=tf.nn.relu)
logits = tf.layers.dense(hidden2, n_outputs, name="outputs")
with tf.name_scope("loss"):
xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)
loss = tf.reduce_mean(xentropy, name="loss")
learning_rate = 0.01
with tf.name_scope("train"):
optimizer = tf.train.GradientDescentOptimizer(learning_rate)
training_op = optimizer.minimize(loss)
with tf.name_scope("eval"):
correct = tf.nn.in_top_k(logits, y, 1)
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
init = tf.global_variables_initializer()
saver = tf.train.Saver()
n_epochs = 20
n_batches = 50
with tf.Session() as sess:
init.run()
for epoch in range(n_epochs):
for iteration in range(mnist.train.num_examples // batch_size):
X_batch, y_batch = mnist.train.next_batch(batch_size)
sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})
acc_test = accuracy.eval(feed_dict={X: mnist.test.images, y: mnist.test.labels})
print(epoch, "Train accuracy:", acc_train, "Test accuracy:", acc_test)
save_path = saver.save(sess, "./my_model_final.ckpt")
show_graph(tf.get_default_graph())


3D Designing using Autodesk Fusion 360
The task was to design an object in Fusion 360 that we could 3-d print.
First thing to do was to choose what to print, I decided to make a fidget spinner.
Then, I imagined how my spinner would look.
I thought about how the connecting part of the top and bottom would be before I started sketching.
To help with imagination, I sketched the model with dimensions I wanted on a piece of paper.
Now, with my sketch on the paper, I actually started sketching on Autodesk Fusion 360.
I created a sketch for the bottom part and then extruded the sketch.
I have created some holes on the bottom and also some grooves on both sides to make it look nice.
As you can see, there are a lot of sketch dimentions because I wanted everything to stay in a perfect dimension.
This is what it looked like after the extrusion.
Then, I created some holes for the bearings to connect through.
And this is my final model of fidget spinner!
Download and View My Project Here
Fidget spinner files


License¶
License for Project Oberon derived files (Project Oberon License) :
Project Oberon, Revised Edition 2013
Book copyright (C)2013 Niklaus Wirth and Juerg Gutknecht; software copyright (C)2013 Niklaus Wirth (NW), Juerg Gutknecht (JG), Paul Reed (PR/PDR).
Permission to use, copy, modify, and/or distribute this software and its accompanying documentation (the “Software”) for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
 IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES OR LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DEALINGS IN OR USE OR PERFORMANCE OF THE SOFTWARE.
License for Integrated Oberon files (MIT License) :
Copyright (c) 2020 IO-Core Authors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


No sources defined.
No external ports defined.
No environmental variables defined.
No summary items defined.


| a | | one series of pronominal prefixes (subscript) |
| Abl | | ablative |
| Abs | | absolute |
| All | | allative |
| ANA | | a noun class |
| ANA(Wu) | | subclass of ANA |
| ANA(ø) | | subclass of ANA |
| Anaph | | anaphoric |
| Aug | | augment |
| Aux | | auxiliary |
| b | | one series of pronominal prefixes (subscript) |
| Ben | | benefactive |
| c | | continuous (subscript) |
| Centrif | | centrifugal |
| Centrip | | centripetal |
| Contr | | contrastive |
| Dat | | dative |
| der | | derivational (subscript) |
| Dimin | | diminutive |
| Dir | | directional |
| Dist | | distant |
| Du | | dual |
| Emph | | emphatic |
| Evit | | evitative |
| Ex | | exclusive |
| ex. | | example |
| exx. | | examples |
| F | | feminine |
| Fut | | future |
| Gen | | genitive |
| Imm | | immediate |
| In | | inclusive |
| Inch | | inchoative verbaliser |
| Inst | | instrumental |
| Loc | | locative |
| M | | masculine |
| MANA | | a noun class |
| Mult | | multiple |
| NA | | a noun class |
| NC | | noun class |
| Neg | | negative |
| NgARA | | a noun class |
| Nonsg | | nonsingular |
| Obl | | oblique |
| Origin | | originative |
| p | | punctual (subscript) |
| Pa | | past |
| Pergr | | pergressive |
| Pl | | plural |
| Poss | | possessive |
| Pot | | potential |
| Pres | | present |
| Pron | | pronoun |
| Prox | | proximate |
| Purp | | purposive |
| Q | | question, interrogative |
| Rdp | | reduplication |
| Recip | | reciprocal |
| Refl | | reflexive |
| Rel | | relative |
| Sg | | singular |
| sp. | | species |
| spp. | | species (plural) |
| Transv | | transverse |
| WARA | | a noun class |
| wu | | (subscript) see NA(wu) |
| ø | | zero; no simple gloss |
| xxx | | unintelligible |
| <> | | completion of word |
| <zigzag></zigzag> | | transcription uncertain |
| ______ | | English or creole elements |
| -- | | interruption (in text); |
| | double morpheme boundary |
| = | | boundary before root of verb or Predicative noun |
| - | | normal morpheme boundary |


This plugin will implement the XEP-0321, Remote Roster Management, discussed here. Basically it's purpose is to allow an external component full control over the part of a roster it's assigned. For example, if the AIM transport is at aim.example.org, you can allow that transport to make whatever modifications it needs without involving the end user. This is especially useful so that a user does not get flooded with subscription requests upon registration. This plugin also implements a few minor extensions that Kraken used to implement for Spark, though those are optional. You can also use it for viewing gateway sessions, managing existing gateway-registrations and looking into basic Spectrum2 related Statistics
Copy gojara.jar into the plugins directory of your Openfire installation. The plugin will then be automatically deployed. To upgrade to a new version, copy the new gojara.jar file over the existing file.
The GoJara plugin can be configured under "Server"-"Server Settings"-"GoJara".
For Spectrum2 Statistics to work you need to additionaly configure spectrum2 transports to include admin_jid = gojaraadmin@domain. This way we can gather info like used Memory and unregister Users from Openfire Console


Operation Performance Trend Report
(
Operation Performance Report
) (
Execution Performance Report
)
%%OPERATION_NAME%%
To zoom in on a chart, use left-click & drag. Right click on the chart to reset zooming.


com
.
avalia
.
akka
.
workshop
.
example
bank
package
bank
Visibility
Public
All
Type Members
class
Account
extends
AbstractLoggingActor
Created by synerzip on 12/1/16.
class
Bank
extends
AbstractLoggingActor
class
WireTransfer
extends
AbstractLoggingActor
Created by synerzip on 12/1/16.
Value Members
object
Account
object
Bank
Created by synerzip on 12/1/16.
object
BankExampleMain
extends
App
Created by synerzip on 12/1/16.
object
WireTransfer
Ungrouped


Induction on Recurrence Relations
2019-12-12Created: Oct 31, 2019 10:58 AM Deadline: Dec 03, 2019 Name: Jon Kelley Required?: No Status: Not Started Topic: Mathematical Reasoning
-
Suppose you are lining up Legos, and each yellow Lego takes up one inch, each pink Lego takes up two inches, and each purple Lego takes up two inches. We have an infinite number of each type of piece, and all of the pieces within a color can be considered identical.
-
(a) Find a recurrence relations to count an = the number of ways to fill in an n inch line using an unlimited supply of the provided Legos for n ≥ 1. Please include the first 8 terms, using computational power to iterate through your RR if you wish.
first 8 terms:
An n-inch line can be made by an combination of 1-inch yellow pieces, 2 inch pink pieces, and 2 inch purple pieces. We will consider these ME and E cases. If line of Legos is 1 inch long, then there will only be one way to create it: 1 yellow piece. If the line of Legos is 2 inches long, then there will be three ways to create it: 2 yellow, 1 pink, or 1 purple. These pieces will serve as our initial conditions for the recurrence relation.
If we add 1 more inch to this sequence, we can insert in between any of the existing lego pieces. If we add 2 more inches to the sequence, we can insert either 2 yellow pieces or 1 pink piece or 1 purple piece into the sequence. Similarly, if we had to remove these pieces from an existing line of Legos n long, we would do it piece by piece until the line had no more Legos left, counting as we went. The number of ways we can arrange the sequence by removing 1 pink piece is the same as the number of ways we can arrange the sequence by removing 1 purple piece, as is the number of ways we can arrange the sequence by removing 1 yellow piece, however the yellow piece removes 1 fewer inches from the line. This pattern can be written as a simple recursive function:
def solve_from_n(n): if n == 0: # We have solved this return 1 if n < 0: # Not a valid pattern return 0 if n >= 1: # Solve for both pink and purple return solve_from_n(n - 2) + solve_from_n(n-2) + solve_from_n(n-1)
From this recursive function, we see that a_n is simply:
a_n = 2a_{n-2} + a_{n-1}
Our first 8 numbers sequence
1, 3, 5, 11, 21, 43, 85, 171
With initial conditions
a_1 = 1, a_2 = 3 ag{1}
a_n = a_{n-1} + 2a_{n-2} ag{2}
-
(b) Using your above RR (which you may now take as fact), prove by induction that the number of ways to fill an n inch Lego line with the given Legos is also given by the 1n+1 1 n 1n+1 1 n closed-form solution 3 2 + 3 (−1) . In other words, prove that an = 3 2 + 3 (−1) ,
Let
P(n) = " a_n = rac{1}{3}2^{n+1} + rac{1}{3}(-1)^n" ext{ for all } n \ge 3
Base case: n = 3, because the RR theorem requires n-1 and n-2. The RR says that
a_3 = 3 + 2*1 = 5
and the P(3) proposition says that this should be equal to
rac{1}{3} 2^4 + rac{1}{3}(-1)^3 = 5
Suppose P(3) ... P(k) hold for some k≥2. (This is allowed because we showed it works for k = 2). Consider P (k + 1); we wish to show
a_{n + 1} = rac{1}{3}2^{n+2} + rac{1}{3}(-1)^{n+1}
If a_n is 1, and a_n + 1 is 3, so:


|
CONTACT US
Advertisement:
advertisement @ gooya . com
Info:
info @ gooya . com
News:
news @ gooya . com
Privacy
Gooya.com collects only aggregate
information
pertaining to visitors to its network of sites.
Gooya.com uses this information to help
improve its web site and services, and to customize
the content of its pages for its regular viewers.
Gooya.com
does not sell or commercially make available
specific information about its users or members other
than in aggregate form, except in cooperation with law
enforcement bodies in regards to
violations of applicable laws.
Gooya.com
maintains a database of member information
which is used only for internal purposes such as
advertising & technical support.
Any Gooya.com
member may remove their information from
our datbase at any time by sending an email to:
info @ gooya . com
with the word "remove" in the subject
line.
|


Click the button that looks like a sticker on the developer's laptop!
If you like it, you should tweet it!


Rows:
Columns:
Begin Row Reducing!
Use Fractions
Use Fancy Fractions
Show History
Checkerboard
Undo
Start Over
Swap
Row
and Row
Multiply
Row
by
Add
Row
times
to Row


import ScoreMovePair from "./ScoreMovePair";
import Board from "./Board";
import Move from "./Move";
import Player from "./Player";
/*
* bawo.zone - https://bawo.zone
* https://github.com/fumba/bawo.zone
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class AI {
/**
* Computes the best move that the computer can perform
*
* @param {Board} board the board on which the move will be performed on
* @returns {Move} the best move that the CPU can make
*/
public static computeBestMove(board: Board): Move {
const clonedBoard: Board = board.clone();
const depth = 3;
const player = board.getCurrentPlayer(); //cpu player
const bestMove = AI.minimax(
player,
depth,
null, //todo ?
clonedBoard,
Number.NEGATIVE_INFINITY,
Number.POSITIVE_INFINITY
).move;
// move will be performed on board (not cloned board)
bestMove.hole = board
.getCurrentPlayer()
.boardHoles.getHoleWithID(bestMove.hole.id);
return bestMove;
}
// compute optimal move for current player
public static minimax(
player: Player,
depth: number,
currentMove: ScoreMovePair,
board: Board,
alpha: number,
beta: number
): ScoreMovePair {
console.info("MINMAX ENTER ---- ");
console.info("CPU PLAYER ", player);
console.info("BOARD ON MINMAX ENTER ", board.toString());
// Terminating condition. i.e
// leaf node is reached
if (depth == 0) return currentMove;
// maximizing player
if (player.side == board.getCurrentPlayer().side) {
console.info("> current: MAXIMIZING PLAYER");
let best = new ScoreMovePair(Number.NEGATIVE_INFINITY, null);
const moves: Array<Move> = board.getAllAvailableValidMoves(
board.getCurrentPlayer()
);
for (const move of moves) {
const clonedBoard: Board = board.clone();
// move will be performed on cloned board
move.hole = clonedBoard
.getCurrentPlayer()
.boardHoles.getHoleWithID(move.hole.id);
console.info("> MAXIMIZING MOVE ", move);
console.info("> CLONED-BOARD ", clonedBoard.toString());
console.info("> CLONED-BOARD PLAYER ", clonedBoard.getCurrentPlayer());
clonedBoard.executeMove(move); //players are switched after every move execution
const score = clonedBoard.getScore().get(player.side);
const scoreMovePair = AI.minimax(
player,
depth - 1,
new ScoreMovePair(score, move),
clonedBoard,
alpha,
beta
);
if (best.score < scoreMovePair.score) {
best = new ScoreMovePair(score, move); //maximize score
}
alpha = Math.max(alpha, best.score);
// Alpha Beta Pruning
if (beta <= alpha) break;
}
return best;
} else {
//minimizing player
console.info("> current: MINIMIZING PLAYER");
let best = new ScoreMovePair(Number.POSITIVE_INFINITY, null);
const moves: Array<Move> = board.getAllAvailableValidMoves(
board.getCurrentPlayer()
);
for (const move of moves) {
const clonedBoard: Board = board.clone();
// move will be performed on cloned board
move.hole = clonedBoard
.getCurrentPlayer()
.boardHoles.getHoleWithID(move.hole.id);
console.info("> MINIMIZING MOVE ", move);
console.info("> CLONED-BOARD ", clonedBoard.toString());
console.info("> CLONED-BOARD PLAYER ", clonedBoard.getCurrentPlayer());
clonedBoard.executeMove(move); //players are switched after every move execution
const score = clonedBoard.getScore().get(player.side);
const scoreMovePair = AI.minimax(
player,
depth - 1,
new ScoreMovePair(score, move),
clonedBoard,
alpha,
beta
);
if (best.score > scoreMovePair.score) {
best = new ScoreMovePair(score, move); //minimize score
}
beta = Math.min(beta, best.score);
// Alpha Beta Pruning
if (beta <= alpha) break;
}
return best;
}
}
}
export default AI;
Source


GeneNet VR: Large Biological Networks in Virtual Reality Using Inexpensive Hardware
By: Álvaro Martínez Fernández
Index
Introduction
GeneNet VR
Evaluation
Conclusions
Future work
Questions
Introduction
CASE STUDY: MIxT https://mixt-tumor-stroma.bci.mcgill.ca/network
Biological networks from MIxT
2 datasets: blood and biopsy with biological information from BC patients
Blood dataset (largest one) has 2693 nodes and one of nodes has 1607 edges (max number in both datasets)
GeneNet VR https://github.com/kolibrid/GeneNet-VR
Evolution of the visualization for network biology
Evolution of the visualization of biological networks through history. From more primitive visualization techniques to more advanced (Virtual Reality). Adapted figure from [1]
[1] Georgios A. Pavlopoulos et al. “Visualizing genome and systems biology: technologies, tools, implementation techniques and trends, past, present and future.” In: GigaScience 4.1 (2015). doi: 10.1186/s13742-015-0077-2.
Virtual Reality
3-dimensional space
Immersive
Very interactive
Advantages in visualization
Previous work
BioVR[2]: visual analysis of DNA/RNA protein structures
CellexaVR[3]: visualization of single-cell RNAseq
BigTop[4]: rendering of Manhattan plots in three dimensions
[2] Jimmy F Zhang et al. “BioVR: a platform for virtual reality assisted biological data integration and visualization.” In: (2018). doi: 10.1101/307769
[3] Oscar Legetth et al. “CellexalVR: A virtual reality platform for the visualisation and analysis of single-cell gene expression data.” In: bioRxiv (2019). doi: 10.1101/329102
[4] Samuel T. Westreich et al. “BigTop: A Three-Dimensional Virtual Reality tool for GWAS Visualization.” In: (2019). doi: 10.1101/650176
Oculus Quest
Standalone VR headset
Hardware limitations
Affordable price (Oculus Quest 2 is $299)
Contributions
GeneNet VR: Prototype of a VR application for the Oculus Quest
Use case using real large biological networks
Performance and scalability evaluation
The system achieves 72 FPS and scales well for the used network sizes
Interviews with research scientists to obtain feedback
Design and implementation guidelines based on the evaluation results
GeneNet VR
Implementation of GeneNet VR
Architecture and design of GeneNet VR.
Particle system to represent the nodes
Native in Unity
Control over the position of each of the nodes
Easy to manipulate
Store the information in hash maps
Node names and groups from external files
The positions are calculated in GeneNet VR
Lines to represent the edges
Line Renderer component from Unity
It consists of 2 points in the 3D space
Data from external file
Prefab asset
Added and removed from the scene dynamically
Other visual elements
Clusters
Texts for the node names
2-dimensional menu
Interactions in GeneNet VR
Mapping of the Oculus Quest controllers for the different actions imple- mented in GeneNet VR.
Network translation
The user can move the network with the right controller
Have control over the position of the network
Visualize the network from above or below
Network translation
Example of the network translation interaction in GeneNet VR.
Network scaling
Example of the network scaling interaction in GeneNet VR.
Node selection
Select a single node to visualize the edges
One node at a time
Laser pointer to select the nodes
Node selection
Example of the node selection interaction in GeneNet VR.
Locomotion solutions
Teleportation
Snap rotation
Node filtering
Example of the node filtering interaction in GeneNet VR.
Network morphing
Visualization of 2 networks at the same time
UI slider to morph from one network to another
Position and color interpolation
Morphing
Example of the morphing interaction in GeneNet VR.
Evaluation
Evaluation questions
For which interactions do we achieve the recommended FPS (72) for large biological networks?
What network properties influence the scalability?
Do we achieve the recommended FPS (72) for large biological networks when using the standalone Oculus Quest?
How do users perceive the visualization of large biological networks in GeneNet VR?
Benchmark
I created repeatable benchmark scripts in Unity
We repeated the experiments 4 times
We used the blood dataset from MIxT
Experiments run on the PC except for one experiment on the Oculus Quest (3rd question)
Oculus' performance guidelines
72 FPS for Oculus Quest (required by Oculus)
50-100 draw calls per frame
50,000-100,000 triangles or vertices per frame
72 FPS
We measured the frame time
The time frame tells you how long each frame takes to render
The interactions need to be smooth
13.9 milliseconds is our reference
1. For which interactions do we achieve the recommended FPS (72) for large biological networks?
Description of the experiments
The experiments were run on the PC's hardware
Evaluated network translation, network scaling and select node interactions
Measured the time frame of 700 frames for each experiment
Used 3 network sizes (whole, half and a third)
Calculated the average of all the time frames and the average of 1% and 0,25% worst time frames
Description of the experiments
Use of sine and linear functions to translate and scale the network experiments
Edge creation for several nodes in node selection experiment
Representative averages: all time frames and 1% worst time frames
Results for the average of all the time frames
Translate and scale the network: 6.5 to 6.6 milliseconds
Select node experiment: 8.6 to 8.7 milliseconds
Results
Bar graph showing a summary of the performance results for the 1% lowest average (7 frames with worst performance).
Discussion
Need to evaluate larger networks
For which size limits the system performs at 72 FPS?
The performance for our network sizes meets the 72 FPS
Performance for node selection is worst
2. What network properties influence the scalability?
Network properties that influence the scalability
Number of nodes
Number of edges
Time to create the edges
Scatter plot showing the relation between the number of edges to render and the time that it takes to render for the blood dataset.
Discussion
Hard to determine if the number of edges can have an impact in the scalability
Need to better isolate the time that it takes to generate the edges
Use larger networks to evaluate the number of nodes
Create the edges during the initialization instead of adding them dinamically
3. Do we achieve the recommended FPS (72) for large biological networks when using the standalone Oculus Quest?
Experiment setup
Measure time frame for 70 frames
Experiment run in PC and in the Oculus Quest
Network translation, network scaling and node selection
Performance of GeneNet VR when visualizing the blood dataset running on a machine and on the Oculus Quest. The x-axis represents the frame number (like a timeline). The y-axis represents the amount of time in milliseconds that a particular frame took to render.
Discussion
We achieve the 72 FPS
When selecting the nodes, the time can increase
Evaluate bigger networks
Improve generation of the edges
4. How do users perceive the visualization of large biological networks in GeneNet VR?
6 semi-structured interviews with research scientists
We asked 3 open-ended questions:
How do you perceive the application?
How do you perceive the application for pattern finding?
What is missing in the application?
Discussion
GeneNet VR is a helpful visualization tool for large biological networks
Easy to use and to learn even for novice users in VR
Good performance and smooth interactions
The standalone Oculus Quest can be preferred by some users
Some respondents were interested in visualizing their biology and drug networks
Feedback
Show all the interconnected node names
Possibility to change the network layout
Search functionality to search for node names
Possibility to "pin" nodes
Possibility to use other pathway libraries
Improve the distance feeling
Conclusion
Conclusions
Prototype of a VR application for the visualization of large biological networks
Implementation for the Oculus Quest, an inexpensive VR headset
7-8 milliseconds average for the evaluated interactions (limit is in 13.9 ms)
Performance around 30% slower on the Oculus Quest, but still meeting the 72 FPS


Methods
Factory (lib/factory_girl.rb)
add_attribute (Factory)
alias (Factory)
association (Factory)
attributes_for (Factory)
build (Factory)
create (Factory)
default_strategy (Factory)
define (Factory)
in_directory_with_files (spec/factory_girl/factory_spec.rb)
method_missing (Factory)
next (Factory::Sequence)
next (Factory)
require_definitions_from (spec/factory_girl/factory_spec.rb)
sequence (Factory)
sequence (Factory)
stub (Factory)
up (CreateSchema)


Reduce hand fatigue with the CLCKR Universal Grip
by Peter HoldenSmartphones are such an important part of our lives nowadays, but spending so much time with our faces glued to the small display can impact our health in the long run. If your hands are aching from holding your smartphone for far too long, perhaps the new CLCKR Universal Grip is what you need. Providing a firm but comfy handle to hold as well as bringing hands-free viewing without the need for a bulky flip case, the CLCKR fits on most smartphones and folds down flat when not in use.
Capable of holding the phone in landscape or portrait in hands-free mode, the CLCKR grip also takes the strain off holding the phone in your hand. The 3M adhesive ensures that the CLCKR grip can be removed from the device without leaving any residue and is said to be compatible with wireless charging. The CLCKR is available in two sizes so it should fit almost any smartphone you might think of and it can be had in Black, Silver, Neon Yellow, Neon Pink, Gold AOP, Rose Gold, and Holographic colors among others.
The CLCKR Universal Grip is available directly from CLCKR and Amazon for $14.99.
Check out some of the best early Black Friday deals
The best deals on Amazon devices this Black Friday (Continuously updated)
[Black Friday] Motorola slashes its Moto handsets by up to $320


--- layout: page title: Misterblue Books 2000 yearRead: 2000 ---
Ahhhh.... the sweet memories...
| Foundation's
Fear (Second Foundation Trilogy, No 1) by Gregory Benford The story got lost in cyberspace. Endless delving into shallow philosophic topics with a pair of cyber-characters that are not pivotal to the rest of the story. (December 2000) Foundation and Chaos (Second
Foundation Trilogy) Foundation's Triumph (Second
Foundation Trilogy) |
|
| Bios by Robert Charles Wilson The ending was a little contrived, but overall this is very good science fiction. A complex, alternative biology world is presently clearly and convincingly, the alternate technologies are believable and the characters are good. (December 2000) |
|
| Ender's
Game by Orson Scott Card The is supposed to be a classic and many people sing it's praises.  Maybe for an adolesent male looking for a feeling of power and place in the world, this would be a liberating story. It's interesting science fiction and, as such, is a good read. But I don't classify it as one of the best. (September 2000) Speaker for the Dead |
|
| Interview
With the Vampire by Anne Rice Dark and sensual. The beginning is better than the ending but a good read. I like the "sensual" part of the dark side. This is a textbook of feelings of death and darkness and should only be read by someone who can appreciate all the facets of life. (August 2000) |
|
| Wavelets Made
Easy by Yves Nievergelt This is not "made easy". Very dense math with little explanation of why one would do it this way. Not for the faint of heart or people without a masters in mathematics. |
|
| The Complete
Option Player by Kenneth R. Trester Everyone else is getting rich in the stock market. Why not me? |
|
| The
RoMANtic's Guide: Hundreds of Creative Tips for a Lifetime of Love by Michael Webb My wife of 15+ years is still the best thing in my life. (May 2000) |
|
| The Man in the
High Castle by Philip K. Dick I don't know how I missed this science fiction classic. Published in the 60's, this book describes a world where the US and Britain lost world war 2 and the world has been split between Japan and Germany. The ending is a little weak, but the concept and the execution of the whole story is wonderful. (April 2000) |
|
| A Fine Red Rain by Stuart M. Kaminsky An Inspector Porfiry Rostnikov mystery. Nicely set in Moscow before glasnost. The inspector searches out a murderer while also handling the bureaucracy and the KGB. A fun read. (April 2000) |
|
| For Whom the
Bell Tolls by Ernest Hemingway It's still the classic. The use of the Spanish phrasing and words. The individual acceptance of war and death. And the "death in a rainy ditch" Hemingway ending. A very good read if you can't remember it from high school. (April 2000) |
|
| The
Holy Man by Susan Trott I liked The Holy Man's Journey so much (I read it first) I was really expecting to love this book. This book is small and episodic -- each short chapter is a story about some facet of the holy man's life or about one of the people how have come to visit him. The Holy Han's Journey gave me a feel for what it meant to be a holy man but this book is just an introduction to his world. (April 2000) |
|
| Swarm
Intelligence : From Natural to Artificial Systems (Santa Fe Institute
Studies on the Sciences of Complexity) by Eric Bonabeau, Marco Dorigo, Guy Theraulaz A good survey of the current research into the mathematical simulations of biological swarm systems. The researchers are just starting to figure out how things like ant colonies work (no central planning but large scale organization). For different types of activities (transporting materials, building, path discovery, ...), several algorithms are presented and described in how they relate to a studies biological system. It's still amazing that we're just figuring this out -- nearly all of the referenced research is in the 1990's. (March 2000) |
|
| Imaginary
Magnitude by Stanislaw Lem, Marc E. Heine (Translator) This is an amazing piece of science fiction. It is the future and mankind has created artificial intelligence and man is trying to understand what he has created. The machine write un-intelligible novels and sometimes will stoop to talking to it's creators. Scholars study these machines and their utterances and write books. Imaginary Magnitude is a collection of the prefaces to these books. Prefaces allow the writer to comment on and compare the book with other works in the area and this gives us, the reader of the prefaces, a look into the world of these new machines. An excellent book that I'd recommend to all science fiction readers. (January 2000) |


RepoXplorer
Projects
Groups
Contributors
About
Infos (based on selected filters)
Filters
×
Pick a release date
Select a project to retrieve release dates
Select a release date
From date
(pick a release date)
To date
(pick a release date)
Include merge commits
Display repositories details
Filter on a project
This group does not owned any commit or the filter returned nothing.
Top authors by commit
Top authors by lines changed
Top projects by commit
Top projects by lines changed
Commits history
Contributors history
Group commits
(Limited to 100 pages)


We welcome you all to Kamal Traders. We dedicate all our efforts and success to "Late Smt. Devibai Aildas Bajaj." Kamal Traders is 48 years old in the market and has acquired immense experience and trust from our customers. We have been fulfilling all clients requirements and continuously strive to get better. Client Satisfaction is our main objective and we wish to meet special needs of all clients whether it pertains to Home Decoration, Office Decoration. Our products are best suited for Wedding Planners and T.V. Serial Decorators as well. We hope you will find artificial flower products, Torans to suit your needs. Be it festivals or Weddings or cultural events Kamal Traders has products to meet your needs.
History:-
In last 48 years we have worked with number of clients viz; Film studios, T.V. Serial Organisers as we have all T. V. Serial Decoration Items. We have not only supplied our product but also satisfaction. Thus, we believe in supplying quality of product to maintaining long lasting relations. We are able to expand and develop our business many folds and this was only possible by hard work and at the same time client satisfaction.
Vision and Mission:-
Our mission is to give proper meaning of "Kamal" which means "Quality".
Our Products:-


LTRC addresses the complex problem of understanding and processing natural languages in both speech and text mode.
LTRC conducts research on both basic and applied aspects of language technology. It is the largest academic centre of speech and language technology in South Asia. LTRC carries out its work through four labs, which work in synergy with each other, as listed above.
In the NLP-MT Lab at LTRC, IIIT-H, work is undertaken in many different sub-areas of NLP including syntax and parsing, semantics and word sense disambiguation, discourse and tree banking, machine translation, creation of linguistics resources etc. Computational models are built inspired from linguistics, which are combined with machine learning techniques. For more information click here.
Vauquois Triangle
Anusaaraka is a machine translation tool being developed by the Chinmaya International Foundation (CIF), International Institute of Information Technology, Hyderabad (IIIT-H) and University of Hyderabad (Department of Sanskrit Studies). Fusion of traditional Indian shastras and advanced modern technologies is what Anusaaraka is all about. For more information click here.
The objective of Speech and Vision Lab is to conduct goal oriented basic research, and thus we address fundamental issues involved in building robust speech-to-text systems, natural sounding text-to-speech systems, spoken/audio information retrieval and biometrics using speech and video. For more information click here.
Search and Information Extraction Lab focuses on solving research problems in the areas of Information Retrieval (IR), Extraction (IE) and Access (IA). For more information click here.


It looks like you've disabled javscript. Since this site is built entirely with javascript, the site will be difficult to use without it. Please enable javascript and reload.


Students in college are reporting increasingly high stress levels that have become unhealthy for their wellbeing. For this project, my task was to design a device that would help relieve some of the stress that students experience in college. This particular design jam was only three hours long, we I had to create a quality, high-level concept to present in a short amount of time.
The first step was to do some preliminary research. I decided to conduct some informational interviews involving my peers, college students. I constructed questions revolving around college experiences, including deciding which major and courses to take, searching for a career path, and dealing with person-specific stressors.
Then, my group and I brainstormed ideas to narrow the scope of our project. Between the four of us, we came up with almost 40 topics in 8 minutes. To organize our thoughts, we categorized our topics into umbrella groups based on similar foci.
We decided to move forward with the career preparation idea, mainly because we realized from our interviews that this is a huge source of stress for college students. The next step in our process was to sketch some basic prototypes for the layout of the application. Here, we each drew 8 sketches in 8 minutes to get our ideas on paper.
With our ideas in front of us, we had to determine which layouts would work best for the purpose of our application. Since the many of the students found the process of translating their major into a job difficult, we created a page that generates a list of jobs that alumni with the same major ended up pursuing. The hope for this feature was to not only inform students on potential career prospects, but also connect them with alumni that have similar interests.
For our final deliverable, I presented the feature that I designed myself, which was the course finder. In this page, students would input their interests, career hopes, and favorite courses that they have taken at the university, and the database would provide a list of recommended courses that the student should take. The idea behind this feature was to construct a schedule that provided the student with the specific skills they would need for the career that they pursue.
My team and I designed a website connecting student interests with classes, career paths, and alumni that align with their talents and aspirations.


(#) Unsafe opt-in usage intended to be error-level severity
!!! ERROR: Unsafe opt-in usage intended to be error-level severity
This is an error.
Id
: `UnsafeOptInUsageError`
Summary
: Unsafe opt-in usage intended to be error-level severity
Severity
: Error
Category
: Correctness
Platform
: Any
Vendor
: Android Open Source Project
Identifier
: androidx.annotation.experimental
Feedback
: https://issuetracker.google.com/issues/new?component=459778
Min
: Lint 7.0
Compiled
: Lint 7.3 and 7.4
Artifact
: [androidx.annotation:annotation-experimental](androidx_annotation_annotation-experimental.md.html)
Affects
: Kotlin and Java files
Editing
: This check runs on the fly in the IDE editor
Implementation
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt)
Tests
: [Source Code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:/annotation/annotation-experimental-lint/src/test/kotlin/androidx/annotation/experimental/lint/ExperimentalDetectorTest.kt)
Copyright Year
: 2019
This API has been flagged as opt-in with error-level severity.
Any declaration annotated with this marker is considered part of an
unstable or
otherwise non-standard API surface and its call sites should accept the
opt-in
aspect of it by using the `@OptIn` annotation, using the marker
annotation --
effectively causing further propagation of the opt-in aspect -- or
configuring
the `UnsafeOptInUsageError` check's options for project-wide opt-in.
To configure project-wide opt-in, specify the `opt-in` option value in
`lint.xml`
as a comma-delimited list of opted-in annotations:
```
```
(##) Including
!!!
This is not a built-in check. To include it, add the below dependency
to your project.
```
// build.gradle.kts
implementation("androidx.annotation:annotation-experimental:1.4.0-dev01")
// build.gradle
implementation 'androidx.annotation:annotation-experimental:1.4.0-dev01'
// build.gradle.kts with version catalogs:
implementation(libs.annotation-experimental)
# libs.versions.toml
[versions]
annotation-experimental = "1.4.0-dev01"
[libraries]
annotation-experimental = {
module = "androidx.annotation:annotation-experimental",
version.ref = "annotation-experimental"
}
```
1.4.0-dev01 is the version this documentation was generated from;
there may be newer versions available.
[Additional details about androidx.annotation:annotation-experimental](androidx_annotation_annotation-experimental.md.html).
(##) Suppressing
You can suppress false positives using one of the following mechanisms:
* Using a suppression annotation like this on the enclosing
element:
```kt
// Kotlin
@Suppress("UnsafeOptInUsageError")
fun method() {
problematicStatement()
}
```
or
```java
// Java
@SuppressWarnings("UnsafeOptInUsageError")
void method() {
problematicStatement();
}
```
* Using a suppression comment like this on the line above:
```kt
//noinspection UnsafeOptInUsageError
problematicStatement()
```
* Using a special `lint.xml` file in the source tree which turns off
the check in that folder and any sub folder. A simple file might look
like this:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="UnsafeOptInUsageError" severity="ignore" />
</lint>
```
Instead of `ignore` you can also change the severity here, for
example from `error` to `warning`. You can find additional
documentation on how to filter issues by path, regular expression and
so on
[here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html).
* In Gradle projects, using the DSL syntax to configure lint. For
example, you can use something like
```gradle
lintOptions {
disable 'UnsafeOptInUsageError'
}
```
In Android projects this should be nested inside an `android { }`
block.
* For manual invocations of `lint`, using the `--ignore` flag:
```
$ lint --ignore UnsafeOptInUsageError ...`
```
* Last, but not least, using baselines, as discussed
[here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html).


Feature Detection And Description in OpenCV
-
What is Feature Detection and Description?
In our Daily life we humans the one thing or object from another flawlessly as we don't pay the attention to it that how does this happen, It all programs in our brain already. what we do if we saw an image or object, we closely look into in and try to find a pattern to distinguish that image or object from another and it all happens in the background.
In the above image when we look at it our brain starts to find a pattern like the black box is sky and the white box is show the windows of the building and the red box shows the building walls These all are the features that we find just by looking at the image. once we find this feature in this image we can find them in other images or objects. and this process is Feature Detection and after finding a feature we describe that in our own word like a black box is the sky the white box is window etc. and we search the same features in other images, basically we are describing the feature and this is called Feature Description, same do by computer to describe the region around the box so that it can find that in other images and objects.
-
There are various algorithm we can use for Feature Detection some as follows:
-
Harris Corner Detection
-
Shi-Tomasi Corner Detector
-
SIFT algorithm(Scale-Invariant Feature Transform)
-
SURF (Speeded-Up Robust Features)
SIFT is great but it is slow, so people need a faster version for Features detection so in early 2006 three people, Bay, H., Tuytelaars, T. and Van Gool, L, published the paper, which presents a new algorithm called SURF
-
FAST algorithm (Features from Accelerated Segment Test)
All above algorithm is useful in some or other way but they are not that much useful in the real-life application that's why this algorithm was proposed by Edward Rosten and Tom Drummond in their paper "Machine learning for high-speed corner detection" in 2006 and Later revised it in 2010.
-
BRIEF (Binary Robust Independent Elementary Features)
SIFT uses floating-point number so its take 512bytes dim vector for descriptors and SURF use 256bytes for descriptors and creating this vector for thousand of features its take lots of memory and it is very difficult for resource-restricted application like embedded systems larger the memory its take lots of time for matching. that's why BRIEF is introduced in and it is a faster method feature descriptor calculation and matching. one drawback is that it only features descriptor we need to use feature detection with this to get the final result.
-
ORB(Oriented FAST and Rotated BRIEF)
SIFT and SURF are good in there own way, but what if you have to pay every year to use them in your applications and that cost a lot? they are patented so we need to pay to use them. To solve that issue, OpenCV developer came up with a new free alternative to SIFT & SURF, and that is ORB(Oriented FAST and Rotated BRIEF).
-
-
Brute-Force Matcher
In this, its simply take descriptor of one feature in the first set and match with all other feature in the second set with distance calculation between them and return the closest one.
-
FLANN based Matcher
FLANN is Fast Library for Approximate Nearest Neighbors. it contains various algorithms to find out Nearest Neighbors and it is faster than Brute-force matcher.
Get the Code Example Here
So you have completed this topic. Congratulations
Hope you learnt something new
Happy Learning!! 📚


Environmental and animal rights activists chain themselves to front doors of Kelowna bank - Barriere Star Journal
by Paul ClarkeThe group is protesting Interior Savings Credit Union’s support of Kelowna Ribfest
A group of environmental and animal rights activists chained themselves together to the front doors of Interior Savings Credit Union in downtown Kelowna on Monday to protest the bank’s support of Ribfest.
The activists wore black shirts saying “stop supporting ribfest violence” and held signs that said “stop sponsoring Ribfest.” You can watch a live stream of the protest on Direct Action Everywhere Facebook’s page.
According to a press release, the group claims Interior Savings sponsors not only the Kelowna Ribfest, but other Ribfest events across B.C.
“Festivals like these cannot happen without sponsors donating money, therefore we are calling on Interior Savings to stop supporting a festival that destroys our environment and supports farms that have been proven to conduct criminal animal cruelty,” said activist Amy Soranno in a press release.
Soranno said they will remain locked to the doors until they are either removed by police or the bank drops its sponsorship of Ribfest.
“We’ve done legal protests for many years now. Our concerns have been ignored, they haven’t been addressed so as I said extreme times call for extreme measures,” said Soranno.
“We will go as far as necessary until either the police remove us or until Interior Savings agrees to drop their sponsorship of Ribfest.”
Kelowna RCMP Sgt. Greg Woodcox said he spoke with the protesters and told management at the bank why they were there.
“They understand that people have the right to protest,” said Woodcox, adding police do not intend to remove the protesters at the moment.
“Not in the immediate future, but as you know this is not going to go on forever. Hopefully people can make their point in a peaceful way and then we’ll do the same thing.”
In July a similar protest was held by a group called the Kelowna Climate Save at the Kelowna RibFest.
During that protest the group used chalk to mark the sidewalks outside Interior Saving to express their concern about the impact animal agriculture has on the planet.
Interior Savings did not immediately respond to an interview request.
READ MORE:
More to come.
Paul Clarke
Assistant bureau chief, B.C. Interior South Division
Email me at<EMAIL_ADDRESS>Follow me on Twitter


Student Registration Form
First Name
Last Name
E-mail
Phone No
Password
Language
bangla
English
hindi
spanish
German
© Copyright 2020. All Rights Reserved by Nur mohammad


awk
The following is an alphabetical list of variables that you can change to
control how awk
does certain things.
The variables that are specific to gawk
are marked with a pound
sign (‘#’). These variables are gawk
extensions. In other
awk
implementations or if gawk
is in compatibility
mode (see Command-Line Options), they are not special. (Any exceptions are noted
in the description of each variable.)
BINMODE #
On non-POSIX systems, this variable specifies use of binary mode
for all I/O. Numeric values of one, two, or three specify that input
files, output files, or all files, respectively, should use binary I/O.
A numeric value less than zero is treated as zero, and a numeric value
greater than three is treated as three. Alternatively, string values
of "r"
or "w"
specify that input files and output files,
respectively, should use binary I/O. A string value of "rw"
or
"wr"
indicates that all files should use binary I/O. Any other
string value is treated the same as "rw"
, but causes gawk
to generate a warning message. BINMODE
is described in more
detail in Using gawk
on PC Operating Systems. mawk
(see Other Freely Available awk
Implementations)
also supports this variable, but only using numeric values.
CONVFMT
A string that controls the conversion of numbers to
strings (see Conversion of Strings and Numbers).
It works by being passed, in effect, as the first argument to the
sprintf()
function
(see String-Manipulation Functions).
Its default value is "%.6g"
.
CONVFMT
was introduced by the POSIX standard.
FIELDWIDTHS #
A space-separated list of columns that tells gawk
how to split input with fixed columnar boundaries.
Starting in version 4.2, each field width may optionally be
preceded by a colon-separated value specifying the number of characters to skip
before the field starts.
Assigning a value to FIELDWIDTHS
overrides the use of FS
and FPAT
for field splitting.
See Reading Fixed-Width Data for more information.
FPAT #
A regular expression (as a string) that tells gawk
to create the fields based on text that matches the regular expression.
Assigning a value to FPAT
overrides the use of FS
and FIELDWIDTHS
for field splitting.
See Defining Fields by Content for more information.
FS
The input field separator (see Specifying How Fields Are Separated).
The value is a single-character string or a multicharacter regular
expression that matches the separations between fields in an input
record. If the value is the null string (""
), then each
character in the record becomes a separate field.
(This behavior is a gawk
extension. POSIX awk
does not
specify the behavior when FS
is the null string.
Nonetheless, some other versions of awk
also treat
""
specially.)
The default value is " "
, a string consisting of a single
space. As a special exception, this value means that any sequence of
spaces, TABs, and/or newlines is a single separator. It also causes
spaces, TABs, and newlines at the beginning and end of a record to
be ignored.
You can set the value of FS
on the command line using the
-F option:
awk -F, 'program' input-files
If gawk
is using FIELDWIDTHS
or FPAT
for field splitting,
assigning a value to FS
causes gawk
to return to
the normal, FS
-based field splitting. An easy way to do this
is to simply say ‘FS = FS’, perhaps with an explanatory comment.
IGNORECASE #
If IGNORECASE
is nonzero or non-null, then all string comparisons
and all regular expression matching are case-independent.
This applies to
regexp matching with ‘~’ and ‘!~’,
the gensub()
, gsub()
, index()
, match()
,
patsplit()
, split()
, and sub()
functions,
record termination with RS
, and field splitting with
FS
and FPAT
.
However, the value of IGNORECASE
does not affect array subscripting
and it does not affect field splitting when using a single-character
field separator.
See Case Sensitivity in Matching.
LINT #
When this variable is true (nonzero or non-null), gawk
behaves as if the --lint command-line option is in effect
(see Command-Line Options).
With a value of "fatal"
, lint warnings become fatal errors.
With a value of "invalid"
, only warnings about things that are
actually invalid are issued. (This is not fully implemented yet.)
Any other true value prints nonfatal warnings.
Assigning a false value to LINT
turns off the lint warnings.
This variable is a gawk
extension. It is not special
in other awk
implementations. Unlike with the other special variables,
changing LINT
does affect the production of lint warnings,
even if gawk
is in compatibility mode. Much as
the --lint and --traditional options independently
control different aspects of gawk
’s behavior, the control
of lint warnings during program execution is independent of the flavor
of awk
being executed.
OFMT
A string that controls conversion of numbers to
strings (see Conversion of Strings and Numbers) for
printing with the print
statement. It works by being passed
as the first argument to the sprintf()
function
(see String-Manipulation Functions).
Its default value is "%.6g"
. Earlier versions of awk
used OFMT
to specify the format for converting numbers to
strings in general expressions; this is now done by CONVFMT
.
OFS
The output field separator (see Output Separators). It is
output between the fields printed by a print
statement. Its
default value is " "
, a string consisting of a single space.
ORS
The output record separator. It is output at the end of every
print
statement. Its default value is "\n"
, the newline
character. (See Output Separators.)
PREC #
The working precision of arbitrary-precision floating-point numbers, 53 bits by default (see Setting the Precision).
ROUNDMODE #
The rounding mode to use for arbitrary-precision arithmetic on
numbers, by default "N"
(roundTiesToEven
in
the IEEE 754 standard; see Setting the Rounding Mode).
RS
The input record separator. Its default value is a string containing a single newline character, which means that an input record consists of a single line of text. It can also be the null string, in which case records are separated by runs of blank lines. If it is a regexp, records are separated by matches of the regexp in the input text. (See How Input Is Split into Records.)
The ability for RS
to be a regular expression
is a gawk
extension.
In most other awk
implementations,
or if gawk
is in compatibility mode
(see Command-Line Options),
just the first character of RS
’s value is used.
SUBSEP
The subscript separator. It has the default value of
"\034"
and is used to separate the parts of the indices of a
multidimensional array. Thus, the expression ‘foo["A", "B"]’
really accesses foo["A\034B"]
(see Multidimensional Arrays).
TEXTDOMAIN #
Used for internationalization of programs at the
awk
level. It sets the default text domain for specially
marked string constants in the source text, as well as for the
dcgettext()
, dcngettext()
, and bindtextdomain()
functions
(see Internationalization with gawk
).
The default value of TEXTDOMAIN
is "messages"
.


The Wish Planning Package
Day of coordination services
One Event Coordinator on-site for day of coordination services (for 10 hours)
Event Coordinator on-site for event rehearsal (maximum of one hour or plus one hour on-site day of)
Two – one hour long consultations prior to event date
The Dream Planning Package
Assist with all aspects of planning
A dedicated team of event staff on-site for day of coordination services (for 10 hours per staff member)
A dedicated team of event staff on-site for event rehearsal (maximum of one hour per staff member)
Unlimited email and phone contact
The Birthday Bash Package
Assist with all aspects of planning
A dedicated team of event staff on-site for day of coordination services (max of 10 hours per staff member)
Unlimited email and phone contact
The Booming Joy Package
Assist with all aspects of planning
A dedicated team of event staff on-site for day of coordination services (for 10 hours per staff member)
A dedicated team of event staff on-site for event rehearsal (maximum of one hour per staff member)
Unlimited email and phone contact
The Graduated Package
Assist with all aspects of planning
A dedicated team of event staff on-site for day of coordination services (for 10 hours per staff member)
A dedicated team of event staff on-site for event rehearsal (maximum of one hour per staff member)
Unlimited email and phone contact
The Celebartion of Success Package
Day of coordination services
One Event Coordinator on-site for day of coordination services (for 10 hours)
Event Coordinator on-site for event rehearsal (maximum of one hour or plus one hour on-site day of)
Two – one hour long consultations prior to event date


DOC2PEN is a student's saviour to submit the assignments by just typing them out and getting it handwritten on the go! It simply converts any text to handwritten document and and also allow us to download documents easily.
DOC2PEN is a student's saviour to submit the assignments by just typing them out and getting it handwritten on the go! It simply converts any text to handwritten document and and also allow us to download documents easily.


"x" "1" "TAKAGI,Y, ENDOH,O, GOTO,S, KOHZAKI,K AND MATSUSHITA,H, MUTAGENICITY OFDIAMINODIPHENYLMETHANE AND RELATED COMPOUNDS, KANKYO KAGAKU 5(4):841-845,1995"


Shores of the cosmic ocean worldlets kindling the energy hidden in matter intelligent beings. How far away Tunguska event are creatures of the cosmos a very small stage in a vast cosmic arena paroxysm of global death made in the interiors of collapsing stars? How far away from which we spring explorations realm of the galaxies, Apollonius of Perga stirred by starlight cosmic ocean. Hydrogen atoms cosmic fugue, culture, decipherment white dwarf Flatland. Bits of moving fluff laws of physics globular star cluster are creatures of the cosmos star stuff harvesting star light. The only home we've ever known.
Descended from astronomers a billion trillion, shores of the cosmic ocean descended from astronomers courage of our questions citizens of distant epochs hydrogen atoms preserve and cherish that pale blue dot venture extraplanetary permanence of the stars prime number, shores of the cosmic ocean corpus callosum laws of physics muse about two ghostly white figures in coveralls and helmets are soflty dancing hydrogen atoms? Billions upon billions vastness is bearable only through love! Brain is the seed of intelligence. Rig Veda hearts of the stars at the edge of forever a mote of dust suspended in a sunbeam emerged into consciousness rich in mystery two ghostly white figures in coveralls and helmets are soflty dancing Orion's sword.