Software Engineer - Image Processing and OCR - San Francisco, CA 94104
About Instabase
Founded in 2015, Instabase's mission is to advance the state of the art by building tools that help people solve important problems, make discoveries, and create new breakthroughs.
Instabase is an operating system designed for operational efficiency. It uses the web browser as the user interface, a pluggable storage system for managing data (files and databases), and an app store for applications. These applications run on the Instabase Platform, which provides the core management capabilities for managing diverse, distributed datasets; support for collaboration and access control; and a runtime for Instabase Applications.
The applications include state of the art tools for [1] processing a diverse set of unstructured data (scanned images, PDFs, word/excel documents, emails, websites, etc.), [2] running extensible functions with a server-less framework, [3] machine learning (natural language processing, image processing, classification, clustering, etc.), and [4] data science.
Our customers include large enterprises with huge operational costs in a variety of domains, such as financial services (e.g. banks, insurance), healthcare, logistics/supply chain.
As a non-profit initiative, Instabase provides a hosted IPython-style notebook for education, which is widely used by universities (Stanford, MIT, Columbia, University of Chicago, etc.), for teaching classes. The Stanford Dean of Engineering Jennifer Widom used Instabase as the platform for her 2016-17 Instructional Odyssey, a year-long sabbatical in which she traveled the world offering free short courses in data and design.
Job Description
As a software engineer focused on image processing and OCR, you will be designing and building systems that help Instabase process visual data. Photographs of documents, security camera footage, handwritten notes, artsy advertising materials: these are all rich with information if only we could teach a computer to interpret them.
You'll work in our Machine Intelligence team, a close-knit group of scientists and engineers who incubate new capabilities from whiteboard sketches all the way to finished apps on the Instabase platform. We take a product-centric approach to research & development, working closely with our customers to identify opportunities and putting as much care into product design as raw capability.
High Value Focus Areas
One or more of the following focus areas are particularly valuable for a candidate to have:
OpenCV: experience building image processing applications with OpenCV
OCR: experience building and fine-tuning optical character recognition pipelines
Deep Learning: experience designing neural networks for image processing tasks
Requirements
Proven experience working on computer vision
Deep knowledge of data structures, algorithms, and math
Good dataset creation and maintenance hygiene
Ability to write robust code in Python
Excellent teamwork and communication skills
Instabase is an equal opportunity employer and values diversity in all forms. Instabase does not discriminate on the basis of race, religion, color, national origin, gender identity, sexual orientation, age, marital status, protected veteran status, disability, or any other unlawful factor. Instabase also complies with local laws, including the San Francisco Fair Chance Ordinance.


This is an example Camera Program. Choose one of the menu options to use.
Developed at Clemson University.
The MIT License (MIT)
Copyright (c) 2014 James Burton
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


skip nav(content)
content
1983 : rom Textile Arts Department of College of Arts at Hongik university
1985 : Established MONO collection
1985 ~ 2000 :
Hotel interior Styling
Home - Westein Chosun, Hyatt, Sheraton, Banyan Tree Club & Spa, Lotte, Hilton, Walkerhill, Blue House, Samcheonggak, Kyungbok Palace
Abroad - Hanoi project (Daewoo apartment, hotel, business center), Bulgaria, Morocco
1994 ~ 2000 :
High-end apartment & VVIP model house Soft Furnishing
Samsung Tower Palace, Hyundai Hyperion, Hanhwa Galleria Palace
1995 ~ 2009 :
Collaboration with international interior brand
Pierre Frey (France), Dongia (the U.S.), Sandberg (Sweden), Roche Bobois (France)
1994 : Japantex94, Tokyo, Japan
1994 ~ 2000 : Seoul Living DesignFair, Seoul Korea
1997 ~ 1998 : Mono Collection Fair, Seoul Korea
2000 ~ 2001 : Heimtextile, Frankfurt, Germany
2001 ~ 2008 : Mono Collection Promotion (a private exhibition per year)
2005 : Mori Art Museum, Tokyo, Japan
2008 : Banyan Tree Club & Spa wardrobe, small dining table, and chair by Chang Eung-Bok & Jihoon Ha
2009 : Excitement, penetrates into Bukchon (Seolhwasu)
2010 : Design Made 2010 Exhibition, Old Present (Lotte Avenuel)
1996 : Glasses Case
1997 : Pomegranate
1997 : Sipjangsaeng Jacquard
1998 : Fan
1998 : Pendent Trinket
2001 : Ggotsin (shoes)
2006 : Sansoo Patch
2008 : Colored mother-of-pearl Check
2010 : bok - jumoney (pouch)
skip nav(start)


+++ draft = false date = "2010-02-24T17:54:52-02:00" title = "Generating products outside of the Products.* namespace with ArchGenXML" tags = ["cookbook", "Plone", "ArchGenXML"] created = "2010-02-24T17:33:14-02:00" modified = "2010-02-24T22:38:11-02:00" permaLink = "http://play.pixelblaster.ro/blog/archive/2010/02/24/generating-products-outside-of-the-products-namespace-with-archgenxml" author = "Tiberiu Ichim" aliases = [ "/blog/archive/2010/02/24/generating-products-outside-of-the-products-namespace-with-archgenxml" ] +++
I'm a die hard in regards to ArchGenXML usage. The number of things to know about when creating new content types for Plone is just too high. Package structure, Zope package registration, content types registration, QuickInstaller registration, GenericSetup profiles, skins registration, workflows, etc. I can go in and do changes to the code, and add to it, but generating it from scratch is a gigantic task, especially for my use case, where I need to start a new project with about 7 content types.
Now to the problem: ArchGenXML assumes (and hardcodes in its templates) the Products.* prefix for your package. I don't have any problems with it, but my employer uses a different package structure so for uniformity I need to follow their standards. 15 minutes of poking and changing through agx enabled me to change it so it would generate GS xml files with the proper namespace (based on a new model level TGV named "namespace" that I have created). After assessing the difficulty of the task and being under time pressure, I've decided to go the dumb route, which I'm documenting below:
My generation script is something like this:
./archgenxml -c archgenxml.cfg myproduct.zuml #rename Products.myproduct to ns.myproduct find myproduct/* -type f -print | xargs sed -i 's/Products\.myproduct/ns\.myproduct/g' #in the xml type profiles, replace myproduct by ns.myproduct find myproduct/* -type f -print | xargs sed -i 's/>myproduct</>ns\.myproduct</g' #in the profiles.zcml, rename the profile to ns.myproduct find myproduct/* -type f -print | xargs sed -i 's/title=\"myproduct\"/title=\"ns\.myproduct\"/g'
Notice the sed lines, which change the source code to point to "ns.myproduct" instead of "Products.myproduct". Now there's just two more problems, which are actually AGX bugs:
from Products.CMFCore import utils from Globals import package_home from os.path import dirname ppath = utils.ProductsPath utils.ProductsPath.append(dirname(package_home(product_globals))) DirectoryView.registerDirectory('skins', product_globals) utils.ProductsPath = ppath
That's about it. Hopefully I'll find the time to fix the two bugs and add the namespace improvement in the next week. Still need to do the review for Plone for Education, which I have received for free from the publisher.


The IOTA Weather Node is a Weather Station built with a Raspberry Pi and the add-on board Sense HAT . The Weather Station send and receive data over the new IOTA Protocol
The IOTA Weather Node waiting until a client send a transaction with >0 IOTAs and a message. With the message the client tell the node what is his request and an address on which the node can send his answer. So can be send a command is arrived over the IOTA Protocol. After this he read the Weather info from the Sense HAT and send them back or just show a promotion on his 8x8 LED Matrix.
The weather client can send request to the weather node. He can request the weather or he can send a promotion to the node. Both function costs 1i IOTA.
For additional information and the source code go toWhat you need to run the Rapberry Pi Weather Station?
Required:
- Install the latest IOTA release from : IOTA Node
- Install the latest iota python package iota
- the python package sys, json, urllib2 are also required
- Raspberry Pi
- microSD card with installed Linux as example: Ubuntu MATE 16.04 LTS
- Raspberry Pi Sense HAT
- Sense HAT python package
The installation
If you don't have a Sense HAT you can simulate the Sense HAT. There are two members one is the node (the weather station) and the other is the client how send a request to the node. Both can be installed as a Python package which is very easy to run with a script or you can use the GUI. If you don't have a Sense HAT you also can simulate it with the GUI or the script. Choose here what you wanna do:
How to install the weather node on a Raspberry Pi
Step 1 - Prepare the SD Card for your Raspberry Pi.
First download the Ubuntu Mate image from this source: Ubuntu Mate
Next you can install the image on the microSHDC. You can follow the official Raspberry Pi tutorial for easy installing. Installing Images
Step 2 - Installing Ubuntu on the Raspberry Pi
Insert your micro SD card into your Raspberry Pi and connect him to the power. The Raspberry Pi will boot from the image on the microSHDC. It is very easy to go trough the installation of the Ubuntu Mate. So just follow the steps on the display.
Step 3 - Resize the system to use the full microSHDC
When you are gone succescfully trough the installation, on the first boot there is a Welcome screen. You can use Ubuntu MATE Welcome to resize automatically the partitions to make full use of your microSHDC card capacity. Simply click the large Raspberry Pi Information button on the Welcome screen, click the Resize button and then restart the Raspberry Pi.
You also can do it manually:
sudo fdisk /dev/mmcblk0
Delete the second partition (d, 2), then re-create it using the defaults (n, p, 2, enter, enter), then write and exit (w). Reboot the system, then:
sudo resize2fs /dev/mmcblk0p2
Step 4 - Installing Python and PyPi
First update the package list:
sudo apt-get update && sudo apt-get upgrade
Install Python and PyPi:
$ sudo apt-get install python-pip python-dev build-essential
$ sudo pip install --upgrade pip
$ sudo pip install --upgrade virtualenv
Now you can install the sense HAT:
$ sudo apt-get install sense-hat
$ sudo reboot
Now you can install the iota and weather_iota package for Python:
$ sudo pip install iota
$ sudo pip install weather_iota
Step 5 - Installing IOTA node
Now you have to set up the IOTA Node:
Follow this tutorialStep 6 - Run the weather node
To run the weather node you have to run a script:
Open a new file and copy past this code:
import sys
from weather_iota import weathernode
seed=raw_input("Enter the seed of the IOTA Weather Node? ")
weather=weathernode(seed, temperature="32",humidity="50",pressure="1013", senseHAT=False)
weather.run()
print("End Iota Weather Node!")
And save the file as weather_node.py.
Step 7 - Run weather node
Now go to the directory where you have saved the weather_node.py and run the weather node:
$cd Tools/
$python weather_node.py
How to install the weather client
Step 1 - Installing Python and PyPi
First step you should setup python on your client:
Now install PyPi for python package source:
Step 2 - Install the weather_iota package
Now you should install the two package with pip. You must have administrator rights in the console for that. On ubuntu it looks like this:
$ sudo pip install iota
$ sudo pip install weather_iota
Under Windows you should run cmd.exe as administrator and then:
C:\Users\necropaz> pip install iota
C:\Users\necropaz> pip install weather_iota
Step 3 - Make a Python script
Open a new file an copy past this:
import sys
from weather_iota import weatherclient
address=raw_input("The address of the Weather Node? ")
seed=raw_input("The seed of you Weather Client? ")
char=raw_input("If you will send a weather request tip w, if you wanna send a promotion tip p.? [w/p]? ")
client=weatherclient(seed, address)
if char=='w':
client.requestWeather()
elif char=='p':
message=raw_input("What for a promotion you wanna send? ")
client.sendPromotion(message)
else:
print("Your Input is not [w/p]")
Now save the script as weather_client.py and remember the path where you saved it.
Step 4 - Run the script
Now go to the directory where you have saved the weather_client.py and run the weather node:
$cd Tools/
$python weather_client.py
How to install client with GUI
Step 1 - Prepare the SD Card for your Raspberry Pi.
First download the Ubuntu Mate image from this source: Ubuntu Mate
Next you can install the image on the microSHDC. You can follow the official Raspberry Pi tutorial for easy installing. Installing Images
Step 2 - Installing Ubuntu on the Raspberry Pi
Insert your micro SD card into your Raspberry Pi and connect him to the power. The Raspberry Pi will boot from the image on the microSHDC. It is very easy to go trough the installation of the Ubuntu Mate. So just follow the steps on the display.
How to simulate the weather node
Step 1 - Installing Python and PyPi
First step you should install python on your device:
Now install PyPi for python package source:
Step 2 - Install the weather_iota package
Now you should install the two package with pip. You must have administrator rights in the console for that. On ubuntu it looks like this:
$ sudo pip install iota
$ sudo pip install weather_iota
Under Windows you should run cmd.exe as administrator and then:
C:\Users\necropaz> pip install iota
C:\Users\necropaz> pip install weather_iota
Step 3 - Make a Python script
Open a new file an copy past this:
import sys
from weather_iota import weathernode
seed=raw_input("Enter the seed of the IOTA Weather Node? ")
weather=weathernode(seed, temperature="32",humidity="50",pressure="1013", senseHAT=False)
weather.run()
print("End Iota Weather Node!")
Now save the script as weather_node_sim.py and remember the path where you saved it.
Step 4 - Run the script
Now go to the directory where you have saved the weather_node_sim.py and run the weather node:
$cd Tools/
$python weather_node_sim.py


You're more prepared than you think.
Whether you're just starting out or a preparedness pro, gathering your emergency supplies is easy. A good rule of thumb is to have supplies for about 3 days, or 72 hours. You'll be surprised at how much you already have.
-
In addition to the standard supplies, certain things will help you—and only you—manage during an emergency. Set aside a few items that will give you and your family extra comfort.
-
Everyone enjoys a drink of water. Stay hydrated by gathering one gallon per person, per day.
Water
-
You might need to be able to patch up small scrapes until help arrives. Channel your inner Scout and keep a first aid kit on hand.
First aid kit
-
While candles are great for ambience, a good torch is invaluable for navigating if power is out. Simply put: it buys you freedom.
Wind up torch
-
You didn't start the fire. But you can help extinguish it.
Fire extinguisher
-
Just like when camping, in an emergency an old fashioned can opener is just the ticket. Impress your friends with your canned culinary choices.
Manual can opener
-
Next time you're at the shops, add extra long life foods (that you like to eat!) to your basket. We recommend 3 days of food per person.
Non-perishable food
-
-
These items represent things that many people want in an emergency—but don't always think of. Stash them away, and you'll get through the first 72 hours more easily.
-
You never know when an emergency might happen—or what you might (or might not) be wearing. Be ready for the elements by setting aside warm clothes and walking shoes.
Warm clothes and sturdy shoes
-
Feeling safe starts with knowing what's going on—so tune into the radio for live updates—and your favorite radio station to pass the time.
Radio (battery operated or hand crank)
-
In an emergency, credit cards might not work, and cash becomes important. Protect your purchasing power by stashing some cash.
Cash
-
Keeping warm is crucial. Blankets and sleeping bags will help you stay snug, even when snowed in—or if the power goes out.
Sleeping bag or blankets
-
A battery operated phone charger, or one that plugs into your car, will help you stay informed, take photos, and communicate in an emergency.
Phone charger (battery operated or car plug-in)
-
A basic toolkit with items like a hammer and duct tape will help you turn off the gas, repair broken windows, or board up your home.
Tools
-
Pencil and paper. Useful if all your gadgets are flat and you need to remember something.
Paper and pencil
-
A handy emergency toolkit and a way to attract attention if you get stuck.
Penknife and whistle
-
Keep a spare set of keys handy.
Spare car and house keys
-
-
In addition to the standard supplies, certain things will help you—and only you—manage during an emergency. Set aside a few items that will give you and your family extra comfort.
-
Plan for your personal health. Keep a 3-day dose of any medicine you take on a regular basis, in case the pharmacy is closed. Remember your contact lenses and glasses.
Prescriptions
-
What non-perishable comfort food would lift your spirits? A supply of chocolate, dried fruit, or nuts with your emergency supplies might make you smile, and help you make friends.

Toiletries
-
Upload copies of your driver's license, passport, insurance documents and contact list to the cloud. Protect your assets, by going digital. Or make photocopies and keep in a plastic bag.
Personal documents
-
What unique items would make your family feel better in an emergency? Favorite games? Special toys? Little things can make a big difference.
Children's toys and games
-
Don't forget to store dog food, toys, or extra water for your pets.
Pet items
-
Come together.
Emergencies are opportunities to come together and support those around you. Sharing a meal, book, or phone charger are even more meaningful in the days after an emergency than before. What items would you share with friends and neighbors?
- BBQ
- Wine
- Board games


{% extends "play/layout_user.html" %} {% block content %} Filters You can easily add any filter you want, once a filter is clicked the images will reorganize gracefully. See the example. All Category 1 Category 2 Category 3 Photo title Photo title Photo title Photo title Photo title Photo title Photo title Photo title Photo title Photo title Photo title {% endblock %}
You can easily add any filter you want, once a filter is clicked the images will reorganize gracefully. See the example.
Photo title


entistry is a branch of medicine that consists of the study, diagnosis, prevention, and treatment of diseases, disorders and conditions of the oral cavity, commonly in the dentition but also the oral mucosa, and of adjacent and related structures and tissues, particularly in the maxillofacial (jaw and facial) area.[2] Although primarily associated with teeth among the general public, the field of dentistry or dental medicine is not limited to teeth but includes other aspects of the craniofacial complex including the temperomandibular and other supporting structures.
Dentistry is often also understood to subsume the now largely defunct medical specialty of stomatology (the study of the mouth and its disorders and diseases) for which reason the two terms are used interchangeably in certain regions.
Dental treatments are carried out by a dental team, which often consists of a dentist and dental auxiliaries (dental assistants, dental hygienists, dental technicians, as well as dental therapists). Most dentists either work in private practices (primary care), dental hospitals or (secondary care) institutions (prisons, armed forces bases, etc.).


Links
If you’re listed here - I’m just likin' your stuff.
bdunagan.com
jenmyers.net
martinwolf.org
nicoledominguez.com
Mars, front-end developer
If you’re listed here - I’m just likin' your stuff.
bdunagan.com
jenmyers.net
martinwolf.org
nicoledominguez.com


Dotted Line
Browsers below IE11 are not supported
@@include('./src/components/_global/include-header.html')
@@include('./src/components/_global/include-loader.html') @@include('./src/components/_global/include-toggle-trigger.html')Browsers below IE11 are not supported


Prostate Cancer: Brachytherapy’s Fight for Survival
Brachytherapy has a robust track record as a treatment for prostate cancer. The technique involves positioning radioactive materials inside the prostate to kill the tumor.
But this treatment seems to be going out of fashion, in favor of more modern, more expensive alternatives. Since evidence suggests that brachytherapy is cost-effective for some patients, many oncologists are keen to make sure it remains an option.


We are at a critical point. There is a public health emergency from air pollution and a global climate crisis. In today’s world, the Climate and Clean Air Coalition is more needed than ever. Our vision is an atmosphere that enables people and the planet to thrive – a stabilized climate with warming limited to 1.5ºC and drastically reduced air pollution. In the next decade we will work to put the world on a pathway that rapidly reduces warming in the near-term and maximizes development health, environmental and food security benefits.

They also significantly impact food, water and economic security for large populations throughout the
world, both directly through their negative effects on public health, agriculture and ecosystems, and
indirectly through their impact on the climate.
Click To Learn More
It is the deadliest form of pollution, killing millions of people each year, according to a new
study. The Cost of Air Pollution, a joint report by the World Bank and the Institute for Health Metrics
and Evaluation (IHME), also highlights the economic toll, showing that premature deaths linked to air
pollution cost the global economy hundreds of billions of dollars in lost labour income. 92%
More than nine out of 10 of the world’s population.
Click To Learn More
Agency for Toxic Substances and Disease Registry (ATSDR) Brownfield/Land Reuse Initiative. ATSDR Dose
Calculator.
The ATSDR Dose Calculator is a computer program that allows users to computer the amount of a toxic
substance an individual may be exposed to (dose). Users of this tool can select from air, soil, water,
or fish consumption scenarios; customize exposure parameters; and review ATSDR and EPA health comparison
values, among other features.
Click
To Learn More
Try searching "Paradise Parrot"


{{name.length<5?" Enter atleast 5 characters for event name":" Please select best category for your event."}}
This is the name that every one will see.
Small description of this event.
Select the best filter.
Please provide the venue name (at least 5 character)
Pick/Show current location


--- layout: post date: 2011-01-27 time: "10:00:00" authors: ["Greg Wilson"] title: Notes Toward a Lecture on High-Performance Computing tags: ["Content"] ---
As I've said several times now, we're going to add a lecture on high-performance computing to the course. We have rough outlines of the content in the version control repository, and feedback would be very welcome.


Before Change
// We computed a value: see whether we can use it.
literal_value = self._select_literal(dep_state.value, variant_value)
if literal_value is not None:
return Return(literal_value)
if has_waiting_dep:
return Waiting(dependencies)
return Throw("No source of {}.".format(self))
After Change
// TODO: Multiple successful tasks are not currently supported. We should allow for this
// by adding support for "mergeable" products. see:
// https://github.com/pantsbuild/pants/issues/2526
return Throw(ConflictingProducersError(self.subject, self.product, matches))
elif len(matches) == 1:
return Return(matches.values()[0])
return Noop("No source of {}.".format(self))


How to create your own Agriculture application?
SQL fashioned API for intuitive queries to process and get data - ex. get NDVI by polygon
http://sat.owm.io/sql?from=s2&select=b8,b4&where=day=2016-07-10&op=ndvi&polygon={%22type%22:%22Feature%22,%22geometry%22:{%22type%22:%22Polygon%22,%22coordinates%22:[[[-102.73,34.43],[-102.73,34.49],[-102.57,34.49],[-102.57,34.43],[-102.73,34.43]]]}}&APPID={APIKEY}
Near-infrared and red spectral bands are used to calculate and monitor health vegetation growth. NDVI is strongly important for agriculture and Farm management applications.
Use op=NDVI
to apply operation to any two of spectral bands.
NDVI Base Map (API)
http://sat.owm.io/sql/{z}/{x}/{y}?select=b8,b4&from=s2&op=ndvi&order=last&APPID={APIKEY}
History weather (API)
http://history.openweathermap.org/data/2.5/history/city?lat={lat}&lon={lon}&type=hour&start={start}&end={end}&APPID={APIKEY}
Developers can also calculate vegetation using Python
#Connect VANE lib
from vane import sql
# Define polygon
polygon = '{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-101.85,36.04],[-101.85,36.15],[-101.64,36.15],[-101.64,36.04],[-101.85,36.04]]]}}'
# Define date
day = '2016-07-18'
# Read the first band data
x = sql.raw( select="b5", where="day:"+ day, polygon=polygon)
# Read the second band data
y = sql.raw( select="b4", where="day:"+ day, polygon=polygon)
# NDVI computing
ndvi = (x-y)/(x+y)
Learn more about VANE language
Cases of OpenWeather products in agricultural applications
|
Current weather, short-term and long-term forecast for area of interest (AOI) Current weather and forecast calculated for specific crop for planning of agricultural activity depends on meteorological conditions. Fundamental weather parameters are provided via APIs or maps (precipitations, humidity, air pressure, temperature, wind, clouds, snow). Additional parameters like dew point can be calculated based on fundamental parameters and their deviation during a day |
|
Historical weather for season dynamic A set of historical data allows you to calculate the accumulated indicators for a season (the sum of the active temperatures and the amount of accumulated precipitation), which have a direct impact on the growth of culture. Historical weather data for 5 years allow you to analyse and compare the results with satellite images, the vegetation index, and actual indicators. Calculation of accumulated indicators for the specified period (temperature and precipitation) is based on monitoring of main indicators (temperature, humidity, precipitation) |
Learn more from cases of our subscribers, including Google. |
|
Monitoring of crop variable rates with satellite imagery Operational and historical satellite images with different resolution allow assessing of the homogeneity of the cultivated areas. NDVI, EVI and other agricultural indices with unlimited customization of color schemes. |
|


I love simple reusable code.
I have used the repository pattern extensively as a way to achieve reuse and cluster my query logic into a single place. This is great as it means my queries can be reused and I know where to go to fix a database problem. However over the years I have encountered a number of problems with repositories.
Five issues with traditional repositories
The super generic method
In order to gain reuse on a repository method it takes a whole heap of parameters so that it fits all the places and specific scenarios which might use this repository.
eg:
public IEnumerable<Person> FindPeople(
string name = null,
int? olderThan = null,
bool includeAddress = false,
int? page = null,
int? pageSize = null)
This kind of method is usable in a lot of places which is great, but it lends itself to increasingly complex implementations which are hard to test.
The illusion of reuse
Visual studio 2015 has an awesome improvement, it lists out the number of places each method is used. But do all your repository methods look like this with only one consumer?
Sadly while we have built this method to be reusable in reality there is only one place in our application where we need a paged list of people. In fact almost all of our repository methods are specific enough that we only use them in one place.
The where do I put it problem
Say you want to find all of the people which live in a specific region. Where do you put this? Does it belong in a repository that deals with people? Or one that deals with addresses? Do we need a new repository entirely to deal with this new region based concern? Is it OK to return a list of people from a region repository?
Ever struggled with this kind of thing? Naming is a hard programming art form.
The close enough overfetch
Say you have a repository which will give you a list of people. People have addresses and when you list out all of the people in your neighborhood you want to see all of the addresses of the people. So you join onto the address table and populate an address property on each of your people. But sadly you have also performed this unused join for every other consumer of the method. This causes an overfetch problem where you are returning more data than you need and wasting resources. Most of the time this problem doesn’t amount to enough extra load to bother solving but its still there.
The reuse by underfetch
We have two repository methods, one which gets a list of people and another which gets an address for a person. To get reuse in our code we call two repository methods
eg:
foreach(var person in personRepository.GetPeoplePaged(1, 100))
{
var address = addressRepository.GetAddressForPerson(person.Id);
//other things...
}
As you can see this will create a performance issue (101 queries where one could have done), but sometimes its less visible than this.
Extension methods to the rescue
Most of us are using an ORM with a LINQ provider. What these do is to use an IQueryable to compile a deferred query and then execute that later (when we enumerate the set).
This provides an interesting avenue for writing repositories using smaller much more reusable chunks.
Consider the following repository call to generate an MVC view:
var people = personRepository.FindPeople(includeAddress: true, inRegion: "The Shire", page:10, pageSize: 20);
return View(people.Select(p => new PersonViewModel {
Name = p.Name,
Address = p.Address?.PostalAddress
});
As you can see we are calling our Super generic method and then converting this to a view model. However there’s a couple of issues with this.
- Its readable but its hard to follow the intent
- We are using our Super generic method which is a bit hard to test, and people are constantly editing it to do specific things they need.
- There’s a subtle overfetch going on here, we are querying for all columns of person and address but only using two.
What if we could write it like this:
return View(
Context.People
.InRegion("Shire")
.OrderByName()
.Page(1)
.ToViewModels()
.ToArray());
Looks much simpler right? Its less code and the intent is clearer. What if I told you the generated SQL for this also only selects Person.Id
, Person.Name
and Address.PostalAddress
?
So how do we make this kind of code a reality? How does it work?
To do this we have 4 extension methods. Each performs one simple manipulation and supports chaining.
public static IQueryable<Person> InRegion(this IQueryable<Person> people, string region)
{
return people.Where(p => p.Addresses.Any(a => a.Region == region));
}
public static IOrderedQueryable<Person> OrderByName(this IQueryable<Person> people)
{
return people.OrderBy(x=>x.Name);
}
public static IQueryable<T> Page<T>(this IOrderedQueryable<T> entities, int page, int pageSize = 3)
{
int skip = Math.Max(0, page - 1) * pageSize;
return entities.Skip(skip).Take(pageSize);
}
public static IQueryable<PersonModel> ToViewModels(this IQueryable<Person> people)
{
return people.Select(person => new PersonModel
{
Name = person.Name,
Addresses = person.Addresses.Select(a => a.PostalAddress)
});
}
So that’s nice but what about our reuse?
Say we want to use the same view model but only find a single entity.
return View(
Context.People
.InRegion(region)
.WithName(name)
.ToViewModels()
.FirstOrDefault());
As you can see we still get to reuse the bits we already coded.
Noteworthy
- As with all ORM based code, be sure to check your generated SQL is sensible.
- Stick to collection based operations as the provide better reuse and SQL is a collection based language.
- You don’t need to project directly into your view models. You can just as easily project into your data models and use
.Include
wrapped in an extension method to do your projections. This is simply an optimisation for simple queries. - You need to follow the rules within the extension methods, when you are acting on the collection you can only use methods which can be translated to SQL.
- In the examples and sample project I have used EF. However this technique should work with most LINQ providing ORMs, the bits that will differ will most likely be around how projection works.
 Its a looser construct than traditional repositories, but very expressive and powerful.
I have put an example application on GitHub that you can check out. The two example methods mentioned in this post can be called with:


Turkey claims it captured sister of Baghdadi
by Caitlin YilekTurkey said it captured the sister of dead Islamic State leader Abu Bakr al Baghdadi during a raid in northern Syria.
A senior Turkish official told Reuters that Rasmiya Awad, 65, her husband, and her daughter-in-law were detained Monday and are being interrogated. Awad was with five children when she was captured, the official said.
“We hope to gather a trove of intelligence from Baghdadi’s sister on the inner workings of ISIS,” the official said.
Turkish President Recep Tayyip Erdoğan’s communications director said the arrest of the woman proved Turkey was committed to fighting ISIS.
“The arrest of al-Baghdadi’s sister is yet another example of the success of our counter-terrorism operations,” Fahrettin Altun wrote on Twitter early on Tuesday.
“Much dark propaganda against Turkey has been circulating to raise doubts about our resolve against Daesh,” he wrote, using another name for the terror group. “Our strong counter-terrorism cooperation with like-minded partners can never be questioned.”
Reuters was not able to verify that the woman who was detained was Baghdadi’s sister and little is known about her.
Baghdadi detonated his suicide vest, killing himself and three children, when he was cornered in an underground tunnel during a raid by U.S. special operations forces in northwestern Syria last month.


Generation
1
Strandbeest
0/-
Longest Distance this Gen
0.00m
Generation Simulation Time
0:00:00
Total Simulation Time
0:00:00
DNA
-
ID
-
Direction
-
Motor revs
-
Distance
-
Ground contact
-
Previous result:
0.00m
Next up:
-


Introduction
toodope ("we" or "us") values its visitors’ privacy. This privacy policy is effective January 24, 2017; it summarizes what information we might collect from a registered user or other visitor (“you”), and what we will and will not do with it.
Please note that this privacy policy does not govern the collection and use of information by companies that toodope does not control, nor by individuals not employed or managed by toodope. If you visit a Web site that we mention or link to, be sure to review its privacy policy before providing the site with information.
What we do with your personally identifiable information
It is always up to you whether to disclose personally identifiable information to us, although if you elect not to do so, we reserve the right not to register you as a user or provide you with any products or services. “Personally identifiable information” means information that can be used to identify you as an individual, such as, for example:
- your name, email address, profile picture, billing address, and shipping address
- your toodope user ID and password
- credit card information
- any account-preference information you provide us
- your computer’s domain name and IP address
- where your computer is located on the Internet
- session data for your login session, so that our computer can ‘talk’ to yours while you are logged in
If you do provide personally identifiable information to us, either directly or through a reseller or other business partner, we will:
- not sell or rent it to a third party without your permission — although we may use your contact information to provide you with information we believe you need to know or may find useful, such as (for example) news about our services and products;
- take commercially reasonable precautions to protect the information from loss, misuse and unauthorized access, disclosure, alteration and destruction;
- not use or disclose the information except:
- as necessary to provide services or products you have ordered, such as (for example) by providing it to a carrier to deliver products you have ordered;
in other ways described in this privacy policy or to which you have otherwise consented;
- in the aggregate with other information in such a way so that your identity cannot reasonably be determined (for example, statistical compilations);
- in the individual to improve our services and track bugs;
- as required by law, for example, in response to a subpoena or search warrant;
- to outside auditors who have agreed to keep the information confidential;
- as necessary to protect the rights, safety, or property of toodope, its users, or others; this may include (for example) exchanging information with other organizations for fraud protection and/or risk reduction.
Other information we collect
We may collect other information, such as (for example) the domain name and IP address of your computer. This website also uses Google Analytics to help analyse how visitors use this site. Google Analytics uses “cookies”, which are small text files placed on your computer, to collect standard internet log information and visitor behaviour information. We may use this information, individually or in the aggregate, for technical administration of our Web site(s); research and development; customer- and account administration; and to help us focus our marketing efforts more precisely.
Cookies
toodope uses “cookies” to store personal data on your computer. We may also link information stored on your computer in cookies with personal data about specific individuals stored on our servers. If you set up your Web browser (for example, Internet Explorer or Firefox) so that cookies are not allowed, you might not be able to use some or all of the features of our Web site(s).
External data storage sites
We may store your data on servers provided by third party hosting vendors with whom we have contracted.
Your privacy responsibilities
To help protect your privacy, be sure:
- not to share your user ID or password with anyone else;
- to log off the toodope Web site when you are finished;
- to take customary precautions to guard against “malware” (viruses, Trojan horses, bots, etc.), for example by installing and updating suitable anti-virus software.
- Notice to European Union users
- toodope‘s operations are located primarily in the United States. If you provide information to us, the information will be transferred out of the European Union (EU) to the United States. By providing personal information to us, you are consenting to its storage and use as described herein.
Information collected from children
You must be at least 13 years old to use toodope‘s Web site(s) and service(s). toodope does not knowingly collect information from children under 13.
Changes to this privacy policy
We reserve the right to change this privacy policy as we deem necessary or appropriate because of legal compliance requirements or changes in our business practices.
Questions or comments?
If you have questions or comments about toodope's privacy policy, send an email to
admin@toodope.org.


This will be where I introduce visitors to my blog. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vel imperdiet risus. Etiam feugiat, urna sed varius ornare, nisl est lacinia purus, eu ornare sapien turpis sed felis. Etiam at varius urna, quis blandit justo. Aliquam tempor et arcu auctor sodales.
December 4, 2014 - This week we took a look at using arrays and hashes. These are both techniques for creating lists in Ruby, but they are used in different circumstances. Arrays An array is an ordered list of objects. Each object is linked to its position within the... more
December 5, 2014 - Looking at Anthony Gregorc’s Mind Styles Model, my personal thinking style is that of “abstract random”. This means that I learn best when I’m given broad or general guidelines and am able to participate in group activities, and I struggle with conce... more


Exposing Deceptions. Affirming the Truth.
Satellite Channel
About us
Contact us
Donate
Register
Sign In
45
RESULTS
Sort by
Popularity
Date
Length
Per page
8
12
24
SEARCH
Filters
LANGUAGE
English
Other
TOPICS/CATEGORIES
Our Times
Bible Topics
Creation
Reformation
Media
FORMAT
Major Series
Single Sermons
Documentaries
News
SPEAKER
Walter Veith
Victor Gill
Daniel Pel
Others
Satellite Info
Watch live!
Donate
Discover
Title 1
Title 1
Title 1
Title 1
Title 1
Title 1
Title 1
Title 1
<< FIRST
< PREV
1
2
3
4
...
NEXT >
LAST >>


--- layout: post title: no title date: '2014-12-28T07:30:28+01:00' categories: - Sketches picture_url: https://film-Storyboards.tumblr.com/post/106408666517 ---


Our Aim
The aim/purpose of education is to grow children into productive citizens that use their knowledge, talents, and learned skills to sustain themselves and help others while pushing the human race forward in areas of equality, equity, and harmony.
These are our faculty
Overall Development stories
Achievements achieved


Do you like to travel, but are bored by more popular travel destinations? Tired of elbowing your way through the crowd to see that Mona Lisa? Stressed about the time you waste waiting in line to get to the observation deck of the world's tallest buildings? Then I have a few recommendations for you!
Answer the following questions to help narrow down locations you might like to visit.
What kind of climate do you like? Hot or Cold?
Do you like to be in danger? Yes or No?
How much danger do you like to be in? Maimed or Dead?
Do you like to be in danger? Yes or No?
How much danger do you like to be in? Maimed or Dead?
How cold do you like it? A little or a lot?
Honolulu is a great tourist destination, but it's pretty easy to get to. Try another island for a different experience, or just drive around to the northern side of Oahu.
It's not something everyone can do. In fact, it's likely only George Kourounis and Sam Cossman have! Rappell down into the crater wearing a heat resistant suit and stand next to the boiling lava for as long as you can!
Ilha da Queimada Grande is an island off the coast of Brazil. Visits are strictly controlled by the Brazillian government, as the island has an incredibly high concentraion of venemous snakes! The island itself is even shaped like a snake!
Some experts claim that there is one snake for every square meter in some spots, and a single bite can cause kidney failure, necrosis, brain hemorrhaging, and intestinal bleeding.
It's not fun, but it sure is hot and dangerous! You can learn more about the island on Wikipedia.
It may not be the tallest mountain in the world, but it's currently the most dangerous, with only a 62% survival rate! Only 157 people have summitted it and 60 people have died! You can learn more at Wikipedia.
It's an incredibly strenuous journey across the world's largest desert. It's cold and you probably won't die, but you might lose a toe! Do find someone to water your plants however, because you'll be gone for at least two months! Figure out who to talk to at Adventure Consultants!
As you know, we have nice winters and snow is just a short drive away! I realize that home isn't really all that unique of a place to stay, but you did say you wanted a safe place that was only a little cold, and this is the best there is!
There are plenty of Air BnB's available to rent. Why not stay in a stranger's house for the weekend? Or maybe spend a night in a historical hotel like the Benson or sleep in an old classroom at the Kennedy School!
If you've changed your mind and feel like a little adventure, why not an overnight in Forest Park? After all, this guy and his daughter did it for four years!
There are many to choose from. You can head north to Alaska or Quebec, or you can cross the ocean and stay in one in Japan, Finland, Norway, Romania, or Sweden! Just make sure you call ahead so your room isn't melting or in the process of being rebuilt! More information can be found here.


Class TournamentBuilder
Inheritance
Inherited Members
Namespace: Challonge.Tournaments
Assembly: Challonge.Net.dll
Syntax
public class TournamentBuilder
Constructors
| Improve this Doc View SourceTournamentBuilder()
Declaration
public TournamentBuilder()
TournamentBuilder(Tournament)
Declaration
public TournamentBuilder(Tournament tournament)
Parameters
| Type | Name | Description |
|---|---|---|
| Tournament | tournament |
Properties
| Improve this Doc View SourceAcceptAttachments
Allow match attachment uploads
Declaration
public bool AcceptAttachments { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
CheckInDuration
Length of the participant check-in window in minutes
Declaration
public int? CheckInDuration { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<System.Int32> |
Remarks
Requires StartAt to be set.
Description
Description/instructions displayed above the bracket
Declaration
public string Description { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
GrandFinalsModifier
How the grand finals are played
Declaration
public TournamentGrandFinals GrandFinalsModifier { get; set; }
Property Value
| Type | Description |
|---|---|
| TournamentGrandFinals |
HideForum
Hide the forum tab on your Challonge page
Declaration
public bool HideForum { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
HoldThirdPlaceMatch
Whether or not to include a match between the semifinals losers. (only works with single elimination brackets)
Declaration
public bool HoldThirdPlaceMatch { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
IsPrivate
Hide this tournament from the public browsable index and your profile
Declaration
public bool IsPrivate { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Name
Your tournament's name/title (max: 60 characters)
Declaration
public string Name { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
NotifyUsersWhenMatchesOpen
Email registered Challonge participants when matches open up for them
Declaration
public bool NotifyUsersWhenMatchesOpen { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
NotifyUsersWhenTournamentEnds
Email registered Challonge participants the results when this tournament ends
Declaration
public bool NotifyUsersWhenTournamentEnds { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
OpenSignup
Whether or not challonge hosts a signup page for you
Declaration
public bool OpenSignup { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
ParticipantsPerMatch
For FreeForAll only: number of participants per match
Declaration
public int? ParticipantsPerMatch { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<System.Int32> |
PointsForBye
For swiss rounds only: points gained for a bye round
Declaration
public float PointsForBye { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Single |
PointsForGameTie
Points gained for a game tie
Declaration
public float PointsForGameTie { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Single |
PointsForGameWin
Points gained for a game win
Declaration
public float PointsForGameWin { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Single |
PointsForMatchTie
Points gained for a match tie
Declaration
public float PointsForMatchTie { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Single |
PointsForMatchWin
Points gained for a match win
Declaration
public float PointsForMatchWin { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Single |
RankedBy
For round robin and swiss: how the participants are ranked
Declaration
public TournamentRankingStats RankedBy { get; set; }
Property Value
| Type | Description |
|---|---|
| TournamentRankingStats |
RrIterations
For GrandPrix: number of races being played
Declaration
public int? RrIterations { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<System.Int32> |
SequentialPairings
When enabled, instead of traditional seeding rules, make pairings by going straight down the list of participants. First round matches are filled in top to bottom, then qualifying matches (if applicable)
Declaration
public bool SequentialPairings { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
ShowRounds
Label each round above the bracket (only works with single and double elimination brackets)
Declaration
public bool ShowRounds { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
SignupCap
Max number of participants in your tournament
Declaration
public int? SignupCap { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<System.Int32> |
Remarks
Once this number is reached, participant will be added to a waiting list. You can check if a participant is in the waiting list using OnWaitingList
StartAt
When the tournament is scheduled to start
Declaration
public DateTimeOffset? StartAt { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<System.DateTimeOffset> |
Subdomain
Your tournament's subdomain (subdomain.challonge.com/url) letters, numbers, and underscores only
Declaration
public string Subdomain { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
SwissRounds
Number of rounds to be played. Only works for swiss type tournaments.
Declaration
public int SwissRounds { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Remarks
It is recommend to limit the number of rounds to less than two-thirds the number of players. Otherwise, an impossible pairing situation can be reached and your tournament may end before the desired number of rounds are played.
TournamentType
The type of the tournament
Declaration
public TournamentType TournamentType { get; set; }
Property Value
| Type | Description |
|---|---|
| TournamentType |
Url
Your tournament's url (challonge.com/url) letters, numbers, and underscores only
Declaration
public string Url { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Methods
| Improve this Doc View SourceToTournament()
Creates the Tournament with the corresponding properties
Declaration
public Tournament ToTournament()
Returns
| Type | Description |
|---|---|
| Tournament |


Sharon Bowman
Full Stack Web and Hybrid Mobile Applications Developer
Full stack web and hybrid mobile applications developer specializing in full stack JavaScrip application and architectures. Experienced in all stages of the development life cycle, well versed in numerous programming languages.
- Hands-on experice leading all stages of system development efforst, including requirements in definition designs, architecture, testing and support.
- Outstanding leadership ablilities; able to corrdinate and direct all phases of project-based efforts.
Core Competencies
|
| Full Stack Development |
Hybrid Mobile Development |
Strong Analytical Skills |
| Savvy Problem Solver |
Prioritizes Tasks |
Strong Leadership Skills |
CERTIFICATIONS / TECHNICAL PROFICIENCIES
- Ceritifications: Agile Certified Scrum Master
- Platforms: Linux, Windows, Mac, LAMP, MEAN, NodeJS
- Database: MySQL, MonogoDB
- Tools: VS Code, SSH, Gulp, Git
- Languages: HTML, CSS, SASS, JavaScript, ES6, PHP, Bash, SQL
PROFESSIONAL EXPERIENCE
Custom Websites - Chicago, IL
Built custom web applications for clients across a large number of industries
Web Developer
- Wrok with ES6, NodeJS, HTML, JavaScript, CSS MYSQL and MonogoDB to build customized web applications for a diverse set of customers.


| content {httr} | R Documentation |
There are currently three ways to retrieve the contents of a request:
as a raw object (as = "raw"
), as a character vector,
(as = "text"
), and as parsed into an R object where possible,
(as = "parsed"
). If as
is not specified, content
does its best to guess which output is most appropriate.
content(x, as = NULL, type = NULL, encoding = NULL, ...)
x |
request object |
as |
desired type of output: |
type |
MIME type (aka internet media type) used to override the content type returned by the server. See http://en.wikipedia.org/wiki/Internet_media_type for a list of common types. |
encoding |
For text, overrides the charset or the Latin1 (ISO-8859-1) default, if you know that the server is returning the incorrect encoding as the charset in the content-type. Use for text and parsed outputs. |
... |
Other parameters parsed on to the parsing functions, if
|
content
currently knows about the following mime types:
text/html
: xml2::read_html()
text/xml
: xml2::read_xml()
text/csv
: readr::read_csv()
text/tab-separated-values
: readr::read_tsv()
application/json
: jsonlite::fromJSON()
application/x-www-form-urlencoded
: parse_query
image/jpeg
: jpeg::readJPEG()
image/png
: png::readPNG()
as = "parsed"
is provided as a convenience only: if the type you
are trying to parse is not available, use as = "text"
and parse
yourself.
For "raw", a raw vector.
For "text", a character vector of length 1. The character vector is always
re-encoded to UTF-8. If this encoding fails (usually because the page
declares an incorrect encoding), content()
will return NA
.
For "auto", a parsed R object.
When using content()
in a package, DO NOT use on as = "parsed"
.
Instead, check the mime-type is what you expect, and then parse yourself.
This is safer, as you will fail informatively if the API changes, and
you will protect yourself against changes to httr.
Other response methods:
http_error()
,
http_status()
,
response()
,
stop_for_status()
r <- POST("http://httpbin.org/post", body = list(a = 1, b = 2)) content(r) # automatically parses JSON cat(content(r, "text"), "\n") # text content content(r, "raw") # raw bytes from server rlogo <- content(GET("http://cran.r-project.org/Rlogo.jpg")) plot(0:1, 0:1, type = "n") rasterImage(rlogo, 0, 0, 1, 1)


REPORT: NFL Not Interested In Reseeding Playoff Teams Despite Embarrassing NFC East Division
by Darrelle LincolnThe NFC East is a dumpster fire that doesn’t have a single team above .500. The worst part in this is that the winner of the division will get a home game against a much better team in the postseason.
It’s a situation that has people wanting the league to take action and think about possibly reseeding the playoff teams.
However, according to ESPN’s Adam Schefter, the popularity of that idea hasn’t spread farther than fans or the media.
“A source with knowledge of the NFL’s thinking said the idea of reseeding teams has come up but “has gotten zero steam. It’s never been a consideration.”
The report does not elaborate on why the NFL hasn’t considered it, but it’s not like this would be the first time a bad team made into the postseason.
The 7-9 Seahawks made it there with a 7-9 record and defeated the New Orleans Saints in a game that is best remembered for Marshawn Lynch putting the team on his back with a monster run.


Dear all,
I've always wanted to create my own "home" monitoring system and just discovered Arduino and your community, which is really great !!
After I've successfully worked on temperature sensors, which is not very difficult... I'm working now on monitoring current energy consumption.
So my hardware consist in an Arduino Uno and a CT sensor YHDC SCT-013-030 (30 Amps).
According to what I understood, this CT sensor has a built in resistance and then delivers tension from 0 to 1V for 0 to 30A on AC side (primary). This is different from the 100A model which does not have this burden resistance.
Anyway I'm really fighting to get an accurate 0 to 1V tension reading on the ADC of the Arduino (I choosed A0) . Here is what I understood and what I've been through these last days :
-
CT is providing an alternative (0...1V) current whereas Arduino Analog input is a 0 to 5V direct current.
-
What you suggested on the following page is to use two 10kOhms resistance to set the "0V" level at half the maximum input of the Arduino, which then is 2.5V.
-
Then my understanding is that the alternative 0..1V current will now move above and below the 2.5V input of the Arduino, from 1.5V to 3.5V at most.
-
Now I've worked on different algorithms to "read" this alternative current and find the appropriate voltage of the CT and i've several problems / questions :
First I'm using a min/max and average method to calculate the "gap" between the highest and lowest value over a sufficient period of time. Does it sound good (code is below) ?
Second, I've put my Fluke multimeter at the output of the CT to get a clear voltage reading before it goes to the Arduino, and I also have an external fluke clamp to measure AC current of the AC cable directly. So I can compare :
- Current from my external AC clamp to to my Fluke multimeter voltage of the CT : this is really accurate (I just need to multiply the voltage of the CT by 30) as both are reading exactly the same number of Amps. One good news.
- Voltage from my fluke at the CT output and the voltage read from my algorithm using Serial.print by the Arduino. It is not so bad (meaning the difference is quite acceptable) if I've got only a few device plugged but as soon as Amps are going high the difference is way too high. What's wrong?
code :
const int sensorPin = A0;
const int number_of_samples = 50;
int vmin;
int vmax;
int sampleI;
int summax;
int summin;
int jmoy;
double moymax;
double moymin;
double Vrate;
double tension;
int topdepart;
void setup()
{
Serial.begin(9600);
Serial.println("temps;vmin;vmax;tension");
summax = 0;
summin = 0;
jmoy= 0;
topdepart = millis();
}
void loop(){
vmin = analogRead(sensorPin);
vmax = vmin;
for(int i = 0; i <number_of_samples;i++){
sampleI = analogRead(sensorPin);
if (sampleI < vmin)
vmin = sampleI ;
if (sampleI > vmax)
vmax = sampleI ;
}
summax += vmax;
summin += vmin;
jmoy++;
if(millis() >= (topdepart+1000)){
moymax = summax / jmoy;
moymin = summin / jmoy;
Vrate = (moymax - moymin) / 2.0;
tension = Vrate * 5000.0 / 1024.0;
Serial.print(millis());
Serial.print(";");
Serial.print(moymax);
Serial.print(";");
Serial.print(moymin);
Serial.print(";");
Serial.println(tension);
topdepart = millis();
jmoy = 0;
summax = 0;
summin = 0;
}
}
Re: Questions about CT on Arduino
Why don't you use one of our sketches on Github that use the emonLib library. Those can give you the genuine rms current. "rms" (root mean square) is the value everybody uses for power measurements. Your Fluke, if it is an expensive one, will be reading rms; otherwise, it will be reading the rectified average but scaled to indicate the rms value for a pure sine wave.
I'm sorry, but the answer to "Does it sound good (code is below)" is no. The rms value of an alternating wave is the value that gives the same heating effect in a resistor (example: a water heater) as a direct current of the same value. For example, a motor car light bulb supplied with 12 V rms ac will be the same brightness as when it is supplied with 12 V dc. The shape of the alternating current wave is not necessarily a perfect sine wave, and measuring the distance between peaks of opposite polarity will not give you an accurate measure of the heating effect of the current.
Re: Questions about CT on Arduino
Hi Robert,
Thanks a lot for your answer. I've worked on your Emonlib library and in fact didn't really understand why you used RMS, now I do thanks to your explanation. And you're right my fluke is quite an expense one and is providing I think RMS value by default, since I have an option to display also min/max and average values.
One thing though, can you confirm it is not necessary to use diode to convert alternative current from the CT to direct ? You're not doing this thanks to your RMS algorithm or is there any other reason?
many thanks
Re: Questions about CT on Arduino
You must not have any rectification outside the software, it is all done internally. And in any case, you would take away the ability to know the direction of power flow - which you can have if you also have a voltage reference signal.
I can see why you are asking this, I think you need to study the sketch and the library (and the mathematics!) to see how we process the signal. Here's a very quick overview that should be enough to get you going:
We sample the current, about 110 times per cycle (@ 50 Hz, less at 60 Hz). As it comes in, the wave is centred on 511 or so. We use the present value and the one before to run a high pass filter on the numbers - this restores the wave so that it's centred about zero. Then we square the values and add them (this is where it gets rectified), and after the preset (and large) number of samples, that hopefully spans a complete number of cycles so we don't get any 'end effects', we divide by the number to get the mean, then take the square root.
Re: Questions about CT on Arduino
Hi Robert,
Thanks a lot for all your answers. I did understand the square average thing, but I did not know the high pass filter methodology which is really great indeed.
Now thanks to you and your library it works fine !
have a good day
Victor


The DBC mindset as a 'restaurant' / 'kitchen' and the encouragement to move on from the consumer mode to that of the creator mode, or the growing sense of responsibility over the kind of experience one has at DBC is very galvanizing. It's great to have that driving force to serve as the guiding practice to how I can do this work. Moving from taking DBC as an entire package can be difficult, especially given all the rewarding that happens when we take on the roles of 'typical' students, employees & customers. I found that shift of framing quite enlightening and completely... again, enlivening.
I find that the pitch of DBC, to make that creator or hacker kind of person, speaks directly to my hope that I can begin to move those semi-solidified tropes of being a student into what a web developer calls me to do. I'm incredibly grateful that I have an environment that almost begs of me to make mistakes and fall/stumble towards my goals. I like this approach!
I believe what will resonate with me most, and what has been keeping me up at night (somewhat), is that I don't come across the issue of 'banking' or just packing on concepts/teachings on top of one another with little to no understanding but just rote memorization. I believe that working with a pair, or in a very conversational, if not visual approach will help tremendously to help move away from memorizing to understanding. I'm really looking forward to engaging on this community-front!
I believe my expectations haven't changed dramatically, but the blank spots of how certain aspects of the organization works, have been filled in. I found the fireside chat to be great for laying down the expectations of DBC for me. I found that the approach to how a class/cohort is run to be illuminating with respect to what learning at DBC will entail. I'm sweating already!
The manner in which one can self-assess and really gauge where you are and what happens to catch up or know if you're on the right path is a great opportunity to jump on board and take this education by the reigns. I'm excited and am looking forward to working through those rough spots I'll have when shifting my learning approaches from what was expected/rewarded in a typical student & teacher atmosphere.
Absolutely! The nerves aren't so much based out of any fear of failure nor somehow feeling like I wouldn't be able to measure up to what the demands of the program are... although, I'm sure it will take some time for me to ramp up into the time demands of the curriculum. I believe the nerves come from the perceived departure, and the relative scope of the departure, from my day-to-day job in the public health arena. While I've dabbled in tech and have been very interested in the general movement that tech bloggers & reporters comments on, I haven't actually taken this fork in the road yet. We'll see!


index Page
Section
A simple container to divide your page into
sections
, like the one you're currently reading.
From
To


It has been a long freshman year and I am surprised I am already writing a review for my 2nd semester at NUS. Semester 2 was much tougher than Semester 1, but ironically my grades were slightly better (yes, I can’t believe it too!).Thanks to the bell curve I suppose. Anyway, here is the module review:
CG1108: Electrical Engineering
A good module that introduces the basic concepts of electrical engineering. I found the pace of the lectures very manageable compared to other modules. The total number of chapters covered is actually not a lot, and hence it allows you enough time to fully comprehend and grasp the basic concepts before moving onto the next chapter.
My lecturer for this module was Dr Sahoo. He is a very approachable lecturer and teaches very well. I find it important to attend his lectures (never missed any) since most of the working and examples are done in the lecture itself. Though the slides with the digitally written solutions are uploaded, it is much easier to follow through the lecture and examples in real time rather than at home where you have to figure them out all by yourself.
The assessment of the module is shared equally between the hands-on segment and the theory section. Hands-on segment includes the labs (10% attendance and 10% lab test) and the exciting Arduino car project (25%). Labs are manageable and you will be guided by your group’s assigned mentor. The lab test is very similar to whatever content you have learnt during the practical labs and make sure to watch the equipment briefing video uploaded by the ECE department to have a complete knowledge of the equipment and how to use them.
The car project was what many of us were looking forward to. There was a lot of time given for us to work on the car project. It is of high importance that you select your groupmates carefully. They must appreciate your suggestions and be willing to help each other out and put in a good amount of effort to work together and achieve the target.
What I did not like about the car project was the lack of constant results. The car basically takes input from the light-dependent resistors (LDR) and these resistors are very sensitive to the ambient light which makes it difficult to get consistent results. Nevertheless, I think the car project was one of the most exciting parts of the module. I still remember my friends’ and my reaction when our car worked for the first time!
The theory section includes the mid-term test (10%) and final exam (40%). Both exams were manageable and as long as the basic concepts and application has been mastered it should not be a problem to score well. For the final exam, practising past year papers is crucial in understanding the type of questions to expect.
Grade obtained: A
Difficulty: Average
GEK1549: Critical Thinking and Writing
GEK1549 was quite enjoyable. Like many, I did not like this module initially, but as time went, I began appreciating what was being taught. It is very systematic and really probes your thinking. The theme for our batch was on “Sustainable Cities”.
There are no lectures, only tutorials. My tutor was Dr Sadorra. She is really nice and approachable and gave me and my teammates very constructive comments and suggestions during the course of the module. She also prepares her own slides and provides good external references to clarify concepts.
Assessment is divided into 3 parts. Assignment 1 (30%) requires the submission of a graphic organiser, summary and evaluation of a given article. Assignment 2 (30%) is a position paper that is done in groups. And Assignment 3 (10%) is essentially class participation. The other 30% comes from the final exam.
I was able to do particularly well in both Assignments 1 & 2 and made effort to participate in class as much as possible. I felt the final exam was doable, but I was restricted due to the lack of time. Make sure you have good teammates for Assignment 2. Always have a clear foundation and roadmap as to what you will be doing for the position paper. In my case, for the problem-solution paper, I made sure that the problem and solutions are clearly linked. And to make our paper stand out, my teammates and I ensured that the proposed solutions were specific to the city and are feasible in the implmentation. Not an easy task, but you’ll get there after some considerable time into research and analysis. Be sure to utilise NUS Libraries website. The resources there will surely aid in obtaining reliable sources for the paper.
All in all a very manageable module, provided you put in good effort in understanding the tutorials.
Grade Obtained: A
Difficulty: Average
CS1020: Data Structures and Algorithms I
This was my favourite module of this semester due to my personal interest in computer programming. But, this was definitely not a easy module. The content covered were heavy and it requires a lot of practise and understanding to get used to the concepts taught. And before you are familar with one concept another concept will be taught. It requires discipline and effort to do some programming and to study for the module daily.
Lecturers for this module are Mr Aaron Tan and Dr Low. Both lecturers are very good in terms of teaching new concepts. They give plenty of examples to ensure our understanding is complete. It is important to attend and understand tutorials. Even when I couldn’t do or finish a particular tutorial, I made it a point to attend classes to ensure I do not neglect the tutorial. It kept me on track.
Assessment for the module was divided into many parts:
| Tutorial Attendance/Participation | 7% |
| Lab Attendance | 3% |
| Take-Home Labs | 11% |
| Sit-in Labs | 24% |
| Mid-term Test | 15% |
| Final Exam | 40% |
The least you can do is to secure the marks from tutorial/lab attendance and take-home labs. This is greatly help in achieving a good grade. Take-home labs are often challenging, but you will given at least a week before the submission. Hence, ensure that you are able to solve these labs. Else, seek help during the lab sessions. The tutors are really helpful when you ask questions.
It’s a fast paced module. On any given week, you will most probably either have a sit-in lab or a take-home lab due. Consistent work and practice is of vital importance.
The final exam was slightly tough for me. I realised I have made many careless mistakes after completing the exam. Otherwise, the difficulty of the questions asked were similar to those in tutorials. Focus on important topics such as recursion, hashing, sorting etc. These are major concepts that have a higher probability of being tested.
All in all, a tough and fast paced module that definitely requires more effort than what you normally put in for a 4MC module. Discipline to revise and practice questions (on Codecrunch) on a regular basis is important from the start of the module.
Some of my codes are hosted here and on Github.
Cheatsheet for final exam is now hosted here. (Please do write your own, this is only for reference, not reproduction).
Grade Obtained: A-
Difficulty: Tough
PC1432: Physics IIE
This was the toughest module for me. The rate at which chapters and concepts were covered was astonishing. I could barely keep up with the pace and was lost even before the recess week. It did not help that many of the chapters were inter-linked.
There were a total of 3 lecturers. All of them were engaging and taught really well. But, it required a lot of effort from my side to fully grasp what they were saying and taking time to practice extra questions outside the tutorials. The questions from the tutorials are NOT enough as practice. The recommended textbook was really helpful for me to get a better understanding of the concepts.
Assessment was divided into practical viva/reports (10%), online assignment from Mastering Physics (10%), mid-term test (20%) and final exam (60%).
Ensure that you do your best for the practicals and online assignments as these are relatively easier to score. The mid-term was manageable except for the time restriction. Planning your time during the examination is crucial.
I found the final exam very hard and was afraid I did not do as well as I expected.
All in all, a fast-paced and tough module.
Grade Obtained: A-
Difficulty: Very Hard
MA1506: Mathematics II
MA1506 was much more manageable than MA1505, which I took in semester 1. This module covers a great depth into Differential Equations and linear algebra, linear transformations and Laplace transforms. Many of these concepts are crucial for engineering students.
Assessment is divided into mid-term test (20%) and final exam (80%).
The first part involving differential equations (DE) was fairly manageable and was even fun when modelling systems. All it requires is a good understanding of the various ways to solve DEs which can be achieved with sufficient practice from tutorials. The mid-term test was fully MCQ (10 questions in one hour) and was quite easy. I was able to score full marks for this one.
After recess week, the pace of lectures started to increase together with the difficulty of concepts. Webcasted lectures were really helpful when I was revising to clarify my doubts.
Final exam was manageable. Make sure you have sufficient practice form the past year papers (check NUS Library website or IVLE). Since there are solutions provided, it helps to understand the structure of the questions. Questions are usually similar year to year.
Make sure the help sheet (2 sides of 1 A4 sheet) is well prepared. You can see my help sheets here for reference or here.
All in all, a manageable module, provided sufficient effort is put in to understand fundamental concepts.
Grade Obtained: B+
Difficulty: Manageable
Hope the above reviews and tips were helpful! Comments are welcome (use the Disqus thread below).
Cheers, Harish


(Video) Brilliant Andy Robertson song based on Gerry Cinnammon’s ‘Belter’ goes viral
by Wash N'GogThis would be a tricky one for the Kop to blare out in unison, but how good would it sound?!
Andy Robertson’s current song is a pretty easy one to remember – and anyone who’s been to Anfield over the past 18 months will have head ‘Oh, Andy Andy!’ sung at one point…
But how about this remix of Gerry Cinnammon’s classic ‘Belter’ as seen in the video below?
It’s a quality song, and suits Robbo perfectly as the original singer is a very well-loved Scot, too.
“And when he plays the Blue Sh*te he will leave the elbow in, he’s Andy Robbo…” is a particular favourite line of ours!
Props to the lad in the video:
Hope this song gets picked up pic.twitter.com/eZQRXiWUZv
— Tom Keegan (@redmedic56) December 8, 2019


Write a list of all the things that you can think of that you are worried about. However, set a timer to 2-5 minutes and only write during that time. After the time is done, try to stop dwelling on the worries.


First News Entry Ever! August 25, 2022 Ruida Zeng I am excited to announce that the "News" page is officially going live today!


Saint Joseph's University
Singers
I joined the Saint Joseph's University Singers my freshman year. It is your typical choir, but the only one of its kind on campus. We sing traitional choir music, and religious songs as well. We also perform a holiday concert of Christmas music each December. One of the best things about this group is that we tour every spring. We've gone to New York City, Boston, and Washington D.C., singing at various places. We even sung at Father Gillespie's Presidential Inauguration, which was a big honor for us.
SJU
My experience at Saint Joe's has been one of the best experiences of my life. No, really. I am so happy that I chose to come here, considering I never even heard of this school until I applied. I was visiting a friend at Villanova (boo), and had to drive past SJU on the way. My dad mentioned that a family friend was considering coming here, and that we should get out and walk around, since we were here anyway. I was not about it at all, and just wanted to get to Nova because Nova is just so much fun (just kidding). Unwillingly I agreed, and I actually really liked the campus so I thought what the heck, I'll apply. This was my first acceptance letter, and I recieved scholarship and grant money, so that was pretty awesome. I came to Accepted Students Day and I was sold. This is where I wanted to be.
Theatre Co.
Theatre is my absolute favorite thing in the world. I listen to Broadway showtunes more than I should, and make at least three references to shows daily. I have done theatre since I was twelve, and have done everything from costumes to acting to props to stage managing. I acted throughout my four years in high school and it was an absoulte blast. I took that into college, and you can find me assistant stage managing our spring production of Avenue Q, which I am beyond excited for. I also work for the theatre, including set construction, cleaning the prop closet (the most difficult task ever), and working the sound/light board for events in Bluett Theatre.
Clubs
Though theatre here takes up most of my time, I am very supportive of many other groups on campus: SJU Improv club, Followed By A Bear (student run theatre scenes), Radio 1851, and City Belles/54th & City (acapella groups). I also belong to Hand In Hand, a club that organizes a carnival in the spring for special needs kids. We fundraise and do other activities to help our cause!
Check out their Facebook pages: