Karmichael Hunt signs Waratahs extension
Cape Town - Karmichael Hunt is set to play his second campaign in sky blue after the Waratahs confirmed they had re-signed him for the 2020 season.
Hunt - who joined the Waratahs at the start of the 2019 Super Rugby season - was an integral part of the side’s backline and attack, before his season was cruelly cut short through injury.
Named the Back of the Year for 2019, Hunt also finished at the pointy end of Matt Burke Cup voting after a stellar campaign.
He missed the National Rugby Championship (NRC) to focus on rehabilitating the knee injury that ended his Super Rugby season, and will start the 2020 pre-season fit and firing.
Waratahs head coach Rob Penney said Hunt had been a strong performer last season and would be an important signing for 2020.
“Everyone I’ve spoken to can’t speak highly enough of Karmichael, his attitude, professionalism and experience will be extremely valuable this season,” Penney said.
“He’s a supremely talented athlete and from all reports, sets the example for our younger guys in the way he goes about his business, looks after his body and prepares for games.
“We’ve all seen what Karmichael’s capable of across what’s been an illustrious career, he brought that to the Waratahs in 2019 and will again play a vital role in the midfield next season.
“He’s a player I’m really looking forward to working with and I’m pleased he’s remaining a Waratah for another season.”
Hunt was thankful to remain a Waratah after making his club debut in 2019.
“I’m grateful for the opportunity the Waratahs gave me to play Super Rugby (in 2019) and the care and support provided by my team-mates and everyone within the organisation,” he said.
“My family and I are happy in New South Wales and the environment at the Waratahs is a huge part of that, it’s a place that’s been great for me both professionally and personally.
“We’ve got a good young squad of guys that I’m looking forward to playing alongside, sharing some of my experiences with and contributing to their development (in 2020).
“Next season is a new challenge for all of us, it’s exciting and I can’t wait to get started.”


See the Deployment Overview chapter for a brief outline of jiffy-application deployment artifacts
In a development or test setting it may make sense to deploy everything in one container. SQLite is a good choice for this type of container deployment, as it is a file-based database and therefore does not need to be started as a service. Containers typically offer single services and their configuration is geared to this usage pattern. While it is possible to run Postgres, a KVS and a jiffy-application in the same container, it is an atypical scenario and a little cumbersome to setup. By using SQLite and dispensing with the KVS we only need to run the jiffy-application in the container.
The docker build command can be used in conjunction with a Dockerfile to generate a new Docker image complete with the application, SQLite library and sparse Alpine Linux install. docker build also assigns an ipv4 address to the container image by default. This ip-address needs to be added to the application’s configuration file via the execution of a custom script during the image build.
See the Jiffy with Docker and SQLite tutorial for an example of an end-to-end all-in-one Jiffy application deployment with Docker and SQLite.
The new Docker image can then be used to create a container which the Docker daemon will then manage and run.
See the sample tutorial referenced above for the Dockerfile, application configuration file and scripting required to support this type of deployment.
Single instance deployments contain one jiffy-application instance, an optional KVS and a database. In this example scenario the jiffy application is deployed in a Docker container, the database is running on a separate host and the stand-alone/local KVS is used. Ip-addresses are shown for illustrative purposes only and it is implied that Docker’s default bridge network is used. See the All-In-One Deployment with Docker section for a brief overview of the Docker containerization of a jiffy application.
The docker build command can be used in conjunction with a Dockerfile to generate a new Docker image containing the application and a sparse Alpine Linux install. docker build also assigns a static ipv4 address to the container image by default. This ip-address needs to be added to the application’s configuration file via the execution of a custom script during the image build.
See the Jiffy with Docker and External PostgreSQL tutorial for an example of an end-to-end deployment of a single jiffy application container talking to a PostgreSQL database on the host’s network.
The Single-Instance Deployment diagram shows a jiffy-application instance running in a container with an ipv4 address of <IP_ADDRESS>. The container is using docker’s default bridge network, as evidenced by the first two numbers of the ip-address. The application instance is accepting http client connections on port :8080 and using port :7070 to listen for failure-detector & cache synchronization messages. The failure detector ‘bus’ is used for group-leadership and inter-process cache messages, even when the application is run standalone (single process).
It is not necessary to run an external KVS if only one container/jiffy-application instance will be run. When running without a KVS, set the ‘local_standalone’ KVS to active in the xxx.config.json file. The application instance will assign itself a PID of 1 and assert leadership inside it’s own process. The short version is: don’t worry about the KVS if you want to run a single instance of your jiffy application.
If you do choose to run an All-In-One / single application instance with a KVS, using sluggo / setting the ‘sluggo’ KVS to active in the xxx.config.json file is the easiest way to get started. You may also choose to use Redis, Memcached or create your own implementation of the gmcom.GetterSetter interface to support another KVS.
The application communicates with the KVS using whatever protocol/transport is required. Remember that the selection of KVS is arbitrary and an interface is provided to allow the implementer to write their own code to communicate with any KVS.
The application is also shown to be accessing a Postgres database on the host’s network via tcp @<IP_ADDRESS>:5432. In this example we show PostgreSQL accepting connections on it’s default port (tcp/5432), but any of the supported databases can be used.
Multi-instance deployments refer to non-swarm Docker deployments of >1 jiffy-application containers, a KVS and a database. In this scenario the database and KVS are running on separate systems on the host network. When deploying more than one instance of a jiffy-application the KVS is not optional, as the group-leadership sub-system requires it in order to globally persist the group-leader information. It would be possible to run the KVS and the database in Docker containers as well, but we will start by only running instances of the containerized jiffy-application in Docker.
The Multi-Instance Deployment diagram shows two instances of a containerized jiffy application running in Docker. Each application instance is accepting http client connections on port :8080 and using port :7070 to listen for failure-detector & cache synchronization messages. The failure detector ‘bus’ is used for group-leadership and inter-process cache messages.
The KVS is used to hold the current group-leader information when jiffy applications are deployed with more than one instance. See the Interprocess Communication section for details regarding the use of the KVS with group-membership and group-leader election.
Running sluggo is the easiest way to get started with a KVS for jiffy. You may also choose to use an existing Redis or Memcached system or cluster.
The application communicates with the KVS using whatever protocol/transport is required. The diagram shows a web-socket connection from the containerized jiffy application to the KVS on port :4444, as this is how sluggo communicates. Remember that the selection of KVS is arbitrary and an interface is provided to allow the implementer to write their own code to communicate with any KVS.
Application instances are shown to be accessing a Postgres database on the host network via tcp @<IP_ADDRESS>:5432. In this example we show PostgreSQL accepting connections on it’s default port (tcp/5432), but any of the supported databases can be used.
When running multiple jiffy-application instances a load-balancer of some sort should be used to route traffic based on end-point, system-load or other locally important criteria.


Develops the concepts and mathematical algorithms
Design the experiments and perform the analyses of the experimental data
Assist the PI in the development of mathematical analyses
Develops the necessary software
Assist the PI with the analysis of the experimental data
Performs the transcriptomics and molecular biology experiments
Optimizes the experimental methods
Assist the Postdoctoral Researcher at genomics experiments
Maintains the equipment and the consumables


Source code for chemics.fluidization.bubble
"""
Bubble
------
This module contains functions for calculating bubble diameter and bubble
velocity.
"""
from math import exp, pi, sqrt
[docs]def dbMoriWen(z, us, umf, d_bed, l_or, distributor_type):
"""
Calculates the equivalent diameter of the gas bubble in the bed, assuming
that all of the volume in bubbles in the bed were combined into a single
spherical bubble. This uses the Mori/Wen correlation as given in
Fluidization Engineering by Kunii & Levenspiel (K/L), eqs. 5.15, 5.19, and
6.5.
Parameters
----------
z : float
Height of the bubble along the vertical axis of the bed [m]
us : float
Superficial velocity of the gas [m/s]
umf : float
Minimum fluidization velocity [m/s]
d_bed : float
Bed diameter [m]
l_or : float
Orifice spacing [m] (only if perforated plate distributor used)
distributor_type : string
Type of distributor plate
Options are
'perf_sq' = perforated, square arrangement of orifices
'perf_tri' = perforated, triangular arrangement of orifices
'porous' = porous (equivalent to perforated triangular arrangement of tiny orifices)
Returns
-------
db : float
Equivalent bubble diameter at the specified z position [m]
"""
# Constants
g_cgs = 981.0 # gravity, cm/s^2
# Convert all mks units to cgs units for use with the correlation, which
# appears in K/L in cgs units.
z_cgs = z * 100.0
us_cgs = us * 100.0
umf_cgs = float(umf) * 100.0
d_bed_cgs = d_bed * 100.0
l_or_cgs = l_or * 100.0
# Maximum bubble diameter, cm
db_max = 0.65 * (pi / 4 * d_bed_cgs**2 * (us_cgs - umf_cgs))**0.4
# Minimum bubble diameter, cm for high flow rate/large bubble sizes at
# distributor plate. Also works for porous distributors.
db_min_high = 2.78 / g_cgs * (us_cgs - umf_cgs)**2
if distributor_type == 'perf_sq':
# Minimum bubble diameter, cm for low flow rate/small bubble sizes at
# distributor plate
db_min_low = 1.3 / (g_cgs**0.2) * ((us_cgs - umf_cgs) * l_or_cgs**2)**0.4
# Set the minimum bubble diameter based on the orifice spacing
if db_min_low <= l_or_cgs:
db_min = db_min_low
else:
db_min = db_min_high
elif distributor_type == 'perf_tri':
# Minimum bubble diameter, cm for low flow rate/small bubble sizes at
# distributor plate
db_min_low = 1.3 / (g_cgs**0.2) * ((us_cgs - umf_cgs) *
l_or_cgs**2 * sqrt(3)/2)**0.4
# Set the minimum bubble diameter based on the orifice spacing
if db_min_low <= l_or_cgs:
db_min = db_min_low
else:
db_min = db_min_high
elif distributor_type == 'porous':
# Just use the high flow rate equation at the distributor
db_min = db_min_high
else:
raise NotImplementedError("Unknown distributor type " +
str(distributor_type) + " in Mori/Wen bubble diameter calculation.")
# Equivalent bubble diameter, cm
db = db_max - (db_max - db_min) * exp(-0.3 * z_cgs / d_bed_cgs)
# Constrain to 80% of the diameter of the column
db = min(0.8*d_bed*100.0, db)
# Return the bubble diameter, m
return db / 100.0
[docs]def ubMoriWen(us, umf, db):
"""
Estimates the velocity of a bubble in a manner consistent with the Mori/Wen
correlation. This is eq. <> in Kunii & Levenspiel.
Parameters
----------
us : float
Superficial gas velocity [m/s]
umf : float
Minimum fluidization velocity [m/s]
db : float
Bubble diameter [m]
Returns
-------
ub : float
Bubble rise velocity [m/s]
"""
# Constants
g = 981.0 # cm/s^2
# Convert everything to cgs
us_cgs = us * 100.0
umf_cgs = umf * 100.0
db_cgs = db * 100.0
ub_cgs = (us_cgs - umf_cgs) + 0.711 * sqrt(g * db_cgs)
return ub_cgs / 100.0
[docs]def bubbleFraction(ub, us, umf, emf):
"""
Calculates the fraction of the bed that is in the bubble phase using K/L
eqs. 6.26-6.29.
Parameters
----------
ub : float
Bubble rise velocity [m/s, cm/s, etc.]
us : float
Superficial gas velocity [m/s, cm/s, etc.]
umf : float
Minimum fluidization velocity [m/s, cm/s, etc.]
emf : float
Minimum fluidization void fraction [-]
Note
----
Units are not important, provided they are consistent, as the calculation
returns a dimensionless quantity.
Returns
-------
delta : float
Fraction of the total bed volume that is in bubbles [-]
"""
# Velocity of gas in the emulsion -- used to decide which regime we are in
ue = umf / emf
# Ratio of velocities. This ratio determines which regime we are in.
ub_ue_ratio = float(ub) / float(ue)
# Calculate delta
if ub_ue_ratio < 1: # Slow bubbles
delta = (us - umf) / (ub + 2*umf)
elif ub_ue_ratio > 10: # Very fast bubbles
delta = us / ub
elif ub_ue_ratio > 5: # Fast Bubbles
delta = (us - umf) / (ub - umf)
elif ub_ue_ratio < 3: # Slower intermediate bubbles
delta = (us - umf) / (ub + umf)
else: # Faster intermediate bubbles
delta = (us - umf) / ub
return delta


Hi, my name is Haoran and Im aspiring to be a fullstack developer. I've recently started on freecodecamp and it has intrigued me. Therefore I made it my goal in life to succeed as a software developer. My interests would be going to the gym, and writing code.


Category
Add new
Enter Name
Please Enter Category Name
Description
Please Enter someDesc
Thumbnail
Please Choose Image
0%
Save
Saved Categories
Name
Description
Thumbnail


To create a subscription for the custom type, in the Initialize
method, call the AddData
method. The AddData
method returns a Security
object, which contains a Symbol
. Save a reference to the Symbol
so you can use it in OnData
to access the security data in the Slice
.
public class MyAlgorithm : QCAlgorithm { private Symbol _symbol; public override void Initialize() { _symbol = AddData<MyCustomDataType>("MyCustomDataType", Resolution.Daily).Symbol; } }
class MyAlgorithm(QCAlgorithm): def Initialize(self) -> None: self.symbol = self.AddData(MyCustomDataType, "MyCustomDataType", Resolution.Daily).Symbol
The AddData
method creates a subscription for a single custom data asset and adds it to your user-defined universe.


{% extends "swingtime/swingtime_base.html" %} {% block title %}Scheduled Activities{% endblock %} {% block main_content %}
These Challenges & Trainings have been approved and scheduled for {{con}} |
|
| {%cycle "Challenge" "Training" %} | Who | When | Where |
|---|---|---|---|
| {{forloop.counter}}. {%if a.challenge%} {%elif a.training%}{%endif%} {{a.name}} | {{ a.activity.figurehead_display}} | {{ a.start_time|date:"D M d f a" }} | {%if a.location.abbrv%}{{a.location.abbrv}}{%else%}{{a.location}}{%endif%} |


Verstappen delighted with win: "I had to keep pushing"
by Adam NewtonMax Verstappen says that he was pushed all the way by Lewis Hamilton at the Brazilian Grand Prix as he took a superb win from pole position as carange unfolded behind him in the dying laps.
Verstappen led from the start, but was undercut by Hamilton during the first pit stop after being held up by Robert Kubica in the pitlane, but the Dutchman was able to recover and overtake his Mercedes rival, and he steered clear of all the trouble behind him to cruise home for a third win of the season.
Verstappen told Rubens Barrichello after the race: "Lewis was very quick so I had to keep pushing and all the time.
"He pitted early so we had to be on top of our pitstops we had a good move on him. I could control the race with the tyres I had it was unbelievable it was a lot of fun out there and great to win the race."
"I was behind so I was pushing flat out on my out lap I was close into the DRS and we knew we had great top speed the whole weekend already - but that was a guess - and I'm very happy to have got past."


We want to make technology that's relevant to the actual person.
The tonsorial arts has yet to be recognized and has yet to be truly tapped into by technology. Men do not often have services catered to them– there's services like Glamsquad, Zeel, Task Rabbit, and Wag,
but none of these are relevant to the millennial man, especially college students.
Men in university want a cheap yet quality haircut, it’s a necessity!
Finding a barber you trust wherever you may be is a difficult task that Google searches just can’t do, and Yelp reviews simply aren’t enough.
Our goal is to become the largest grooming services platform –
find a barber in your area, book for now or later, walk straight into the barber’s chair when you need to be there, or have the barber come to you for less than price of two ubers.
We wanted to make something that people really want to use and is accessible for and representative of all ethnicities.
Our aims are not rooted in profit. Our partners pay at most 35 dollars a month for our software, brand development and exposure.
Other companies charge upwards of 100 dollars for their barbershop booking software; We just want all our bros to eat (flex emoji)
Here's what people are saying


This system is an application of Linked Open Data (LOD) on catalog data of Yuzuru Hiraga Digital Archive.
This will support multifaceted access to his collection through digital exhibition and warship ontology.


{% extends "base.html" %} {% block title %}Registration complete{% endblock %} {% block content_header %}Registration complete{% endblock %} {% block main_content %} {% load humanize %}
An activation link has been sent to the email address you supplied, along with instructions for activating your account.
{% endblock %}


Job Description

The candidate will be responsible to deliver configuration for products in the Customer Care, Integrated Order Management and Billing systems. He or she will be responsible for the timeliness, accuracy and quality of the configuration delivered following a full SDLC process where time-to-market is critical.

Responsibilities

- Collaborate with Solution Architects, Business Analysts and other IS teams, and vendor in arriving at recommendations for modeling a product.

- Design, develop and provide technical leadership in the delivery and deployment of product configuration, ensuring timeliness and assured quality.

- Assist in project planning, technical feasibility study, project scoping, solutioning and effort estimation.

- Develop, review and execute test plans, test scenarios and test cases for functional testing (FT).

- Perform impact analysis on reported incidents, deliver fixes (if any) within agreed SLA

- Perform training & maintain the Product Configuration documentation

- To provide guidance to production support teams on the technical perspective of implementation and maintenance of products.

- Lead process improvement initiatives and make appropriate recommendations to enable productivity gains

- Provide progress updates and escalate issues on a timely basis

Qualifications

- Minimum a degree in Computer Science, Computer Engineering, Information Technology or related discipline from a recognized University.

Experience

- Demonstrated technical leadership skills in deploying complex projects

- At least 3 years of hands-on experience of Product Configuration in Siebel 7.x/8.x CRM, Integrated Order management (IOM) and/or BSCS iX Billing systems.

- Experience in Unix Shell script; SQL; PL/SQL; Stored Procedures; Triggers; Oracle 9.x and above is mandatory.

- Weblogic Domain knowledge is an added advantage.

- Must have gone through at least one full SDLC

- Working experience in the Info-communications/Telecommunications industry is preferred.

Skills

- Strong analytical, problem-solving, and conceptual skills for both business and technical issues.

- Possess drive, initiative and commitment to meet the challenges of the rapidly changing environment.

- A good team player showing commitments to team goals

- Able to work independently, manage stress and multi-task in a fast-paced environment to meet tight deadlines.

- Mature, patient, possess great initiative & tenacity in handling difficult situations, able to improvise and find work around solutions whenever obstacles are encountered

- Good communication and documentation skills

| | | | | | | | | | |


Thank you for working on the application. You can log back in at any time to finish your application by revisiting the site: https://eatchallenge-kylew.rhcloud.com/


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object android.gameengine.icadroids.forms.GameForm
public class GameForm
With GameForm you can create (and delete) views on top of the current view. Always create a GameForm inside a triggerAlarm! Else the GameForm will not be shown! When you show a view, the GameView will still be running! You must pause this view by yourself. The layout of the views are made in a android XML layout file. You can use the UI builder from android to make one. Layouts are saved in the /res/layout folder. To receive touch inputs, you must implement the IFormInput interface.
| Constructor Summary | |
|---|---|
GameForm(GameEngine gameEngine)
Make a GameForm without adding a new layout. |
|
GameForm(java.lang.String layoutName,
IFormInput IformInput,
GameEngine gameEngine)
Make a GameForm and show immediately the given Layout |
| Method Summary | |
|---|---|
View |
findViewElementByName(java.lang.String idName)
Get the view of a elementname |
java.lang.String |
getElementName(View viewElement)
Get the ID name of an view element, like a button or textbox. |
java.lang.String |
getTextFromTextfield(java.lang.String textfieldName)
Get text from a textfield. |
void |
removeView(java.lang.String layoutName)
Remove the specified view from the screen. |
void |
sendToast(java.lang.String text,
int duration)
Toast are little grey boxes with text in it that appear a few seconds on the screen. |
void |
showView(java.lang.String layoutName,
IFormInput IformInput)
Add a new view (layout) on the top of the current view. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public GameForm(java.lang.String layoutName, IFormInput IformInput, GameEngine gameEngine)
layoutName
- The layout name given in the res/layout folder. Give the
name without .XML extension! . So if your layout is
called 'main.xml', this parameter should be "main" .IformInput
- The IFormInput object that will receive touch inputs of this
layoutgameEngine
- The GameEngine which this game is currently running on.public GameForm(GameEngine gameEngine)
gameEngine
- The GameEngine which the game is currently running on| Method Detail |
|---|
public void showView(java.lang.String layoutName, IFormInput IformInput)
layoutName
- The layout name given in the res/layout folder. Give the
name without .XML extension! . So if your layout is
called 'main.xml', this parameter should be "main" .IformInput
- The IFormInput object that will receive touch inputs of this
layoutpublic java.lang.String getElementName(View viewElement)
viewElement
-
public void sendToast(java.lang.String text, int duration)
text
- The text that will be visible in the toastduration
- The duration of the toast in secondspublic java.lang.String getTextFromTextfield(java.lang.String textfieldName)
textfieldName
- The android:id name of the textfield specified in your android
layout xml file
public void removeView(java.lang.String layoutName)
layoutName
- The layout name given in the res/layout folder. Give the
name without .XML extension! . So if your layout is
called 'main.xml', this parameter should be "main" .public View findViewElementByName(java.lang.String idName)
idName
- the id name of the view
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Our Offices
There are two offices for your convenince. The main office is in downtown Seattle or we will meet with you at the Everett office by appointment.
Driving Directions:
-
Seattle Office 1915 Pacific Building, 720 Third Avenue
- From I-5 Southbound take the James St. exit. Turn right on Columbia. Go 2 1/2 blocks downhill and look on your left for the Pacific Building Parking. Turn left into the garage.
- From I-5 Northbound take the James St. exit. Turn left on James.  Turn right on 4th Avenue. Go 2 blocks. Turn left on Columbia. GO 1/2 block and look on your left for the Pacific Building Parking. Turn left into the garage.
-
Everett Office 3325 Wetmore Ave
- From I-5 Northbound or Southbound take the exit at Pacific Avenue. Go uphill towards courthouse. Just past courthouse, turn left on Wetmore Avenue. Go South on Wetmore 2 blocks and look for the address on your left.


---
layout: page
title: Research
permalink: /research
published: true
images:
---
Research Areas: Cyber-Physical Systems, Formal Methods, Verification
My research involves modelling Cyber-Physical Systems and programs to verify safety properties. I also work on constructing Finite Abstractions of large state spaces, studying learning by agents in typical partially observable environments
- K. Pavan Kumar Reddy, K. Lakhan Shiva, K. Abhilash, Y. Yoganandam, "Database Assisted Automatic Modulation Classification Using Sequential Minimal Optimization", at the 18th International Symposium on Wireless Personal Multimedia Communications (WPMC), December 2015
[PDF]
- Lakhan Shiva Kamireddy, Dharmik Thakkar, Lakhan Saiteja K, "PlayNPort: A Portable Wireless Music Player and Text Reader System", at the 37th IEEE International Conference on Consumer Electronics (ICCE), January 2019
[PDF]
- Lakhan Shiva Kamireddy, Lakhan Saiteja K, "UVM Based Reusable Verification IP for Wishbone Compliant SPI Master Core", In the proc. of International Journal of VLSI Design and Communication Systems, October 2018
[PDF]
List of my publications can be found on Google Scholar
Conferences
- International Conference on Consumer Electronics, Las Vegas, NV, 2019 (Presented slides on this link)
- Internet of Things Summer School, Georgia Tech, Atlanta, 2018
- GNU Radio Conference, University of Colorado, Boulder, 2017
- 18th International Symposium on Wireless Personal Multimedia Communications (WPMC), HICC, Hyderabad, 2015
Selected Projects
Professional Society Memberships
- ACM
- IEEE Control Systems Society
- IEEE Intelligent Transportation Systems Society
Resources
There are some very good resources on the internet to take a look at!


Projects
I participate in many software projects, that are of value from a research point of view, as well as open source communities and companies.
DBXTalk
DBXTalk is the relational database suite for the Pharo language. It provides you with database drivers for the mainstream relational database engines, an ORM and some other utilities like polymorphic query a database schema or some scaffolding tools.
Ozono
Ozono is simplified development environment built on top of Pharo to teach OOP. Its core idea is to focus on the main ideas behind the object paradigm: object, message and polymorphism. As a consequence, other ideas such as the way to organize the behavior of objects (e.g. with classes or traits or mixins) is delayed and treated as a secondary concept.
The current implementation has its UI in spanish. There are some ongoing efforts to provide translations to english and french.
Espell Object Spaces
Espell is the main software contribution from my phd. Espell object spaces allow the complete manipulation of an object runtime from another object runtime: debugging, browsing, object graph analysis, etc. My implementation is based on Pharo and contains two main elements:
- Oz Virtual Machine. is a Pharo Stack virtual machine with support for handling several worlds at the same time.
- Espell Language side Packages. are the packages that at the language level allow the manipulation of other object runtimes.
Using Espell, I developed many experimental utilities:
- Oz recovery tools. The Oz image loader and Oz emergency kernel help in the recovery of a broken or unstable Pharo image.
- Oz development tools. Debugging, browsing and inspecting another object runtime.
- Hazelnut. Bootstrapping a reflective object kernel. Hazelnut bootstrap takes as input the source code defining the new object kernel and outputs an object graph defining the new runtime. The bootstrapped object runtime is aimed so far to run on the Pharo Virtual Machine.
- Tornado. Tornado is a tool to extract used classes from an application to prepare it for deployment. From a set of selected classes and a couple of expressions that run your application, it dinamically selects the elements your application needs at the end. Our extraction algorithm (Run-Fail-Grow) works, in contrast with other extraction techniques, in dinamically-typed languages, and under the use of reflection.


Some entities with missing ; should be recognized but not all. FF and IE behave differently! link 1 link 2


Hi, I am Rohit jain currently final year undergradutate at JIIT with Computer Science and Engineering as major.
I have a huge interest in creating web applications with managing all the aspects of it i.e. the frontend(Angular, React), backend(Flask-Rest-API), database(MongoDB, using ORM over SQL, graphql), hosting (gh-pages, aws amplify, Heroku) and managing domain (creating A record for a subdomain). Also, I have experience in creating Flutter applications using firebase as a backend service.
Further, I am experienced in using Docker and Docker-compose for packaging an application along with the Continuous Integration and Continuous Development of the application. In a recent project, I’ve also used AWS, making me familiar with the microservices and how to use it to scale an application.
I have interest in finance and love reading about it. I also created a trading bot for cryptocurrency and options strategy generator.
Checkout my projects @ Github
Skills:
- Language : Java, Python, Javascript, Arduino, Dart
- Databases : MySQL, MongoDB, GraphQL
- Frontend : Angular, React, Jekyll, Flutter
- Backend : Flask, Firebase
- CI/CD : Travis CI, Heroku
- Devops : Docker, Docker-compose
Projects:
-
Crypto Trading Bot:
A trading bot based on Bollinger band strategy to generate buy/sell signals. Currently the project uses Binance apiV3 to fetch live data.
-
Recipe-App
Web application for adding new recipe and search for recipes online. Flask and MongoDB for the RESTful API and Angular for the frontend.
-
Frontend Editor
Simple HTML, CSS, jQuery based web developement environment for designers and developers to design page with live preview and download their webpage.
-
dev-portfolio-blog
Jekyll based theme used to host blogs, profile and Resume. Simple and optimized minimal theme for users. For example the website you are currently using.
-
Clock App
React Native based clock app. This is simple clock component where the user can change the font, color, timezone and the format.
Experience
-
IOV
IOV has developed and provides a universal Name Service for blockchains. It provides starnames which acts as a DNS for crypto wallets.
Software Engineer Intern:
Currently working on a React Native based application.
August 2020 - Present
-
Fuzzy Sense Pvt. ltd.
Software Engineer Intern:
Worked on an open source [option strategy generator](https://github.com/rohitjain00/option-trading-strategy).
May 2020 -Jan 2020
-
Creesync Software
Front end Intern:
Worked on creating optimized web templates.
Jul 2018 -Jan 2019


This chapter describes the commands used to draw things on a display. the Graphics Environment chapter, explains how to set up the display necessary to use these commands.
You must have read the previous chapter; in particular, you should be familiar with GStates. To use certain commands, you should also be familiar with the GEOS fixed point number formats.
1 Drawing Goals
2 Shapes
2.1 Dots
2.2 Lines
2.3 Rectangles
2.4 Ellipses
2.5 Elliptical Arcs
2.6 Three-Point Arcs
2.7 Rounded Rectangles
2.8 Polylines and Polygons
2.9 Bézier Curves and Splines
2.10 Drawing Bitmaps
2.11 Paths
2.12 Regions
2.13 Text
3 Shape Attributes
3.1 Color
3.2 Patterns and Hatching
3.3 Mix Mode
3.4 Masks
3.5 Line-Specific Attributes


Mastu iela 4 Ziemeļu rajons Rīga, LV-1045, Latvia
To support youth with their personal development,
food and necessary equipment.


--- layout: post title: MySQL table corruption tags: [] status: publish type: post published: true meta: {} --- A slight case of panic this morning, The table that provides the content for this site, somehow got corrupted. Thankfully a back up was on hand if the worst came to the worst, but before dropping, re-creating and re-populating I decided to see if there was an easier way to fix up the following error message: [code]SQL desc `tableName` failed : Can't open file: 'tableName.MYD'. (errno: 145)[/code] A little googling told me that the table was corrupt and as a result I should attempt to repair it. So I ssh'd in to my server and from the console logged into mysql: [code]mysql -u dbUserName -p dbName;[/code] Then simply ran the following instruction: [code]repair table tableName;[/code] And hey presto the table was fixed again and the site was up and running! Panic over! Here are some background info links:


A property sheet provides a way to change the following settings.
(you can also right click on the property sheet itself to get help)
| Preferences/General: | |
|---|---|
| Snap to windows at x pixels | Adjusts how close two windows must be before they snap |
| Snap to desktop at x pixels | Adjusts how close a window must be to the edge of the screen before it snaps.
also used for the center snap items described below |
| Toggle key | Selects key to temporarily disable window snapping |
| Preferences/Snap to: Chooses which windows to snap to: | |
|---|---|
| Desktop | Snap to the edges of the screen(s). |
| Other Windows | Snap to all other windows. |
| Old Position | Snap to a window's old position. makes more sense when 'Display Properties/Effects/show contents while dragging' is turned off |
| Vertical center | Snap to the vertical center of the screen(s). |
| Horizontal center | Snap to the horizontal center of the screen(s). |
| Sounds: Allows you to add sound effects to the snapping. | |
|---|---|
| Snap sound file | .wav file that is played when a window snaps. |
| Unsnap sound file | .wav file that is played when a window un-snaps. |
| Play Sounds | Turn on/off sound effects. sounds may become annoying so they are turned off by default |
| Advanced: | |
|---|---|
| Desktop icons 'Align to Grid' | Automatically line up desktop icons after moving them as in XP. (not needed in XP) |
| Snap MDI windows | Makes other applications' MDI windows snap. MDI windows are document windows that are contained within an application's main window. |
| Don't snap to inside edges | Diables windows from snapping to the inside edges of other windows. e.g. snapping the top of one window to the top of another window |
| Invert toggle key | Inverts the toggle key function. When selected, windows will not snap unless the toggle key is held down. |
| Hide icon | Hides the system tray icon. To show the icon again re-run allSnap.exe. |
| Crop top of windows by x pixels | Using allSnap with certain XP styles (e.g. Watercolor) will leave a thin space
at the top of the windows. This option fixes this by making allSnap think all
windows are x pixels shorter. This fix is not smart enough to detect which windows are using the problem style, so it is bound to make certain custom-skinned apps snap incorrectly. |
| Constrain windows to the screen | Prevents windows from moving off the sides of the screen. |
| Ignore window clipping regions | Some applications set a visible clipping region of a window. This option ignores this setting and snaps to the actual hidden widow size. |


Name
Email
Roles {{role}}
Author: can create and edit its own views; Editor: can synchronize, create and edit any content, layer and view; Admin: can download usage reports and manage users.
Password
Your user password
New password
Repeat new password


{% extends "shop/checkout/base_confirm.html" %} {% load i18n %} {% load satchmo_currency %} {# this is the credit-card confirm template #} {% block errorheader %}{% trans "The following error was returned while trying to process your card. Please correct and resubmit" %}{% endblock %} {% block navbar %}


{% extends "layout.html" %} {% block head %} {% endblock head %} {% block content %}
Flappy Bird was an extremely popular mobile game from many years back. With simple gameplay, players would become very competitive with the people around them, and soon, the game rose in popularity. Eventually, the creator grew tire of the fame, and decided to remove it to the application from stores.
The main objective of the game is to avoid hitting the pipes that come from the top and bottom of the screen with the bird, the player's character. Using Machince Learning, an algorithm was used to allow the bird to traverse the pipes without dying. To achieve this, many trials and errors had to take place for the computer could get use to the game environment.
{% endblock content %}


Storage Policies¶
Storage Policies allow for some level of segmenting the cluster for various purposes through the creation of multiple object rings. The Storage Policies feature is implemented throughout the entire code base so it is an important concept in understanding Swift architecture.
As described in The Rings, Swift uses modified hashing rings to determine where data should reside in the cluster. There is a separate ring for account databases, container databases, and there is also one object ring per storage policy. Each object ring behaves exactly the same way and is maintained in the same manner, but with policies, different devices can belong to different rings. By supporting multiple object rings, Swift allows the application and/or deployer to essentially segregate the object storage within a single cluster. There are many reasons why this might be desirable:
- Different levels of durability: If a provider wants to offer, for example, 2x replication and 3x replication but doesn’t want to maintain 2 separate clusters, they would setup a 2x and a 3x replication policy and assign the nodes to their respective rings. Furthermore, if a provider wanted to offer a cold storage tier, they could create an erasure coded policy.
- Performance: Just as SSDs can be used as the exclusive members of an account or database ring, an SSD-only object ring can be created as well and used to implement a low-latency/high performance policy.
- Collecting nodes into group: Different object rings may have different physical servers so that objects in specific storage policies are always placed in a particular data center or geography.
- Different Storage implementations: Another example would be to collect together a set of nodes that use a different Diskfile (e.g., Kinetic, GlusterFS) and use a policy to direct traffic just to those nodes.
Note
Today, Swift supports two different policy types: Replication and Erasure Code. See Erasure Code Support for details.
Also note that Diskfile refers to backend object storage plug-in architecture. See Pluggable On-Disk Back-end APIs for details.
Containers and Policies¶
Policies are implemented at the container level. There are many advantages to this approach, not the least of which is how easy it makes life on applications that want to take advantage of them. It also ensures that Storage Policies remain a core feature of Swift independent of the auth implementation. Policies were not implemented at the account/auth layer because it would require changes to all auth systems in use by Swift deployers. Each container has a new special immutable metadata element called the storage policy index. Note that internally, Swift relies on policy indexes and not policy names. Policy names exist for human readability and translation is managed in the proxy. When a container is created, one new optional header is supported to specify the policy name. If no name is specified, the default policy is used (and if no other policies defined, Policy-0 is considered the default). We will be covering the difference between default and Policy-0 in the next section.
Policies are assigned when a container is created. Once a container has been assigned a policy, it cannot be changed (unless it is deleted/recreated). The implications on data placement/movement for large datasets would make this a task best left for applications to perform. Therefore, if a container has an existing policy of, for example 3x replication, and one wanted to migrate that data to an Erasure Code policy, the application would create another container specifying the other policy parameters and then simply move the data from one container to the other. Policies apply on a per container basis allowing for minimal application awareness; once a container has been created with a specific policy, all objects stored in it will be done so in accordance with that policy. If a container with a specific name is deleted (requires the container be empty) a new container may be created with the same name without any restriction on storage policy enforced by the deleted container which previously shared the same name.
Containers have a many-to-one relationship with policies meaning that any number of containers can share one policy. There is no limit to how many containers can use a specific policy.
The notion of associating a ring with a container introduces an interesting scenario: What would happen if 2 containers of the same name were created with different Storage Policies on either side of a network outage at the same time? Furthermore, what would happen if objects were placed in those containers, a whole bunch of them, and then later the network outage was restored? Well, without special care it would be a big problem as an application could end up using the wrong ring to try and find an object. Luckily there is a solution for this problem, a daemon known as the Container Reconciler works tirelessly to identify and rectify this potential scenario.
Container Reconciler¶
Because atomicity of container creation cannot be enforced in a distributed eventually consistent system, object writes into the wrong storage policy must be eventually merged into the correct storage policy by an asynchronous daemon. Recovery from object writes during a network partition which resulted in a split brain container created with different storage policies are handled by the swift-container-reconciler daemon.
The container reconciler works off a queue similar to the object-expirer. The queue is populated during container-replication. It is never considered incorrect to enqueue an object to be evaluated by the container-reconciler because if there is nothing wrong with the location of the object the reconciler will simply dequeue it. The container-reconciler queue is an indexed log for the real location of an object for which a discrepancy in the storage policy of the container was discovered.
To determine the correct storage policy of a container, it is necessary to update the status_changed_at field in the container_stat table when a container changes status from deleted to re-created. This transaction log allows the container-replicator to update the correct storage policy both when replicating a container and handling REPLICATE requests.
Because each object write is a separate distributed transaction it is not possible to determine the correctness of the storage policy for each object write with respect to the entire transaction log at a given container database. As such, container databases will always record the object write regardless of the storage policy on a per object row basis. Object byte and count stats are tracked per storage policy in each container and reconciled using normal object row merge semantics.
The object rows are ensured to be fully durable during replication using
the normal container replication. After the container
replicator pushes its object rows to available primary nodes any
misplaced object rows are bulk loaded into containers based off the
object timestamp under the .misplaced_objects
system account. The
rows are initially written to a handoff container on the local node, and
at the end of the replication pass the .misplaced_objects
containers are
replicated to the correct primary nodes.
The container-reconciler processes the .misplaced_objects
containers in
descending order and reaps its containers as the objects represented by
the rows are successfully reconciled. The container-reconciler will
always validate the correct storage policy for enqueued objects using
direct container HEAD requests which are accelerated via caching.
Because failure of individual storage nodes in aggregate is assumed to
be common at scale, the container-reconciler will make forward progress
with a simple quorum majority. During a combination of failures and
rebalances it is possible that a quorum could provide an incomplete
record of the correct storage policy - so an object write may have to be
applied more than once. Because storage nodes and container databases
will not process writes with an X-Timestamp
less than or equal to
their existing record when objects writes are re-applied their timestamp
is slightly incremented. In order for this increment to be applied
transparently to the client a second vector of time has been added to
Swift for internal use. See Timestamp
.
As the reconciler applies object writes to the correct storage policy it
cleans up writes which no longer apply to the incorrect storage policy
and removes the rows from the .misplaced_objects
containers. After all
rows have been successfully processed it sleeps and will periodically
check for newly enqueued rows to be discovered during container
replication.
Default versus ‘Policy-0’¶
Storage Policies is a versatile feature intended to support both new and
pre-existing clusters with the same level of flexibility. For that reason, we
introduce the Policy-0
concept which is not the same as the “default”
policy. As you will see when we begin to configure policies, each policy has
a single name and an arbitrary number of aliases (human friendly,
configurable) as well as an index (or simply policy number). Swift reserves
index 0 to map to the object ring that’s present in all installations
(e.g., /etc/swift/object.ring.gz
). You can name this policy anything you
like, and if no policies are defined it will report itself as Policy-0
,
however you cannot change the index as there must always be a policy with
index 0.
Another important concept is the default policy which can be any policy
in the cluster. The default policy is the policy that is automatically
chosen when a container creation request is sent without a storage
policy being specified. Configuring Policies describes how to set the
default policy. The difference from Policy-0
is subtle but
extremely important. Policy-0
is what is used by Swift when
accessing pre-storage-policy containers which won’t have a policy - in
this case we would not use the default as it might not have the same
policy as legacy containers. When no other policies are defined, Swift
will always choose Policy-0
as the default.
In other words, default means “create using this policy if nothing else is
specified” and Policy-0
means “use the legacy policy if a container doesn’t
have one” which really means use object.ring.gz
for lookups.
Note
With the Storage Policy based code, it’s not possible to create a container that doesn’t have a policy. If nothing is provided, Swift will still select the default and assign it to the container. For containers created before Storage Policies were introduced, the legacy Policy-0 will be used.
Deprecating Policies¶
There will be times when a policy is no longer desired; however simply deleting the policy and associated rings would be problematic for existing data. In order to ensure that resources are not orphaned in the cluster (left on disk but no longer accessible) and to provide proper messaging to applications when a policy needs to be retired, the notion of deprecation is used. Configuring Policies describes how to deprecate a policy.
Swift’s behavior with deprecated policies is as follows:
- The deprecated policy will not appear in /info
- PUT/GET/DELETE/POST/HEAD are still allowed on the pre-existing containers created with a deprecated policy
- Clients will get an ‘‘400 Bad Request’’ error when trying to create a new container using the deprecated policy
- Clients still have access to policy statistics via HEAD on pre-existing containers
Note
A policy cannot be both the default and deprecated. If you deprecate the default policy, you must specify a new default.
You can also use the deprecated feature to rollout new policies. If you
want to test a new storage policy before making it generally available
you could deprecate the policy when you initially roll it the new
configuration and rings to all nodes. Being deprecated will render it
innate and unable to be used. To test it you will need to create a
container with that storage policy; which will require a single proxy
instance (or a set of proxy-servers which are only internally
accessible) that has been one-off configured with the new policy NOT
marked deprecated. Once the container has been created with the new
storage policy any client authorized to use that container will be able
to add and access data stored in that container in the new storage
policy. When satisfied you can roll out a new swift.conf
which does
not mark the policy as deprecated to all nodes.
Configuring Policies¶
Policies are configured in swift.conf
and it is important that the deployer
have a solid understanding of the semantics for configuring policies. Recall
that a policy must have a corresponding ring file, so configuring a policy is a
two-step process. First, edit your /etc/swift/swift.conf
file to add your
new policy and, second, create the corresponding policy object ring file.
See Adding Storage Policies to an Existing SAIO for a step by step guide on adding a policy to the SAIO setup.
Note that each policy has a section starting with [storage-policy:N]
where N
is the policy index. There’s no reason other than readability that these be
sequential but there are a number of rules enforced by Swift when parsing this
file:
- If a policy with index 0 is not declared and no other policies defined, Swift will create one
- The policy index must be a non-negative integer
- If no policy is declared as the default and no other policies are defined, the policy with index 0 is set as the default
- Policy indexes must be unique
- Policy names are required
- Policy names are case insensitive
- Policy names must contain only letters, digits or a dash
- Policy names must be unique
- The policy name ‘Policy-0’ can only be used for the policy with index 0
- Multiple names can be assigned to one policy using aliases. All names must follow the Swift naming rules.
- If any policies are defined, exactly one policy must be declared default
- Deprecated policies cannot be declared the default
- If no
policy_type
is provided,replication
is the default value.
The following is an example of a properly configured swift.conf
file. See
Adding Storage Policies to an Existing SAIO for full instructions on setting up an all-in-one with this
example configuration.:
[swift-hash]
# random unique strings that can never change (DO NOT LOSE)
# Use only printable chars (python -c "import string; print(string.printable)")
swift_hash_path_prefix = changeme
swift_hash_path_suffix = changeme
[storage-policy:0]
name = gold
aliases = yellow, orange
policy_type = replication
default = yes
[storage-policy:1]
name = silver
policy_type = replication
deprecated = yes
Review Default versus ‘Policy-0’ and Deprecating Policies for more
information about the default
and deprecated
options.
There are some other considerations when managing policies:
- Policy names can be changed.
- Aliases are supported and can be added and removed. If the primary name of a policy is removed the next available alias will be adopted as the primary name. A policy must always have at least one name.
- You cannot change the index of a policy once it has been created
- The default policy can be changed at any time, by adding the default directive to the desired policy section
- Any policy may be deprecated by adding the deprecated directive to the desired policy section, but a deprecated policy may not also be declared the default, and you must specify a default - so you must have policy which is not deprecated at all times.
- The option
policy_type
is used to distinguish between different policy types. The default value isreplication
. When defining an EC policy use the valueerasure_coding
.- The EC policy has additional required parameters. See Erasure Code Support for details.
Once swift.conf
is configured for a new policy, a new ring must be created.
The ring tools are not policy name aware so it’s critical that the
correct policy index be used when creating the new policy’s ring file.
Additional object rings are created in the same manner as the legacy ring
except that ‘-N’ is appended after the word object
where N matches the
policy index used in swift.conf
. This naming convention follows the pattern
for per-policy storage node data directories as well. So, to create the ring
for policy 1:
swift-ring-builder object-1.builder create 10 3 1
<and add devices, rebalance using the same naming convention>
Note
The same drives can indeed be used for multiple policies and the details of how that’s managed on disk will be covered in a later section, it’s important to understand the implications of such a configuration before setting one up. Make sure it’s really what you want to do, in many cases it will be, but in others maybe not.
Using Policies¶
Using policies is very simple - a policy is only specified when a container is initially created. There are no other API changes. Creating a container can be done without any special policy information:
curl -v -X PUT -H 'X-Auth-Token: <your auth token>' \
http://<IP_ADDRESS>:8080/v1/AUTH_test/myCont0
Which will result in a container created that is associated with the policy name ‘gold’ assuming we’re using the swift.conf example from above. It would use ‘gold’ because it was specified as the default. Now, when we put an object into this container, it will get placed on nodes that are part of the ring we created for policy ‘gold’.
If we wanted to explicitly state that we wanted policy ‘gold’ the command would simply need to include a new header as shown below:
curl -v -X PUT -H 'X-Auth-Token: <your auth token>' \
-H 'X-Storage-Policy: gold' http://<IP_ADDRESS>:8080/v1/AUTH_test/myCont0
And that’s it! The application does not need to specify the policy name ever again. There are some illegal operations however:
- If an invalid (typo, non-existent) policy is specified: 400 Bad Request
- if you try to change the policy either via PUT or POST: 409 Conflict
If you’d like to see how the storage in the cluster is being used, simply HEAD the account and you’ll see not only the cumulative numbers, as before, but per policy statistics as well. In the example below there’s 3 objects total with two of them in policy ‘gold’ and one in policy ‘silver’:
curl -i -X HEAD -H 'X-Auth-Token: <your auth token>' \
http://<IP_ADDRESS>:8080/v1/AUTH_test
and your results will include (some output removed for readability):
X-Account-Container-Count: 3
X-Account-Object-Count: 3
X-Account-Bytes-Used: 21
X-Storage-Policy-Gold-Object-Count: 2
X-Storage-Policy-Gold-Bytes-Used: 14
X-Storage-Policy-Silver-Object-Count: 1
X-Storage-Policy-Silver-Bytes-Used: 7
Under the Hood¶
Now that we’ve explained a little about what Policies are and how to configure/use them, let’s explore how Storage Policies fit in at the nuts-n-bolts level.
Parsing and Configuring¶
The module, Storage Policy, is responsible for parsing the
swift.conf
file, validating the input, and creating a global collection of
configured policies via class StoragePolicyCollection
. This
collection is made up of policies of class StoragePolicy
. The
collection class includes handy functions for getting to a policy either by
name or by index , getting info about the policies, etc. There’s also one
very important function, get_object_ring()
.
Object rings are members of the StoragePolicy
class and are
actually not instantiated until the load_ring()
method is called. Any caller anywhere in the code base that needs to access
an object ring must use the POLICIES
global singleton to access the
get_object_ring()
function and provide the
policy index which will call load_ring()
if
needed; however, when starting request handling services such as the
Proxy Server rings are proactively loaded to provide moderate
protection against a mis-configuration resulting in a run time error. The
global is instantiated when Swift starts and provides a mechanism to patch
policies for the test code.
Middleware¶
Middleware can take advantage of policies through the POLICIES
global
and by importing get_container_info()
to gain access to the policy index
associated with the container in question. From the index it can then use the
POLICIES
singleton to grab the right ring. For example,
List Endpoints is policy aware using the means just described. Another
example is Recon which will report the md5 sums for all of the rings.
Proxy Server¶
The Proxy Server module’s role in Storage Policies is essentially to make
sure the correct ring is used as its member element. Before policies, the one
object ring would be instantiated when the Application
class was
instantiated and could be overridden by test code via init parameter. With
policies, however, there is no init parameter and the Application
class instead depends on the POLICIES
global singleton to retrieve the
ring which is instantiated the first time it’s needed. So, instead of an object
ring member of the Application
class, there is an accessor function,
get_object_ring()
, that gets the ring from
POLICIES
.
In general, when any module running on the proxy requires an object ring, it
does so via first getting the policy index from the cached container info. The
exception is during container creation where it uses the policy name from the
request header to look up policy index from the POLICIES
global. Once
the proxy has determined the policy index, it can use the
get_object_ring()
method described earlier to gain access to
the correct ring. It then has the responsibility of passing the index
information, not the policy name, on to the back-end servers via the header X
-Backend-Storage-Policy-Index
. Going the other way, the proxy also strips the
index out of headers that go back to clients, and makes sure they only see the
friendly policy names.
On Disk Storage¶
Policies each have their own directories on the back-end servers and are identified by their storage policy indexes. Organizing the back-end directory structures by policy index helps keep track of things and also allows for sharing of disks between policies which may or may not make sense depending on the needs of the provider. More on this later, but for now be aware of the following directory naming convention:
/objects
maps to objects associated with Policy-0/objects-N
maps to storage policy index #N/async_pending
maps to async pending update for Policy-0/async_pending-N
maps to async pending update for storage policy index #N/tmp
maps to the DiskFile temporary directory for Policy-0/tmp-N
maps to the DiskFile temporary directory for policy index #N/quarantined/objects
maps to the quarantine directory for Policy-0/quarantined/objects-N
maps to the quarantine directory for policy index #N
Note that these directory names are actually owned by the specific Diskfile implementation, the names shown above are used by the default Diskfile.
Object Server¶
The Object Server is not involved with selecting the storage policy
placement directly. However, because of how back-end directory structures are
setup for policies, as described earlier, the object server modules do play a
role. When the object server gets a Diskfile
, it passes in the
policy index and leaves the actual directory naming/structure mechanisms to
Diskfile
. By passing in the index, the instance of
Diskfile
being used will assure that data is properly located in the
tree based on its policy.
For the same reason, the Object Updater also is policy aware. As previously described, different policies use different async pending directories so the updater needs to know how to scan them appropriately.
The Object Replicator is policy aware in that, depending on the policy, it may have to do drastically different things, or maybe not. For example, the difference in handling a replication job for 2x versus 3x is trivial; however, the difference in handling replication between 3x and erasure code is most definitely not. In fact, the term ‘replication’ really isn’t appropriate for some policies like erasure code; however, the majority of the framework for collecting and processing jobs is common. Thus, those functions in the replicator are leveraged for all policies and then there is policy specific code required for each policy, added when the policy is defined if needed.
The ssync functionality is policy aware for the same reason. Some of the
other modules may not obviously be affected, but the back-end directory
structure owned by Diskfile
requires the policy index
parameter. Therefore ssync being policy aware really means passing the
policy index along. See ssync_sender
and
ssync_receiver
for more information on ssync.
For Diskfile
itself, being policy aware is all about managing the
back-end structure using the provided policy index. In other words, callers who
get a Diskfile
instance provide a policy index and
Diskfile
‘s job is to keep data separated via this index (however it
chooses) such that policies can share the same media/nodes if desired. The
included implementation of Diskfile
lays out the directory structure
described earlier but that’s owned within Diskfile
; external modules
have no visibility into that detail. A common function is provided to map
various directory names and/or strings based on their policy index. For example
Diskfile
defines get_data_dir()
which builds off of a generic
get_policy_string()
to consistently build policy aware strings for
various usage.
Container Server¶
The Container Server plays a very important role in Storage Policies, it is responsible for handling the assignment of a policy to a container and the prevention of bad things like changing policies or picking the wrong policy to use when nothing is specified (recall earlier discussion on Policy-0 versus default).
The Container Updater is policy aware, however its job is very simple, to pass the policy index along to the Account Server via a request header.
The Container Backend is responsible for both altering existing DB
schema as well as assuring new DBs are created with a schema that supports
storage policies. The “on-demand” migration of container schemas allows Swift
to upgrade without downtime (sqlite’s alter statements are fast regardless of
row count). To support rolling upgrades (and downgrades) the incompatible
schema changes to the container_stat
table are made to a
container_info
table, and the container_stat
table is replaced with a
view that includes an INSTEAD OF UPDATE
trigger which makes it behave like
the old table.
The policy index is stored here for use in reporting information
about the container as well as managing split-brain scenario induced
discrepancies between containers and their storage policies. Furthermore,
during split-brain, containers must be prepared to track object updates from
multiple policies so the object table also includes a
storage_policy_index
column. Per-policy object counts and bytes are
updated in the policy_stat
table using INSERT
and DELETE
triggers
similar to the pre-policy triggers that updated container_stat
directly.
The Container Replicator daemon will pro-actively migrate legacy
schemas as part of its normal consistency checking process when it updates the
reconciler_sync_point
entry in the container_info
table. This ensures
that read heavy containers which do not encounter any writes will still get
migrated to be fully compatible with the post-storage-policy queries without
having to fall back and retry queries with the legacy schema to service
container read requests.
The Container Sync functionality only needs to be policy aware in
that it accesses the object rings. Therefore, it needs to pull the policy index
out of the container information and use it to select the appropriate object
ring from the POLICIES
global.
Account Server¶
The Account Server‘s role in Storage Policies is really limited to
reporting. When a HEAD request is made on an account (see example provided
earlier), the account server is provided with the storage policy index and
builds the object_count
and byte_count
information for the client on a
per policy basis.
The account servers are able to report per-storage-policy object and byte
counts because of some policy specific DB schema changes. A policy specific
table, policy_stat
, maintains information on a per policy basis (one row
per policy) in the same manner in which the account_stat
table does. The
account_stat
table still serves the same purpose and is not replaced by
policy_stat
, it holds the total account stats whereas policy_stat
just
has the break downs. The backend is also responsible for migrating
pre-storage-policy accounts by altering the DB schema and populating the
policy_stat
table for Policy-0 with current account_stat
data at that
point in time.
The per-storage-policy object and byte counts are not updated with each object
PUT and DELETE request, instead container updates to the account server are
performed asynchronously by the swift-container-updater
.
Upgrading and Confirming Functionality¶
Upgrading to a version of Swift that has Storage Policy support is not difficult, in fact, the cluster administrator isn’t required to make any special configuration changes to get going. Swift will automatically begin using the existing object ring as both the default ring and the Policy-0 ring. Adding the declaration of policy 0 is totally optional and in its absence, the name given to the implicit policy 0 will be ‘Policy-0’. Let’s say for testing purposes that you wanted to take an existing cluster that already has lots of data on it and upgrade to Swift with Storage Policies. From there you want to go ahead and create a policy and test a few things out. All you need to do is:
- Upgrade all of your Swift nodes to a policy-aware version of Swift
- Define your policies in
/etc/swift/swift.conf
- Create the corresponding object rings
- Create containers and objects and confirm their placement is as expected
For a specific example that takes you through these steps, please see Adding Storage Policies to an Existing SAIO
Note
If you downgrade from a Storage Policy enabled version of Swift to an older version that doesn’t support policies, you will not be able to access any data stored in policies other than the policy with index 0 but those objects WILL appear in container listings (possibly as duplicates if there was a network partition and un-reconciled objects). It is EXTREMELY important that you perform any necessary integration testing on the upgraded deployment before enabling an additional storage policy to ensure a consistent API experience for your clients. DO NOT downgrade to a version of Swift that does not support storage policies once you expose multiple storage policies.


Israel Arrests Jewish Terrorists As Leftist And Arab Parties Freak Out
03 Dec 2015Today was a good day for Israeli justice as the police finally announced the arrest of several Jewish terrorists who officials say carried out the attack on the Dawabshe family in Duma back in July that killed four month old Ali and his two parents.
However, not everyone in Israel welcomed this news. No, it wasn’t the “right-wing extremist settlers” of the Yesha Council who condemned “the heinous crime,” saying, “The acts committed were immoral and harmed the values of the state of Israel and the settlements.”
Rather the anger came from the Left who are convinced that, despite not having any information yet due to the continuing gag order, clearly Israel is racist since it foften arrests Arab terrorists quickly but it took longer to arrest these Jewish terrorists. Apparently, according to the Left, arresting someone in the middle of a stabbing attack is just as easy as arresting a secret group of people who attacked a house in the middle of the night leaving almost no clues as to who they were or where they came from. They are also forgetting that the police arrested the Jewish terrorists behind the murder of Muhammad Abu Khedir within a matter of days. No matter, according to them Israel is racist against Arabs so they have to force the facts to fit their preconceived worldview.
Did Meretz Chairwoman Zahava Gal-on, who said it was”very bad that it took so long” to make the arrests had access to evidence the Israel Police and Shin Bet did not? If so she should be investigated and if not she should not get in the way of police investigations.
Zouheir Bahloul, the Zionist Union’s token Arab MK from their “minority slot,” apparently thinks that if police can’t make the arrests on the same day, then they shouldn’t even bother since he said the arrests were “too little, too late.” I think we can all be grateful that Bahloul is not in charge of anyone’s security.
But perhaps the most “interesting” response to the arrests came from Join Arab List, Hadash MK Yousef Jabareen.
Rather than thanking the police for their persistent investigation that has finally born fruit, he decided to exploit the deaths of Baby Ali and his parents to make a political message about the “Occupation.” But his description of the “Occupation” is very telling:
the main [thing] responsible for the murder is the occupation that has persisted for nearly 10 decades, under whose auspices crimes like this are committed.
Nearly 10 decades? Israel retook Judea and Samaria nearly 5 decades ago. Israel was reestablished nearly 7 decades ago. But 10 decades ago there was no Israel and no settlements. 10 decades ago there were only Jews living under Ottoman occupation. However, according to Jabareen’s Joint List, the mere presence of Jews is “illegal occupation” and must end. This is all the more shocking given that he is a member of Hadash, the joint Jewish-Arab communist party. If even high ranking Arab members of the party that prides itself on being “the Champion of Jewish-Arab coexistence” conflate even a minor Jewish presence in a Muslim state to be “occupation” then we need to stop being surprised when our peace offers are rejected and our very existence as a Jewish State is denied by others even more extreme.
Moreover, if Israeli Arabs do not agree with the extremism of Jabareen and the rest of the Joint List, it is about time they formed a party that better represents them.


Song of Songs
☰
Song of Songs 1
Song of Songs 2
Song of Songs 3
Song of Songs 4
Song of Songs 5
Song of Songs 6
Song of Songs 7
Song of Songs 8


{{> header }} Sign up to join the club. 🎉 Account activation link is sent to your email. Please activate your account and log in. Log in All fields are required. Email must be valid. Sign up Already have an account? Log in. {{> footer }}


For UC Berkeley's Intro to Prototyping and Fabrication class, I worked on a team to create a Bluetooth controlled vehicle to navigate an obstacle course. Demo Video
In our first iteration, we 3D printed treads to use for the car. It didn't drive very smoothly (on the right side of the car in the picture, the tread slipped off of the wheel).
I painstakingly filed down the tread pieces and inserted sewing pins to connect them together. They broke pretty often and were hard to shape (I bent the end so the pin wouldn't fall off).
I designed and 3D printed a remote and my partner set up the buttons to use for controls.
Proof of concept: we scratched the tread design and went with a rocker-bogie style vehicle. If one side of the car hit a bump, the corresponding legs would follow, but the opposite side would remain on the ground. This made it easier to navigate obstacle courses. Prototypes of our legs in acrylic and matboard are shown.
I designed the legs and chassis. The car needed to be lighter, so I laser cut a triangle design into the sides and cut out acrylic "legs." I also tried to redistribute the weight evenly by velcro-ing the battery packs to the sides, but the basket still rocked a lot and was much too heavy.
We then got rid of the clunky remote and incorporated a Bluetooth feature so the vehicle would be controlled by an app.
We test drove it and the vehicle ended up flipping. The wires tangled because there was nothing stopping the legs from rotating 360 degrees around the pivot point. I then added support for the legs and housing for the wires for the final version.


{# TODO more styling info with cards including images at https://v4-alpha.getbootstrap.com/components/card/ #}
{# TODO - could use ajax / javascript to show download in process after clicking export to excel and stops spinning when done ... can be slow #}


Things I love doing
Home
About
Blog
Kickboxing
Reading positive psychology
Diving into the data science field
Running on the beach
Baking cookies
Traveling the world & through time
(if you don't believe me see DeLorean below)


This is a headline
This is a paragraph
Full featured page with other source
Full featured page with other source
This is more text with true


Bitcoin Is Crashing Again
by Clem ChambersBitcoin is going down. It is in a bear market.That is bad news if you are a short-term holder and good news if you are a long-term acquirer.
I reiterate, all you need to know is which way bitcoin (BTC) is going in the long term to develop a very profitable strategy. Get the direction wrong and you will lose. If you don’t “know” the direction, you are ill advised to play.
I believe the direction is up and significantly up, but for now in the short term it is down.
Now to get a view of how things can pan out it’s best to remove as much noise as possible. The easy way to do this is to use moving averages. The trouble is everyone is doing that, which tends to weaken the usefulness of that tool. Anyway, here is BTC with a 200 moving day average, which is the long-term indicator many watch.
Classically, the current breakdown would be considered bearish. I’m not a fan of moving averages because they change with the current price as it changes, so that leaves a misleading trail. They also tell you after the event that things are bearish. Now the moving average says the market is moving up on average and only gives a sell hugely below the high. In volatile markets this is a chronic problem.
So what I sometimes do is “doctor” the chart manually to de-noise it. The recent sharp rise and fall is pure noise:
Something hit the price then an event (the president of China spoke on blockchain) poked it up. These events are outside of “the trend” so let’s imagine they didn’t happen. Like a soviet political artist, let’s airbrush these inconvenient events from history.
You get this:
Now that’s a pretty clear picture. Bitcoin is tanking towards a capitulation. That bottom looks to be quite near in terms of time but the bottom is hard to call. Here are some ideas:
I think the high and low bounds are unlikely but you can’t really guess or for that matter buy the low because a capitulation, even though it looks important on the chart later, is often an ephemeral moment that only exists for minutes and trades little volume.
To reverse this trend will not take much but to do so will need a catalyst and there is none in sight at the moment. Instead there looks to be a hodlers’ opportunity to get some cheap coins coming up.
–-
Clem Chambers is the CEO of private investors website ADVFN.com and author of Be Rich, The Game in Wall Street and Trading Cryptocurrencies: A Beginner’s Guide.
In November 2018, Chambers won Journalist of the Year in the Business Market Commentary category in the State Street U.K. Institutional Press Awards.


| Class | Description |
|---|---|
| ScenarioBasisCurveBuilder |
ScenarioBasisCurveBuilder implements the construction of the scenario basis curve using the input
instruments and their quotes.
|
| ScenarioCreditCurveBuilder |
ScenarioCreditCurveBuilder implements the construction of the custom Scenario based credit curves.
|
| ScenarioDeterministicVolatilityBuilder |
ScenarioDeterministicVolatilityBuilder implements the construction of the basis spline deterministic
volatility term structure using the input instruments and their quotes.
|
| ScenarioDiscountCurveBuilder |
ScenarioDiscountCurveBuilder implements the the construction of the scenario discount curve using the input
discount curve instruments, and a wide variety of custom builds.
|
| ScenarioForwardCurveBuilder |
ScenarioForwardCurveBuilder implements the the construction of the scenario Forward curve using the input
discount curve instruments, and a wide variety of custom builds.
|
| ScenarioFXCurveBuilder |
ScenarioFXCurveBuilder implements the construction of the scenario FX Curve using the input FX Curve
instruments.
|
| ScenarioGovvieCurveBuilder |
ScenarioGovvieCurveBuilder implements the Construction of the Scenario Govvie Curve using the Input Govvie
Curve Instruments.
|
| ScenarioLocalVolatilityBuilder |
ScenarioLocalVolatilityBuilder implements the construction of the Local Volatility surface using the input
option instruments, their Call Prices, and a wide variety of custom build schemes.
|
| ScenarioMarketSurfaceBuilder |
ScenarioMarketSurfaceBuilder implements the construction of the scenario market Node surface using the
input option instruments, their quotes, and a wide variety of custom builds
|
| ScenarioRepoCurveBuilder |
ScenarioRepoCurveBuilder implements the Construction of the Scenario Repo Curve using the Input
Instruments and their Quotes.
|
| ScenarioTermStructureBuilder |
ScenarioTermStructureBuilder implements the construction of the basis spline term structure using the
input instruments and their quotes.
|


| internal class | TokenMap |
| public int | GetTokenId(const String<uchar>& tokenName) |
| public String<uchar> | GetTokenInfo(int tokenId) |
| public String<uchar> | GetTokenName(int tokenId) |
| public const int | DIV = 4 |
| public const int | END = 0 |
| public const int | FLOAT = 7 |
| public const int | INTEGER = 9 |
| public const int | LPAREN = 5 |
| public const int | MINUS = 2 |
| public const int | MUL = 3 |
| public const int | PLUS = 1 |
| public const int | RATIONAL = 8 |
| public const int | RPAREN = 6 |


PUL GitHub Issues
2020-07-03
#4041 CDL Manifest Permissions
Creator:
Trey Pendragon
Created:
2020-06-30 23:41:26
Status:
Open
(pull request )
Events:
head_ref_force_pushed
by Trey Pendragon at 2020-07-02 22:13:12.
#4052 Rescue ActiveJob::DeserializationError
Creator:
Eliot Jordan
Created:
2020-07-02 23:14:57
Status:
Open
(pull request )
#4037 ActiveStorage::AnalyzeJob raises exception when BrowseEverything or OcrRequest blob is purged
Creator:
Trey Pendragon
Created:
2020-06-30 18:25:06
Status:
Open
Events:
assigned
by Eliot Jordan at 2020-07-02 23:16:16.
#2122 Keep de-identified usage logs for CDL service
Creator:
Kate Lynch
Created:
2020-06-25 15:19:39
Status:
Closed
Comments:
Events:
closed
by Trey Pendragon at 2020-07-02 22:01:09.
#2125 Limit availability of the CDL service to authorized users
Creator:
Kate Lynch
Created:
2020-06-25 15:22:01
Status:
Closed
Comments:
Events:
closed
by Trey Pendragon at 2020-07-02 22:02:03.
#2121 Click-through copyright notice for CDL items
Creator:
Kate Lynch
Created:
2020-06-25 15:18:19
Status:
Closed
Comments:
Events:
closed
by Trey Pendragon at 2020-07-02 22:02:40.
#2119 When the loan period ends, CDL items should stop being accessible
Creator:
Kate Lynch
Created:
2020-06-25 15:16:02
Status:
Closed
Comments:
Events:
closed
by Trey Pendragon at 2020-07-02 22:03:15.
#2117 Allow users to digitally "check out" items through the CDL workflow
Creator:
Kate Lynch
Created:
2020-06-25 15:12:06
Status:
Closed
Comments:
Events:
closed
by Trey Pendragon at 2020-07-02 22:03:46.
#2123 Block browser download of items presented through CDL workflow
Creator:
Kate Lynch
Created:
2020-06-25 15:20:16
Status:
Closed
Comments:
Events:
closed
by Trey Pendragon at 2020-07-02 22:05:26.
#2130 Illad api demo
Creator:
Kevin Reiss
Created:
2020-06-25 21:55:11
Status:
Closed
(pull request )
Events:
closed
by Kevin Reiss at 2020-07-02 22:30:25.
#2112 Allow users to cancel more than one ILLiad transaction at a time
Creator:
Shaun Ellis
Created:
2020-06-18 16:25:55
Status:
Open
Comments:
#2144 Filter the Illiad Items on the account page by Status
Creator:
carolyncole
Created:
2020-07-02 19:11:36
Status:
Open
Comments:
#2146 Request table listing on account pages should be sortable
Creator:
Kevin Reiss
Created:
2020-07-02 22:43:10
Status:
Open
#1616 update maps tls/ssl certificates
Creator:
Francis Kayiwa
Created:
2020-07-03 12:49:16
Status:
Closed
(pull request )
Events:
head_ref_force_pushed
by Francis Kayiwa at 2020-07-03 15:35:04.
closed
by Francis Kayiwa at 2020-07-03 15:38:23.
head_ref_deleted
by Francis Kayiwa at 2020-07-03 15:38:26.
#1617 maps certs expire August 1
Creator:
Francis Kayiwa
Created:
2020-07-03 16:08:33
Status:
Open
Events:
referenced
by Francis Kayiwa at 2020-07-03 16:25:17.
#1618 add maps tls certs
Creator:
Francis Kayiwa
Created:
2020-07-03 16:25:27
Status:
Open
(pull request )
#740 Should the submission use the actual Patron instead of data in the form
Creator:
carolyncole
Created:
2020-07-02 19:27:10
Status:
Open
Comments:
#734 ILLiad Digitization Requests ProcessType should be DocDel
Creator:
Kevin Reiss
Created:
2020-06-26 13:48:28
Status:
Closed
Comments:
Events:
closed
by Kevin Reiss at 2020-07-02 22:31:09.
#735 Populate Location Field in requests submitted to ILLiad
Creator:
Kevin Reiss
Created:
2020-06-26 14:12:14
Status:
Closed
Comments:
Events:
closed
by Kevin Reiss at 2020-07-02 22:32:41.
#733 Revise Confirmation Email to Patron for ILLiad Digitization Requests
Creator:
Kevin Reiss
Created:
2020-06-26 13:46:10
Status:
Open
Comments:
#741 ILLIad Digitization Request confirmation email sending address
Creator:
Kevin Reiss
Created:
2020-07-02 22:37:11
Status:
Open
#742 Add TN to Digitization/ILLiad Confirmation Email
Creator:
Kevin Reiss
Created:
2020-07-02 22:38:26
Status:
Open
Comments:
#743 Move User Notes on Digitization Requests to Special Instructions Field
Creator:
Kevin Reiss
Created:
2020-07-02 22:40:09
Status:
Open
#744 Populate SSN and Number Fields When Creating an ILLIad User
Creator:
Kevin Reiss
Created:
2020-07-02 22:41:17
Status:
Open
Comments:
#745 Implement Direct ILLiad Request Option for Charged Items
Creator:
Kevin Reiss
Created:
2020-07-02 22:47:32
Status:
Open


{% extends "layout.html" %} {% block page_title %} Start page example {% endblock %} {% block content %} Spreadsheet validation errors Make corrections then upload the file again File: HPCDS_November_2017_Claim.xls Back to upload page Claim level validation errors Cell reference Error A3 Date of birth not in range B5 Claim dated in the future B9 Claim dated on a weekend M11 Date of birth looks wrong Q9 Claim dated on a weekend T9 Claim dated on a weekend Z11 Date of birth looks wrong Submission level validation errors Row Error E, F, O, R More than one case in the same court on the same day G, H, P, Q These cases are out of date {% endblock %}
File: HPCDS_November_2017_Claim.xls


About
Grid Dice is built by Wanderling Games.
Visit our site
This WinJS game is being ported to other platforms using
Bluesky.io
Thanks for playing!


JOHN STOA: Plenty of digging to do as we wait for winter to show its hand
With autumn now almost past, colder weather with frost and snow will most likely be arriving very soon.
by John StoaWe still hope for another mild winter, but we have had quite a few lately and word on the street (allotment) is favouring a return to that one-off bad winter like in 2010.
Time will tell, but while we wait there are a few wee jobs we can get on with.
I always set myself a target of trying to get all my winter digging completed by the end of the year, and leaving the surface rough allowing frost to penetrate the ground and break up clods so I get a friable seedbed surface for spring sowing and planting.
There will be compost to spread before digging commences, but you need to have your rotation worked out to make sure the heavy feeders, (peas. beans, onions, pumpkins and courgettes) get the most compost and the root crops don’t get any otherwise forking is likely.
Areas sown down with green manure crops can get dug over last, or if tares or field beans were used they can wait till near end of winter.
These leafy crops will prevent nutrients getting washed away in winter rains, but then once they decay they will release these nutrients for the next crop.
Herbaceous plants that have been growing in a clump for several years are best divided up and the strongest roots with good crowns replanted after adding some compost to the soil.
Late autumn to early winter is a good time for this task.
The dormant season is also the best time to carry out any replacement planting of trees, shrubs, roses and fruit bushes, but choose a day when the soil surface is dry enough to walk on.
With existing trees check any stakes and ties that may need adjusting or removal once the tree is well established.
During winter when snow or frost puts an end to working with the soil, we can always find a pruning task with roses, fruit trees and bushes, grape vines, and figs.
Autumn raspberries get the whole canes removed to ground level, but summer fruiting ones only have the old fruiting canes removed and new canes tied in to the support wires.
If you are on an allotment site, and have a shredding machine it can shred all the pruning so the resultant waste can be put back on the plot as a mulch, put onto paths, or added to the compost heap.
Repairs to fences, paths, gates, sheds and greenhouses can all be tackled when access to the soil is limited, and this is also a good time to give the greenhouse glass a good wash both inside and outside.
However crop harvesting will continue no matter the weather as we all try to be self sufficient over most of the year so the plot will still have plenty, swedes, sprouts, kale, winter cabbage, leeks, Swiss chard, parsnips and maybe even a cauliflower.
I normally have plenty beetroot left in the ground over winter as our recent mild winters have allowed them to remain unharmed, but this year the wet summer has not been to their liking and many roots have just given up.
This year however has been brilliant for leafy plants and I still have plenty of lettuce and spring onions in the ground.
The poor summer has held back ripening of grapes grown outdoors and my two vines of Regent and Rondo just gave up.
All the bunches just shrivelled up long before they had a chance to ripen.
White grape Phoenix was a wee bit better, but Brant on my south facing wall gave me forty pounds of grapes with a specific gravity reading of 1080.
They are now in three demijohns, though I have added a wee bit of sugar for the yeast so I can get my 14% alcohol strength.
It is good to see the garden flowers a bit late but still trying to put on a show.
Fuchsia Mrs Popple is very reliable as it a large drift of the pink Nerines, but geraniums, border pinks, roses and chrysanthemums have all got plenty of flowers still on display.
Wee jobs to do this week
The last of the tomatoes have been picked and the grapes have now been eaten or are now fermenting in several demijohns, so tidy up the greenhouse and use the space to grow a few winter hardy salads or over winter a few geraniums and fuchsia and fig rooted cuttings.
These are not totally hardy so be prepared to put in a heater overnight if frost is forecast. Take the chance to give the glass a clean while the greenhouse is not packed with plants. Keep the fuchsias relatively dry.


Boost productivity
with Dropbox Business
The secure file sharing and storage solution that employees and IT admins trust.
Do more with Dropbox Business
-
Standard
$12.50 / user / month, starting at 3 users2 TB of space for secure storage with easy-to-use sharing and collaboration tools
- 2 TB (2048 GB) of space
- 120 days of file recovery
- 256-bit AES and SSL/TLS encryption
- Smart Sync (Early Access)
- Dropbox Paper admin tools
- Office 365 integration
- Admin console and audit log
- Granular sharing permissions
- User and company-managed groups
- Remote device wipe
- Require two-factor authentication (2FA)
- Unlimited API access to security and productivity platform partners
- 25,000 API calls/month for data transport partners
- Live chat support
-
Advanced
$20 / user / month, starting at 3 usersAs much space as you need with sophisticated admin, audit, and integration features
- Everything in Standard
- As much space as needed
- Advanced admin controls
- Tiered admin roles
- File event tracking
- Advanced user management tools
- Invite enforcement
- Domain verification
- Single sign on (SSO) integration
- Device approvals
- Business hours phone support
- Viewer history
-
Enterprise
Contact usCustomizable solutions with individualized support to help admins manage at scale
- Everything in Advanced
- Account Capture
- Network control
- Enterprise mobility management (EMM) support
- Domain Insights
- Advanced training for end users and admins
- 24/7 phone support
-
- 2 TB (2048 GB) of space
- 120 days of file recovery
- 256-bit AES and SSL/TLS encryption
- Smart Sync (Early Access)
- Dropbox Paper admin tools
- Office 365 integration
- Admin console and audit log
- Granular sharing permissions
- User and company-managed groups
- Remote device wipe
- Require two-factor authentication (2FA)
- Unlimited API access to security and productivity platform partners
- 25,000 API calls/month for data transport partners
- Live chat support
- Everything in Standard
- As much space as needed
- Advanced admin controls
- Tiered admin roles
- File event tracking
- Advanced user management tools
- Invite enforcement
- Domain verification
- Single sign on (SSO) integration
- Device approvals
- Business hours phone support
- Viewer history
- Everything in Advanced
- Account Capture
- Network control
- Enterprise mobility management (EMM) support
- Domain Insights
- Advanced training for end users and admins
- 24/7 phone support
Designed to take teamwork to the next level
-
Space for sharing and collaboration
-
Advanced security features
-
Dedicated live support
Dropbox Business helps your company grow without limits, while you maintain complete control over important company information and user activity.
-
The best way to work together
The Dropbox experience loved by over 500 million users, with powerful collaboration and anytime anywhere access to your files. Learn more
-
Enterprise-ready performance and controls
Keep your company’s data where it belongs with extensive security and administration features. Learn more
-
Dropbox Paper
Effortlessly create, share, and keep your team on the same page — with the added benefit of admin controls to protect your business. Learn more
-
Safe, secure, and reliable
Organizations like Hyatt, News Corp, and National Geographic trust us to meet their security, compliance, and privacy needs. Learn more
Join more than 300,000 teams using Dropbox Business
Learn more about our customers-
-
-
-
“Dropbox Business gives us a secure, unified place to store all of our work, and helps reverse the friction that can come with having hundreds of computers in one company.”
-
-
-
-


Computed Golden Set (sum of true relations)
Parameters: {{ params }}
Using underscore names: {{ use_underscore_names }}
Using bootstrap: {{ use_bootstrap }}
Total golden set size:
{{ total_golden_size }} functions
{{ true_relations }} must relations
{{ false_relations }} must not relations
{{ num_classes }} equivalence classes
F score: {{ f_score }}
Weighted average precision: {{ avg_precision }}
Weighted average recall: {{ avg_recall }}
The clusters are sorted by inverse impact on the F score (worst on top).
{% for g in groups %}
-
Golden cluster:
{% for fn in g.functions %}
{{ fn.name }}
{% endfor %}
Model cluster:
{% for fn in g.cluster %}
{{ fn.name }}
{% endfor %}
Precision(cluster, model): {{ g.precision }}
Recall(cluster, model): {{ g.recall }}
F: {{ g.f }}
Missing:
{% for fn in g.missing %}
{{ fn.name }}
{% endfor %}
Extra:
{% for fn in g.extra%}
{{ fn.name }}
{% endfor %}
{% else %}
- No groups to display.
{% endfor %}
{% endblock %}