6.810 Engineering Interactive Technologies (fall 2021)
Group Project (4 students per team)
Topic: Big Challenges in the World
The world is a complex place. We face many challenges both on a society level and an individual level. The goal for this semester's project is to build an interactive device that can have an impact either on a group of people or on individuals. There are many websites you can use for inspiration, just google for 'global issues' or 'grand challenges in the world'. Some examples include: climate change, pandemics, obesity, accessibility, education, ageing, population density especially in cities, democracy, social isolation / disconnectedness, food security, refugees, supporting minorities. Really any issue you care deeply about is fine with us as a project topic, as long as it is not something trivial like augmenting your dorm fridge. You have a unique education at MIT, please use it to make the world a better place.
Project Requirements
Your project idea needs to fullfill the following requirements:
- The project needs to have custom fabricated parts, electronics, and a software component. Projects that are missing one of these components are not valid for 6.810. You can however choose where you want to put your main focus, i.e. some projects may be heavy on the fabrication and electronics while others may be more heavy on the software part.
- The project needs to use fabrication technology your learned in class, i.e. it should not just be the standard breadboard prototype but have a nicely integrated form factor with printed or sprayed electronics, a 3D printed or laser cut casing where appropriate etc. This is your senior year, so try to make your prototype look as professional as you can. We recommend you review the lecture slides to look for different technologies you could experiment with.
- The project idea needs to be big enough to warrant a 4 person team working on it for 6 weeks. Note that each week you will be putting in ca. 6 hours per person, so this should be 4 student x 6 hours per week x 5 weeeks = 120 person hours worth of work.
Your Task: Design and build an novel interactive device that addresses a big challenge of your choice
During this group project, you will:
- brainstorm different ideas and select one for your project
- build the physical prototype including all fabrication and electronics assembly
- program the code for your physical prototype, ideally you would also have some on-screen visualization of the sensor data that your prototype is processing
- present your prototype well, i.e. make a rotoscope of your prototype, take high quality photos, and make a video (we will teach you more about this later in the semester)
Grading
The project grade makes up 40% of your final grade.
You can get 100pts on your project, distributed across the following parts:
| 15% | Idea Presentation | Quality of the Brainstorming and Presentation of the Brainstorming Results. How diverse are the different ideas (different application domains, different types of problems)? Are the ideas challenging, i.e. go significantly beyond what we already did in the labs, are appropriate as a team project (i.e. 4 student x 6 hours per week x 5 weeks worth of work), and do the ideas use a variety of different technologies? Are the ideas presented in an easily understandable way, i.e. how clear are the conceptual drawings, are key components labeled to facilitate understanding? |
| 15% | Technical Proposal | Does the plan to build the prototype cover all the details of the implementation? How well did the team justify the particular implementation? Did the team consider other options in detail and showed that they reflected on alternative options? Is the minimum viable product really the minimum or are there still additional parts that could be left out? How much potential do the future extensions for this project have? Is the component list complete and did the team reflect in detail which components they need and why? How well is the milestone plan done, are the todos properly distributed across the different weeks or are time-intensive tasks all done in one week? Are the milestones covering all aspects of what needs to be build or were things forgotten? |
| 25% (ca. 4% per milestone, 6 milestones) | Weekly Milestones | Did the team deliver the milestones as specified the week prior? Are the videos showing the milestone results uploaded on time and are the milestones for the following week revised before the staff meeting? Did the milestone have an appropriate number of workhours (i.e. 6 hours per student) or was it too simple, in which case we may take half the points off. |
| 15% | Midterm Presentation | While the weekly milestones will only check if you did something that was appropriate for the weekly work required by each student (i.e., did you do the work or not), the midterm presentation will be graded by the quality of the work you accomplished so far and how much progress you have made towards the overall project goal. We will look at what you set out to do in your technical proposal, and ask ourselves how much of the described work and at what quality you have delivered results so far? The midterm happens when around 2/3rds of the time for the project is already over, so we expect that you either already have a minimum viable product or are very close to it. In addition, we will consider the presentation quality in this grade portion as well. |
| 20% | Final Presentation | The final presentation is graded similar to the midterm presentation, i.e. we will look at what you set out to do in your technical proposal, and ask ourselves how much of the described work and at what quality you have delivered in your final presentation. In addition, we will consider the presentation quality in this grade portion as well. |
| 10% (2.5% each) | Rotoscope, Photos, Video | The final portion of your project grade will come from your presentation materials. We will grade each part of the presentation materials individually. For the rotoscope, we will grade how understandable your drawing is (did you use the techniques described in the rotoscope tutorial, did you label everything sufficiently to facilitate understanding), for the photos we will grade the quality of the picture (i.e. did you use a clean background, does the photo show the important components clearly), for the video we will grade how well it explains your project and the implementation you used. |
Buying Materials
Budget:
$50 per student ($200 per team of four students)
Ordering Parts
Option 1: We order for you: If you want to order a part, add a line for your part to this google spreadsheet. We'll make daily orders at the start of the project period, and additional orders later as needed. For inexpensive parts, plan for breakage. If a part costs $2, order more than you'll need to so minimize downtime from re-ordering.
Option 2: You order yourself: You can also buy parts on your own and we can try to reimburse you later (not recommended, lots of extra work for both you and the teaching team). Note that you will be given or mailed a physical check in January as reimbursement. We need all paper receipts from you in order to reimburse you and the parts need to be shipped to Junyi Zhu, MIT CSAIL, 32 Vassar Street, 32-273, Cambridge, MA 02139. Parts ordered to your home address cannot be reimbursed as MIT will not understand why we should reimburse you for 'personal' orders you shipped to your room or apartment.
3) Free Parts
Small parts like resistors, capacitors, some types of LEDs and certain chips, we will already have in stock (or you can ask EDS), so they don't count towards your budget.
Team Folders in Google Drive
1) Project Folder (Google Drive)
Each team will be given their own folder to share materials with each other and with the teaching staff. Your team folder is where you'll upload project proposal, final report, code, etc.
Weekly Milestone Meetings
Since 6.08 is a prerequisit, you should be familiar with this milestone structure.
Fill out Milestone Spreadsheet: Every week you will write down what you plan to accomplish during the week in a milestone spreadsheet. You will also write down what you will demo to the teaching team to showcase that you successfully accomplished your goal for the week.
Prepare for Milestone meetings with Staff: Before you will come to the staff meeting, you will make a short video demonstrating your milestone and upload it to your team folder google drive in the corresponding milestone folder. This will speed up the process of us learning what is new this week. Please use Handbrake or a similar tool to compress your video before putting it in the google drive (otherwise we need a ton of storage).
Milestone meetings with Staff (20 min per team): Every friday you will meet for approximately 20 minutes with the teaching team. You can find the weekly meeting time for your team in this document. At the meeting, we will spend the first 10 minutes looking at your results. We will then spend the next 10 minutes discussing any issues you may have and your plans for next week.


Load the "previous_original.json" file:
Load the "original.json" file:
Load the "[language].json" file:
Start
All
Untranslated
Changed
>
\/
Save Translation
ctrl+<enter>: save string & goto next
ctrl+g: copy original string
Deleted Entries


{{< layout}} {{$propositionHeader}}{{/propositionHeader}} {{$pageTitle}}Declaration{{/pageTitle}} {{$header}}
You could be prosecuted if you deliberately give untrue or misleading information.
By continuing you confirm that the information you've given is correct.


Image
Name
Bare Head
Crown of Death
Crown of Life
Crown of Haste
Crown of Guns
Crown of Hatred
Crown of Blood
Crown of Destiny
Crown of Love
Crown of Risk
Crown of Curses
Crown of Luck
Crown of Protection


|
NANO100_BSP V3.04.001
The Board Support Package for Nano100BN Series
|
Macros | |
| #define | EBI_READ_DATA8(Addr) |
| Read one byte data from EBI. More... | |
| #define | EBI_WRITE_DATA8(Addr, Data) |
| Write one byte data to EBI. More... | |
| #define | EBI_READ_DATA16(Addr) |
| Read a half-word data from EBI. More... | |
| #define | EBI_WRITE_DATA16(Addr, Data) |
| Write a half-word data to EBI. More... | |
| #define | EBI_READ_DATA32(Addr) |
| Read a word data from EBI. More... | |
| #define | EBI_WRITE_DATA32(Addr, Data) |
| Write a word data to EBI. More... | |
Functions | |
| void | EBI_Open (uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel) |
| Initialize and enable EBI. More... | |
| void | EBI_Close (uint8_t u32Bank) |
| Disable EBI. More... | |
| void | EBI_SetBusTiming (uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv) |
| Set EBI bus timings. More... | |
| #define EBI_READ_DATA16 | ( | Addr | ) |
| #define EBI_READ_DATA32 | ( | Addr | ) |
| #define EBI_READ_DATA8 | ( | Addr | ) |
| #define EBI_WRITE_DATA16 | ( | Addr, | |
| Data | |||
| ) |
| #define EBI_WRITE_DATA32 | ( | Addr, | |
| Data | |||
| ) |
| #define EBI_WRITE_DATA8 | ( | Addr, | |
| Data | |||
| ) |
| void EBI_Close | ( | uint8_t | u32Bank | ) |
| void EBI_Open | ( | uint32_t | u32Bank, |
| uint32_t | u32DataWidth, | ||
| uint32_t | u32TimingClass, | ||
| uint32_t | u32BusMode, | ||
| uint32_t | u32CSActiveLevel | ||
| ) |
Initialize and enable EBI.
| [in] | u32Bank | argument is reserved in NANO100 series. |
| [in] | u32DataWidth | Data bus width. Valid values are: |
| [in] | u32TimingClass | Default timing configuration. Valid values are: |
| [in] | u32BusMode | argument is reserved in NANO100 series. |
| [in] | u32CSActiveLevel | argument is reserved in NANO100 series. |
| void EBI_SetBusTiming | ( | uint32_t | u32Bank, |
| uint32_t | u32TimingConfig, | ||
| uint32_t | u32MclkDiv | ||
| ) |
Set EBI bus timings.
| [in] | u32Bank | argument is reserved in NANO100 series. |
| [in] | u32TimingConfig | The new EBI timing settings. This value will be written to EXTIME register. |
| [in] | u32MclkDiv | Divider for MCLK. Valid values are: |


Drone Controller
Status:
Not Connected
Speed Controls
Red CW1
Red CW2
Black CCW1
Black CCW2
All Motors
Speed:
0%
Speed:
0%
Speed:
0%
Speed:
0%
Speed:
0%
Get Gyro
alpha:
0
beta:
0
gamma:
0


@(employees: List[models.users.Employee], projects: List[models.project.Project],
user: models.users.User,env: play.api.Environment)
@main("Projects",user){
@if((user != null) && ("employee".equals(user.getRole()))) {
Your Current Projects
} else {
Currently Active Projects
}
@* Display successful new product message from flash, if it is set *@
@if(flash.containsKey("success")) {
@flash.get("success")
}
@if((user != null) && ("employee".equals(user.getRole()))) {
Select from your assigned projects from the list to view full list of colleagues active on it.
} else {
Select a project from the list to view all employees currently assigned to it.
}
| Image |
ID |
Name |
Job Role |
Street1 |
Street2 |
Town |
Post Code |
Department |
Email |
DOB |
@* Loop for creating table rows from Employee data *@
@for(e<-employees) {
@if(env.resource("public/images/productImages/" + e.getId + "thumb.jpg").isDefined) {
|
} else {
|
}
@e.getId |
@e.getName |
@e.getJobRole |
@e.getAddress().getStreet1 |
@e.getAddress().getStreet2 |
@e.getAddress().getTown |
@e.getAddress().getPostCode |
@e.getDepartment |
@e.getEmail |
@e.getDateOfBirthString |
@if((user != null) && ("manager".equals(user.getRole()))) {
|
|
}
}
}
@if((user != null) && ("manager".equals(user.getRole()))) {
}


HOME
Freebeat
(current)
Afro kit
Beat store
Midi file
Guitar
Piano Chord
Melody
Bass
Freedrumkit
Premium
Complete flp
Contact
Email
Welcome to BerrySite
Home
Music
Video
Beat store
Premium
New Updates
BERRYBOIZMUSIC:New Record label
Attitude:New hit single from kizziboi dropping soon!
Follow:Kizziboi realease his New hit follow produce by REGULAR SOUNDS
All updates
Follow us
Placeholder
32x32
Instagram
Follow
@Berrymusic
Placeholder
32x32
Instagram
Follow
@iam_shedyboi
Placeholder
32x32
Instagram
Follow
@kizziboi
All suggestions


Claims¶
Setup¶
In order to work with messages, you must first retrieve a queue by its name:
$queue = $service->getQueue('{queueName}');
Claim messages¶
This operation claims a set of messages (up to the value of the limit parameter) from oldest to newest and skips any messages that are already claimed. If no unclaimed messages are available, the API returns a 204 No Content message.
When a client (worker) finishes processing a message, it should delete the message before the claim expires to ensure that the message is processed only once. As part of the delete operation, workers should specify the claim ID (which is best done by simply using the provided href). If workers perform these actions, then if a claim simply expires, the server can return an error and notify the worker of the race condition. This action gives the worker a chance to roll back its own processing of the given message because another worker can claim the message and process it.
The age given for a claim is relative to the server’s clock. The claim’s age is useful for determining how quickly messages are getting processed and whether a given message’s claim is about to expire.
When a claim expires, it is released. If the original worker failed to process the message, another client worker can then claim the message.
Parameters¶
The ttl attribute specifies how long the server waits before releasing the claim. The ttl value must be between 60 and 43200 seconds (12 hours). You must include a value for this attribute in your request.
The grace attribute specifies the message grace period in seconds. The value of grace value must be between 60 and 43200 seconds (12 hours). You must include a value for this attribute in your request. To deal with workers that have stopped responding (for up to 1209600 seconds or 14 days, including claim lifetime), the server extends the lifetime of claimed messages to be at least as long as the lifetime of the claim itself, plus the specified grace period. If a claimed message would normally live longer than the grace period, its expiration is not adjusted.
The limit attribute specifies the number of messages to return, up to 20 messages. If limit is not specified, limit defaults to 10. The limit parameter is optional.
use OpenCloud\Common\Constants\Datetime;
$queue->claimMessages(array(
'limit' => 15,
'grace' => 5 * Datetime::MINUTE,
'ttl' => 5 * Datetime::MINUTE
));
Query claim¶
This operation queries the specified claim for the specified queue. Claims with malformed IDs or claims that are not found by ID are ignored.
$claim = $queue->getClaim('{claimId}');
Update claim¶
This operation updates the specified claim for the specified queue. Claims with malformed IDs or claims that are not found by ID are ignored.
Clients should periodically renew claims during long-running batches of work to avoid losing a claim while processing a message. The client can renew a claim by executing this method on a specific Claim and including a new TTL. The API will then reset the age of the claim and apply the new TTL.
use OpenCloud\Common\Constants\Datetime;
$claim->update(array(
'ttl' => 10 * Datetime::MINUTE
));
Release claim¶
This operation immediately releases a claim, making any remaining undeleted messages that are associated with the claim available to other workers. Claims with malformed IDs or claims that are not found by ID are ignored.
This operation is useful when a worker is performing a graceful shutdown, fails to process one or more messages, or is taking longer than expected to process messages, and wants to make the remainder of the messages available to other workers.
$message->delete();


- Checkerboard - Class in cip.render.raytrace.material.texture
-
Maps every unit square (in 2D) or cube (in 3D) into 4 unit squares (2D) or 8 unit cubes (3D) with alternating materials in the
squares or cubes.
- Checkerboard() - Constructor for class cip.render.raytrace.material.texture.Checkerboard
-
Creates a new instance of Checkerboard
- cip.CSE581.assign1 - package cip.CSE581.assign1
-
- cip.CSE581.assign2 - package cip.CSE581.assign2
-
- cip.CSE581.assign2c - package cip.CSE581.assign2c
-
- cip.CSE581.assign3 - package cip.CSE581.assign3
-
- cip.CSE581.assign3b - package cip.CSE581.assign3b
-
- cip.CSE581.assign4 - package cip.CSE581.assign4
-
- cip.render - package cip.render
-
The programs and classes that support 3D modelling, animation, and rendering.
- cip.render.raytrace - package cip.render.raytrace
-
The programs and classes specifically supporting ray traced image generation.
- cip.render.raytrace.background - package cip.render.raytrace.background
-
These are classes supporting various backgrounds including a constant colour background and reflection mapped backgrounds.
- cip.render.raytrace.camera - package cip.render.raytrace.camera
-
These are representations of cameras supporting ray tracing..
- cip.render.raytrace.geometry - package cip.render.raytrace.geometry
-
These are geometries that can be used in ray-traced scenes, they are all dynamically loaded objects that can be specified
in scene description file.
- cip.render.raytrace.interfaces - package cip.render.raytrace.interfaces
-
Interfaces for cameras, lights, backgrounds, geometries, geometry groups, materials
- cip.render.raytrace.light - package cip.render.raytrace.light
-
Implementations of light sources for ray tracing.
- cip.render.raytrace.material - package cip.render.raytrace.material
-
These are classes supporting material models that produce the surface appearance of geometries.
- cip.render.raytrace.material.D - package cip.render.raytrace.material.D
-
Implementations of slope distribution functions for materials.
- cip.render.raytrace.material.G - package cip.render.raytrace.material.G
-
Implementations of geometric attenuation functions for materials.
- cip.render.raytrace.material.texture - package cip.render.raytrace.material.texture
-
These are classes supporting various surface textures.
- cip.render.util - package cip.render.util
-
These are generic utilities not specific to 2D or 3D geometry or rendering.
- cip.render.util2d - package cip.render.util2d
-
These are utility classes supporting 2D modeling and geometry.
- cip.render.util3d - package cip.render.util3d
-
These are utility classes supporting 3D modeling, geometry, and rendering.
- cip.render.utilColour - package cip.render.utilColour
-
These are utility classes supporting colour representation and computation for rendering.
- clamp() - Method in class cip.render.utilColour.RGBf
-
Clamps the red, green, and blue colour components to be in the range 0.0 to 1.0.
- clear() - Method in class cip.render.raytrace.geometry.PlanarPolyhedra
-
- clone() - Method in class cip.render.util.AngleF
-
- clone() - Method in class cip.render.util3d.Line3f
-
Clone this line.
- clone() - Method in class cip.render.util3d.Plane3f
-
Clone this plane.
- clone() - Method in class cip.render.util3d.Plane3fIntersection
-
Clone this plane.
- clone() - Method in class cip.render.util3d.Point3f
-
Clone this point.
- clone() - Method in class cip.render.util3d.Vector3f
-
Clone this vector.
- clone() - Method in class cip.render.utilColour.RGBf
-
Clone this RGB colour.
- cloneAngleF() - Method in class cip.render.util.AngleF
-
- cloneLine3f() - Method in class cip.render.util3d.Line3f
-
Clone this line.
- clonePlane3f() - Method in class cip.render.util3d.Plane3f
-
Clone this plane.
- clonePlane3fIntersection() - Method in class cip.render.util3d.Plane3fIntersection
-
Clone this plane.
- clonePoint3f() - Method in class cip.render.util3d.Point3f
-
Clone this point.
- cloneRGBf() - Method in class cip.render.utilColour.RGBf
-
Clone this RGB colour.
- cloneVector3f() - Method in class cip.render.util3d.Vector3f
-
Clone this vector.
- compose(float, float, float, float, float, float, AngleF, AngleF, AngleF, Vector3f) - Method in class cip.render.util3d.Xfm4x4f
-
Build up a transformation that include combined scale, shear, rotation, and translation - in that order.
- compose(AngleF, AngleF, AngleF, Vector3f) - Method in class cip.render.util3d.Xfm4x4f
-
Build up a rigid body transformation that include combined rotation and translation - in that order.
- Cone
- Class in cip.render.raytrace.geometry
-
This is an implementation of an elliptical cone whose apex is at 0,0,0 and extends infinitely along the Z axis.
- Cone() - Constructor for
class cip.render.raytrace.geometry.Cone
-
Creates a new instance of Cone.
- ConstantColour - Class in cip.render.raytrace.background
-
A constant colour background - the same colour in all directions.
- ConstantColour() - Constructor for class cip.render.raytrace.background.ConstantColour
-
Creates a new instance of a ConstantColour background.
- ConstantColour(RGBf) - Constructor for class cip.render.raytrace.background.ConstantColour
-
Creates a new instance of a ConstantColour background initialized to a color.
- cos() - Method in class cip.render.util.AngleF
-
- cross(Vector3f) - Method in class cip.render.util3d.Vector3f
-
Cross this vector with another vector, v.
- CUTOFF_CONTRIBUTION - Static variable in class cip.render.raytrace.material.PackageConstants
-
The contribution below which continuing the ray intersection tree will be assumed to have
no meaningful effect and the tree will be adaptively terminated if adaptive depth termination is supported
by the illumination model.
- Cylinder - Class in cip.render.raytrace.geometry
-
This is the implementation of a elliptical cylinder centered at 0,0,0 of infinite extend in the major axis Z.
- Cylinder() -
Constructor for class cip.render.raytrace.geometry.Cylinder
-
Creates a new instance of Cylinder.


{{moveSelect?'实时选择':'最后选择'}}
HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.
AngularJS is a toolset for building the framework most suited to your application development.
Spectacular Test Runner for JavaScript.


MCIR - MineCraftInitRuby ehhh... thingy :)
MCIR is a little CLI framework to make the administration of one or multiple Minecraft servers easier. There are some build-in tasks to get you started (and to legitimate the "init" part of the name) but it isn't that hard to build your own especially if you're familiar with the Ruby programming language ;)
Just take a look at the examples, they should give you a little insight of what is possible (look at the restart task). There isn't that much documentation yet, sorry ._.
What it does (provide)
- A simple task based framework to build simple managing commands for your minecraft server(s).
- Simple, non-invasive structure.
- Default and example tasks to manage your server(s) and get started with building your own.
What it (currently) doesn't (provide)
- Multi user support (all instances need to run under the same user as MCIR)
- Multi machine support (only manages instances on the same machine)
Requirements
- Ruby >= 1.9.3 incl. RubyGems
- Bundler gem (
gem install bundler
)
- Bundler gem (
- git (
apt-get install git
/brew install git
) - Unixoid OS (such as Ubuntu/Debian, OS X, maybe others)
- screen command installed (
apt-get install screen
) - local minecraft server(s) (minecraft, bukkit, whatever)
Setup
- Do everything as the user which runs the servers except maybe the symlink in step 2.
- Download or clone the whole thing to where you're servers are:
cd ~ git clone https://github.com/2called-chaos/MCIR.git
- Optional but recommended: Add the bin directory to your $PATH variable or create a symlink to the executable:
echo 'export PATH="$HOME/MCIR/bin:$PATH"' >> ~/.profile && source ~/.profile OR ln -s /home/minecraft_server/MCIR/bin/mcir /usr/local/bin/mcir
- Install the bundle
cd ~/MCIR && bundle install --without test --deployment
- Copy and edit the example configuration to fit your needs and server settings.
Please note that there is currently no user support which means all servers need to run under the same user as MCIR does.
cd ~/MCIR cp config.example.yml config.yml
- Dig right into it! Run
mcir --help
to get a list of default options and available actions. Runmcir <action> --help
to get a list of all the action specific options.
Actions
kick … kick specific or all players from the server (sample task)
start … starts a server
stop … stops a server
restart … restarts a server
status … shows the status of a server
console … attaches the screen with the console
inspect … shows information about a server
rcon … provides rcon accessors
shell … gives you an interactive shell
tail … tails the server log
kick
-a, --all kick all PLAYERs from the server
-p, --players PLAYER,2nd,3rd kicks PLAYERs from the server
-r, --reason MSG specify a kick reason (def: Good bye!)
start / restart
-a, --attach Attach session after creation (def: false)
-i, --inplace Start server without screen (def: false)
stop / restart
-f, --force Kill the screen immediately, ignores all following options (def: false)
-e, --ensure Kill the screen if the server didn't stop after timeout is reached (def: false)
-t, --timeout N Wait N seconds for the server to stop (def: 10)
-d, --delay N Wait N seconds before stopping the server if --message is given) (def: 15)
-m, --message MSG Send message to server before waiting --delay (def: 10)
-k, --kick [MSG] Kick all players before the server will shutdown (def: false)
status
-a, --all Check with every method
-l, --[no-]lock Check lockfile (def: true)
-s, --[no-]screen Check screen (def: true)
-r, --[no-]rcon Check rcon (def: false)
-q, --[no-]query Check query (def: false)
console
-f, --fast Attach a screen much faster (def: false)
inspect
-a, --all Show everything
-n, --none Show nothing
-m, --[no-]mcir Show the MCIR instance config (def: true)
-p, --[no-]plist Show the server's property list (def: false)
rcon
-c, --command CMD executes the given command and return the result
-q, --query [simple|full] returns the result of an query (def: simple)
shell
-e, --exec CMD Executes the command non-interactively
tail
-b, --backlog N shows the last N lines of the log
-f, --follow follow the file, wait for new contents
-i, --interval tail interval in seconds (def: 1)
-t, --timeout N wait for N seconds, then abort (def: 30)
-w, --wait MSG follow file until MSG is found (incl. backlog!)
MSGs starting with a slash are evaluated as regex
Add custom action
To add your own custom action you have two options.
If you just need a quick and simple command open the file /home/minecraft_server/MCIR/mcir.rb
and take a look at the examples.
Otherwise take a look into the directory /home/minecraft_server/MCIR/actions
. All default actions are there so you should have some examples to work with. All .rb files in this directory and it's subdirectories are automatically loaded.


JARRED J. HARE
Projects
About Me
Blog
Projects
Contact
Past Blogs
Week 9
Asking Good Questions
Week 8
Recursion
Dealing with Conflict
Week 7
SQL Injection
My Values
Week 6
Inheritance vs. Composition
Stereotype Threat
Week 5
Ruby Class Intro
Pairing is Caring
Week 4
Enumerable method: group_by
Net Neutrality
Week 3
Thinking Style
JavaScript Intro
Week 2
Classes vs. Ids
Week 1
Excited and Scared:Week 1 of Phase 0
Website Faceoff: A Comparison of Sites
GPS: Guided Pair Sessions
GPS 1.1
Other Work
Week 2 Challenge 5: Responsive Web Design
JavaScript Cheatsheet
JQuery Intro


-
Demo Video:
-
Rules:
- Two player game(Using Two Dice).Each player has 5 life.
- Player has to set their DN (danger number) before start of the game using Get DN button and after that they have to set their target score.
- After rolling the dice the sum of numbers on the dice will be recorded.
- If the sum of numbers on the dice is not equal to DN then player will get +5 points if its equal to DN then he/she will score -2 points.
- Player has only one chance to roll the dice at a time.
- If the player fail to roll the dice within 10sec, then he/she will loose one life-line & score updated with -2 points.
- The player who loses all life-line’s first he/she will be looser & other player will win the game. Score is not considered in this case.
- The player who reach the target point first, will be the winner.


--- title: The fastai book keywords: fastai sidebar: home_sidebar summary: "How to get started with the fastai book." description: "How to get started with the fastai book." ---
This information is for readers of the Early Access version of Deep Learning for Coders with fastai and PyTorch and of the fastai draft notebooks.
Note that these require you to use fastai v2, which is currently in pre-release. During pre-release, this module is called fastai
. The draft notebooks contain the correct imports for fastai
, but the PDF book does not - it uses fastai
. Therefore, you should change fastai
to fastai
in all import statements.
Clone the draft notebooks repo, and then from that directory:
pip install -r requirements.txt
It is best to first install fastai v1 to ensure you have all the correct dependencies. See the docs for details.
To get started, run Jupyter Notebook (or use one of the online Jupyter platforms listed at https://course.fast.ai) and click on the app_jupyter.ipynb notebook.
We'll be adding more information to this site as the official book release in July 2020 gets closer.


[all packages]
[package ]
[class hierarchy]
[index]
public abstract class Shuffle
(source file: Shuffle.java)
java.lang.Object
|
+----Printable
|
+----Shuffle
The pure class interface.
public abstract class Shuffle
extends Printable
-
A shuffle is a morphism built from tensor, composition,
identity, symmetry, terminal and diagonal. A shuffle can be
represented as a function from integers (the size of the target)
to integers (the size of the source). A partial
shuffle can be represented by a partial function.
The operations on a partial shuffle are:
identity shuffle.
tensor of two shuffles.
composition of two shuffles.
terminal (an empty shuffle with empty target)
zero (an empty partial shuffle).
mediator of two shuffles (using the product structure of shuffles).
comediator of two partial shuffles (using the coproduct structure of partial shuffles).
- Author:
- Alan Jeffrey
- Version: v1.0 1998/06/02
- Shuffle()
-
- source
-
The size of the source object.
- target
-
The size of the target object.
- comediate(Shuffle)
-
The comediation of two partial shuffles.
- comp(Shuffle)
-
The composition of two (partial) shuffles.
- identity(Obj)
-
An identity shuffle.
- initial(Obj)
-
A initial shuffle.
- mediate(Shuffle)
-
The mediation of two (partial) shuffles.
- morphism()
-
Build a morphism from a shuffle.
- print(Printer)
-
Print the shuffle (useful for debugging).
- shuffle(int)
-
The (partial) shuffle viewed as a (partial) function on integers.
- tensor(Shuffle)
-
The tensor fo two (partial) shuffles.
- terminal(Obj)
-
A terminal shuffle.
- zero(Obj, Obj)
-
An empty partial shuffle.
Shuffle
public Shuffle();
source
public Obj source;
-
The size of the source object.
target
public Obj target;
-
The size of the target object.
shuffle
public abstract int shuffle(int i);
-
The (partial) shuffle viewed as a (partial) function on integers.
- Parameters:
- i - the index ranging 1..target.size.
- Returns:
- the result ranging 1..source.size (0 if undefined).
identity
public static Shuffle identity(Obj X);
-
An identity shuffle.
- Parameters:
- X - the object.
- Returns:
- the identity morphism.
zero
public static Shuffle zero(Obj X,
Obj Y);
-
An empty partial shuffle.
- Parameters:
- X - the source object.
- Y - the target object.
- Returns:
- the empty partial shuffle.
terminal
public static Shuffle terminal(Obj X);
-
A terminal shuffle.
- Parameters:
- X - the object.
- Returns:
- the terminal morphism.
initial
public static Shuffle initial(Obj X);
-
A initial shuffle.
- Parameters:
- X - the object.
- Returns:
- the initial morphism.
comediate
public Shuffle comediate(Shuffle f);
-
The comediation of two partial shuffles.
- Parameters:
- f - the other partial suffle.
- Returns:
- the comediation.
mediate
public Shuffle mediate(Shuffle f);
-
The mediation of two (partial) shuffles.
- Parameters:
- f - the other (partial) shuffle.
- Returns:
- the mediation.
comp
public Shuffle comp(Shuffle f);
-
The composition of two (partial) shuffles.
- Parameters:
- f - the other (partial) shuffle.
- Returns:
- the composition.
tensor
public Shuffle tensor(Shuffle f);
-
The tensor fo two (partial) shuffles.
- Parameters:
- f - the other (partial) shuffle.
- Returns:
- the tensor.
morphism
public Mor morphism();
-
Build a morphism from a shuffle.
- Returns:
- this shuffle as a morphism.
print
public void print(Printer p);
-
Print the shuffle (useful for debugging).
- Parameters:
- p - where to print to.
- Overrides:
- print in class Printable
[all packages]
[package ]
[class hierarchy]
[index]
Shuffle.html


- Niantong Dong U55783192<EMAIL_ADDRESS>- Zixuan Shu U48380935<EMAIL_ADDRESS>- Chen-Wei Weng U58151415<EMAIL_ADDRESS>- Yiqin Zhang U83608825<EMAIL_ADDRESS>A pathfinding algorithm seeks to find the shortest path between two points. This application visualizes various pathfinding algorithms in action, and more! All of the algorithms on this application are adapted for a 2D grid, where 90 degree turns have a "cost" of 1 and movements from a node to another have a "cost" of 1.
For sorting algorithms, we implemented Bubble sort, Selection sort, Insertion sort, Quick sort, Heap sort, and Merge sort. You are allowed to change the size of array, speed of operation, type of sorting algorithm and the number of element.


Given a scenario, identify which virtues or vices accurately describe the person in that scenario.
Example 1:
a. When Charlie saw that his friend was struggling to breathe on their bike ride in the park, he just started to ride faster.
b. When Charlie saw that his friend was struggling to breathe on their bike ride in the park, he decided to slow down.
Answer 1:
a. Character Trait/Virtue/Vice: inconsiderate.
b. Character Trait/Virtue/Vice: considerate.
Example 2:
a. While the family was walking in their neighborhood, they stayed on the sidewalk.
b. While the family was walking in their neighborhood, they walked across people's yards.
Answer 2:
a. Character Trait/Virtue/Vice: law abiding.
b. Character Trait/Virtue/Vice: disrespectful.
Example 3:
a. Everyone visited him at his birthday party but he kept a straight face.
b. Everyone visited him at his birthday party and he kept a welcoming face.
Answer 3:
a. Character Trait/Virtue/Vice: gloomy.
b. Character Trait/Virtue/Vice: lighthearted.
This research study is being conducted by the Steinhardt Group at UC Berkeley. For questions about this study, please contact Dan Hendrycks at<EMAIL_ADDRESS>In this study, we will have you determine whether a scenario exhibits a particular character trait. We would like to remind you that participation in our study is voluntary and that you can withdraw from the study at any time.
Examples:
1. James always gave his employees extra time off at Christmas.
a. gloomy (false)
b. ambition (false)
c. benevolent (true)
2. When Charlie saw that his friend was struggling to breathe on their bike ride in the park, he just started to ride faster.
a. inconsiderate (true)
b. foolish (false)
c. modest (false)
3. While the family was walking in their neighborhood, they stayed on the sidewalk.
a. courageous (false)
b. law abiding (true)
c. angry (false)
Trait 1. {{ trait1 }}
Trait 2. {{ trait2 }}
Trait 3. {{ trait3 }}
Trait 4. {{ trait4 }}
Trait 5. {{ trait5 }}
Trait 6. {{ trait6 }}
Trait 7. {{ trait7 }}
Trait 8. {{ trait8 }}
Trait 9. {{ trait9 }}
Trait 10. {{ trait10 }}


| Type | Count | |
|---|---|---|
| {{facet.value}} | {{facet.count | number}} |
| Amount | Count | |
|---|---|---|
| {{facet.value}} | {{facet.count | number}} | |
|
From
|
To
|
| Amount | Count | |
|---|---|---|
| {{facet.value}} | {{facet.count | number}} | |
|
From
|
To
|


{% extends "core/base.html" %} {% load staticfiles %} {% block text %}
We know you take your health seriously. Having the latest drug related information and tools at your fingertips is a critical part of your overall health and well-being. The information provided by the FDA Drug Monitor is the latest and most relevant in our database. Use it along with your physicians advice to make informed decisions about the drugs you take.
Please note that the information provided here is for reference only and is not intended as medical advice or diagnosis. Always consult your physician before making drug related decisions.
For more information regarding the data sources used on this website, visit www.fda.gov
This application was designed and built by Artemis Consulting, Inc. All source code hosted on github at github.com/artemis-consulting/prototype. For more information about Artemis Consulting, please visit www.artemisconsultinginc.com.
Copyright 2015 Artemis Consulting, Inc.
This website and all source files (the "Software") are made available under the MIT License (MIT).
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.
{% endblock %}


The United
Kingdom Input-Output Analytical Tables 2010 are used for testing the
iotables
package, because they are well-documented and
detailed, organized data is available with them. The analytical tables
are published in an Excel table. A special reader function (which is not
exported) was created to read-in all sheets of the Excel table.
It is unlikely that these tables will be required by other purposes than controlling the package. The UK IO tables for other years are available these are consistent with different Blue Books and there could therefore be important methodological and classification changes. Furthermore, ONS currently publishes ESA2010 compatible SIOTs with analytical tables annually.
<- iotables_download ( source = "uk_2010" )
uk_2010_data save ( uk_2010_data, file = file.path('data-raw', 'uk_2010_data.rda'))
<- iotables:::uk_2010_results_get ()
uk_test_results #saved as package data
For the actual symmetric input-output table (see ) you can use the download function originally designed for the Eurostat bulk downloader.
library(iotables)
data(uk_2010_data)
<- iotable_get (
uk_siot labelled_io_data = uk_2010_data,
source = "uk_2010_siot" )
<- iotable_get (
uk_published_coeff labelled_io_data = uk_2010_data,
source = "uk_2010_coeff" )
<- iotable_get (
uk_published_inverse labelled_io_data = uk_2010_data,
source = "uk_2010_inverse" )
The matrix of coefficients is described on page 14-15 and the data can be found in the Matrix of coefficients (product by product) sheet of the Excel file.
<- input_coefficient_matrix_create(data_table = uk_siot)
uk_input_coeff
<- select (uk_input_coeff, 1 ) %>%
coeff_comparison left_join ( uk_published_coeff, by = "prod_na")
test_that("correct data is returned", {
expect_equal(round(uk_input_coeff[,2:8], 8),
round(coeff_comparison [,2:8], 8)) })
#> Test passed 🎉
Comparing the first 7 columns of the two coefficient matrixes at 8 decimal point precision they are equal. Given the size of the matrixes, not all the matrix is compared here, but such a comparison can be made. However, it is not necessary, because the latter results would show a deviation if parts of the matrix would be different.
The Leontief-inverse is described on pages 16-17 of the article. Again, comparing the first seven numerical columns at 8 digit precision we see that the re-calculated inverse and the published inverse is the same.
<- leontief_inverse_create(uk_input_coeff)
uk_calculated_inverse
<- select (uk_calculated_inverse, 1 ) %>%
inverse_comparison left_join (uk_calculated_inverse, by = "prod_na")
test_that("correct data is returned", {
expect_equal(round(uk_calculated_inverse[,2:8], 8),
round(inverse_comparison[,2:8], 8)) })
#> Test passed 😀
<- uk_test_results %>%
employment_effect_results select ( uk_row_label, `Employment cost effects`)
<- coefficient_matrix_create(
primary_inputs_uk data_table = uk_siot,
total = 'output',
return_part = 'primary_inputs')
<- filter (primary_inputs_uk , prod_na == "D1")
employment_input
<- direct_effects_create( employment_input, uk_calculated_inverse ) %>%
employment_effects gather ( prod, values, !!2:ncol(.)) %>%
mutate ( prod_na = prod ) %>%
select ( -prod ) %>%
left_join ( select ( metadata_uk_2010, prod_na, uk_row_label ),
by = 'prod_na') %>%
left_join ( employment_effect_results, by = 'uk_row_label' ) %>%
filter ( !is.na(uk_row_label )) %>%
select ( prod_na, uk_row_label, values, `Employment cost effects`)
:::create_knitr_table (
iotablesdata_table = employment_effects[1:10,],
digits = 4,
caption = "Comparison of Calculated And Published Employment Cost Effects",
col.names = c("industry code", "row label", "calculated", "published"),
col_width = c(2,11,3,3))
| industry code | row label | calculated | published |
|---|---|---|---|
| CPA_01 | Products of agriculture, hunting and related services | 0,3682 | 0,3682 |
| CPA_02 | Products of forestry, logging and related services | 0,4683 | 0,4683 |
| CPA_03 | Fish and other fishing products; aquaculture products; support services to fishing | 0,2234 | 0,2234 |
| CPA_05 | Coal and lignite | 0,4644 | 0,4644 |
| CPA_06-07 | Crude petroleum and natural gas & Metal ores | 0,1657 | 0,1657 |
| CPA_08 | Other mining and quarrying products | 0,4305 | 0,4305 |
| CPA_09 | Mining support services | 0,1993 | 0,1993 |
| CPA_10_1 | Preserved meat and meat products | 0,4776 | 0,4776 |
| CPA_10_2-3 | Processed and preserved fish, crustaceans, molluscs, fruit and vegetables | 0,5301 | 0,5301 |
| CPA_10_4 | Vegetable and animal oils and fats | 0,3786 | 0,3786 |
The comparison of output multipliers show that our code gives the same results. Only ten industries are shown.
GVA is not shown in the Excel table explicitly, but can be calculated as the sum of corporate income (Operating surplus and mixed income), household income (Compensation of employees) and net taxes on production (not products.)
<- uk_siot %>%
uk_siot2 filter ( prod_na %in% c("B2A3G", "D1", "D29X39") ) %>%
summarize_if ( is.numeric, sum, na.rm = TRUE ) %>%
cbind ( data.frame ( prod_na = "GVA"), . ) %>%
rbind ( uk_siot, .)
<- uk_test_results %>%
gva_effect_results select ( uk_row_label, `GVA effects`)
<- coefficient_matrix_create(
gva_input data_table = uk_siot2,
total = 'output',
return_part = 'primary_inputs') %>%
filter ( prod_na == "GVA" )
<- direct_effects_create( gva_input,
gva_effects %>%
uk_calculated_inverse ) gather ( prod, values, !!2:ncol(.)) %>%
mutate ( prod_na = prod ) %>%
select ( -prod ) %>%
left_join ( select ( metadata_uk_2010, prod_na, uk_row_label ),
by = 'prod_na') %>%
left_join ( gva_effect_results, by = 'uk_row_label' ) %>%
filter ( !is.na(uk_row_label )) %>%
select ( prod_na, uk_row_label, values, `GVA effects`)
:::create_knitr_table (
iotablesdata_table = gva_effects[1:10,],
digits = 4,
caption = "Comparison of Calculated And Published GVA Effects",
col.names = c("industry code", "row label", "calculated", "published"),
col_width = c(2,11,3,3))
| industry code | row label | calculated | published |
|---|---|---|---|
| CPA_01 | Products of agriculture, hunting and related services | 0,6910 | 0,6910 |
| CPA_02 | Products of forestry, logging and related services | 0,7472 | 0,7472 |
| CPA_03 | Fish and other fishing products; aquaculture products; support services to fishing | 0,7076 | 0,7076 |
| CPA_05 | Coal and lignite | 0,6631 | 0,6631 |
| CPA_06-07 | Crude petroleum and natural gas & Metal ores | 0,9048 | 0,9048 |
| CPA_08 | Other mining and quarrying products | 0,7193 | 0,7193 |
| CPA_09 | Mining support services | 0,8963 | 0,8963 |
| CPA_10_1 | Preserved meat and meat products | 0,6751 | 0,6751 |
| CPA_10_2-3 | Processed and preserved fish, crustaceans, molluscs, fruit and vegetables | 0,7251 | 0,7251 |
| CPA_10_4 | Vegetable and animal oils and fats | 0,5628 | 0,5628 |
Turning to multipliers, using the same inputs we get them back with the following code.
<- uk_test_results %>%
empc_multiplier_results select ( uk_row_label, `Employment cost multiplier`)
<- coefficient_matrix_create(
empc_indicator_uk data_table = uk_siot,
total = 'output',
return_part = 'primary_inputs') %>%
filter ( prod_na == 'D1')
<- input_multipliers_create(
empc_multipliers input_requirements = empc_indicator_uk,
%>%
uk_calculated_inverse) gather ( prod, values, !!2:ncol(.)) %>%
mutate ( prod_na = prod ) %>%
select ( -prod ) %>%
left_join ( select ( metadata_uk_2010, prod_na, uk_row_label ),
by = 'prod_na') %>%
left_join ( empc_multiplier_results, by = 'uk_row_label' ) %>%
filter ( !is.na(uk_row_label )) %>%
select ( prod_na, uk_row_label, values, `Employment cost multiplier`)
:::create_knitr_table (
iotablesdata_table = empc_multipliers [1:10,], digits = 4,
caption = "Comparison of Calculated And Published Employment Cost Multipliers",
col.names = c("industry code", "row label", "calculated", "published"),
col_width = c(2,11,3,3))
| industry code | row label | calculated | published |
|---|---|---|---|
| CPA_01 | Products of agriculture, hunting and related services | 2,1111 | 2,1111 |
| CPA_02 | Products of forestry, logging and related services | 2,3892 | 2,3892 |
| CPA_03 | Fish and other fishing products; aquaculture products; support services to fishing | 2,7088 | 2,7088 |
| CPA_05 | Coal and lignite | 1,6419 | 1,6419 |
| CPA_06-07 | Crude petroleum and natural gas & Metal ores | 2,2748 | 2,2748 |
| CPA_08 | Other mining and quarrying products | 1,4642 | 1,4642 |
| CPA_09 | Mining support services | 3,3424 | 3,3424 |
| CPA_10_1 | Preserved meat and meat products | 2,4978 | 2,4978 |
| CPA_10_2-3 | Processed and preserved fish, crustaceans, molluscs, fruit and vegetables | 1,8343 | 1,8343 |
| CPA_10_4 | Vegetable and animal oils and fats | 1,6153 | 1,6153 |
Following from the GVA effects, after summarizing GVA and adding it
to the input requirements we can calculate the
GVA multipliers
.
<- input_multipliers_create(
gva_multipliers input_requirements = gva_input,
%>%
uk_calculated_inverse) gather ( prod, values, !!2:ncol(.)) %>%
mutate ( prod_na = prod ) %>%
select ( -prod ) %>%
left_join ( select ( metadata_uk_2010, prod_na, uk_row_label ),
by = 'prod_na') %>%
left_join ( gva_multiplier_results, by = 'uk_row_label' ) %>%
filter ( !is.na(uk_row_label )) %>%
select ( prod_na, uk_row_label, values, `GVA multiplier`)
:::create_knitr_table (
iotablesdata_table = gva_multipliers [1:10,], digits = 4,
caption = "Comparison of Calculated And Published GVA Multipliers",
col.names = c("industry code", "row label", "calculated", "published"),
col_width = c(2,11,3,3))
:::create_knitr_table (
iotablesdata_table = gva_multipliers [1:10,],
digits = 4,
caption = "Comparison of Calculated And Published GVA Multipliers",
col.names = c("industry code", "row label",
"calculated", "published"),
col_width = c(2,11,3,3))
At last, the comparison of output multipliers show that our code gives the same results. Only ten industries are shown.
<- uk_test_results %>%
output_multiplier_results select ( uk_row_label, `Output multiplier`)
<- output_multiplier_create(uk_input_coeff) %>%
uk_output_multipliers gather ( prod, values, !!2:ncol(.)) %>%
mutate ( prod_na = prod ) %>%
select ( -prod ) %>%
left_join ( select ( metadata_uk_2010, prod_na, uk_row_label ),
by = 'prod_na') %>%
left_join ( output_multiplier_results,
by = 'uk_row_label' ) %>%
filter ( !is.na(uk_row_label) ) %>%
select ( prod_na, uk_row_label, values, `Output multiplier`)
:::create_knitr_table (
iotablesdata_table = uk_output_multipliers [1:10,],
digits = 4,
caption = "Comparison of Calculated And Published Output Multipliers",
col.names = c("industry code", "row label",
"calculated", "published"),
col_width = c(2,11,3,3))
| industry code | row label | calculated | published |
|---|---|---|---|
| CPA_01 | Products of agriculture, hunting and related services | 1,8312 | 1,8312 |
| CPA_02 | Products of forestry, logging and related services | 2,1187 | 2,1187 |
| CPA_03 | Fish and other fishing products; aquaculture products; support services to fishing | 1,6284 | 1,6284 |
| CPA_05 | Coal and lignite | 1,7891 | 1,7891 |
| CPA_06-07 | Crude petroleum and natural gas & Metal ores | 1,4155 | 1,4155 |
| CPA_08 | Other mining and quarrying products | 1,5231 | 1,5231 |
| CPA_09 | Mining support services | 1,5692 | 1,5692 |
| CPA_10_1 | Preserved meat and meat products | 2,2693 | 2,2693 |
| CPA_10_2-3 | Processed and preserved fish, crustaceans, molluscs, fruit and vegetables | 1,9499 | 1,9499 |
| CPA_10_4 | Vegetable and animal oils and fats | 1,6088 | 1,6088 |


--- layout: post title: Rewriting complex queries with simple foreach() calls date: type: post published: false status: draft categories: - MySQL tags: [] meta: _edit_last: '2' author: login: shlomi email<EMAIL_ADDRESS>display_name: shlomi first_name: Shlomi last_name: Noach ---
Do not that you are essentially breaking down a large query into many small ones (typically one-liners). Sometimes this is actually something you want to do!
multi-table update with LIMIT
do something ... where x in (select ...)--> foreach('select ...', 'do something where x = ${1}');


Settings
Units
Use px:
Use em:
Size:
Default Theme
Select the theme to use when linear is launched.
Apply theme to all open rulers


Choose how you view our website:
Mobile (Straight HTML)
Computer (CSS and Javascript enabled)
Developer


Over the last year I have been becoming more and more reliant on Markdown. Pretty much everything I write is in Markdown, most my writing starts in nvALT, whether this is notes from meetings, emails, or anything longer I could be writing.
Writing
As an editor nvALT does a good job, however for anything that is longer than a few hundred words I normally use a dedicated editor. Depending on the nature of what I am writing I would say my top three are: TextMate, Folding Text and iA Writer. TextMate I like because of the autocompletion on the Escape Key, so if I am writing quite a technical document which has a lot of repeated words then it seems the quickest way of writing.
Folding Text I like for outlining, planning out larger pieces of work and writing presentations. I also like the UI, so some of the longer things I write are done here. I think I’m right in saying that Folding Text doesn’t implement OSX’s autocorrect when typing, which I find quite useful, maybe a better typist wouldn’t need it.
iA Writer has the simplest and hence most productive interface. I like to use this in full screen mode when I just want to get my head down and write.
Other things I have tried are Byword, Multi-Markdown Composer and recently Ulysses III. Byword I feel I should like, however have just never got enough traction with. Multi-Markdown Composer I get, but just don’t find writing on it that easy and I haven’t quite got the stylesheets set up correctly yet. Ulysses III to be honest I just don’t get. I saw a couple of good reviews for it, but it really doesn’t work for me.
Previewing
nvALT also has a build it preview window that can be brought up by a key command, this is useful for quick previews, however the best tool I have found for previewing is Brett Terpstra’s Marked. This is just quick and easy, plus you can use different styles including a GitHub one.
To preview an more advanced Markdown or Multi-Markdown Marked is required.
It should also be noted that Multi-Markdown Composer uses a two pane approach, so you write and edit on the left and it previews on the right.
Additional Tools and Services
TextExpander is one of the first things I install on any Mac or iOS device and I have started to build up a library of Markdown related snippets. There are also some good libraries available online from MacSparky and Brett Terpstra, who also has some specific iOS ones.
Brett Terpstra has also built a set of Markdown Service Tools which give you a load of accelerators and shortcuts for writing Markdown. The one I found the most useful was SearchLink which is a quick way to put placeholder links when writing a page and then service will go and serach the internet and complete all the links.
Consuming and Publishing
So that pretty much covers off the writing side of things, the next step is where any of this gets published to. Let’s start with the easy stuff. The majority of what are notes that are consumed by me, so I use nvALT and Dropbox to make sure everything is synced between my two laptops, iPhone and iPad. nvALT has very good search and I would strongly recommend using tags.
We also use GitHub a lot at Rittman Mead, GitHub supports Markdown, so that is pretty easy. It also goes without saying that Octopress publishes Markdown natively, so, again, that is easy.
We also have a Wordpress blog at Rittman Mead, plus we use Zendesk as a knowledge base internally. Both these sites allow you to write posts in HTML, so I generally preview the document in Marked and then copy the HTML to the clipboard.
Quite often I will want to email what I have written. I have three approaches here:
- Convert the note into a PDF, or possibly Word, document and send as an attachment.
- Open up Gmail in Chrome, compose or reply to a mail and paste in my Markdown note and use a plugin called Markdown Here to convert the note to rich text.
- Use OSX’s Mail.app to send the mail, paste in the Markdown and use one of the Markdown Service Tools to convert it to rich text.
For short notes, it seems a bit of an overkill to convert everything to a document and attach it so I tend to use (2) or (3) most regularly. Markdown Here seems to provides a much better rendering of the note, so aesthetically that is my preference, however it breaks my workflow, I generally prefer an email client to a browser and despite trying many different email clients, when I am using OSX I tend to find using the native apps win out, so that means I use Mail.app and Safari most regularly. I find that pretty much another other tool that converts Markdown to Rich Text tends to use Heading 1 sizes that look way too big and some Multi-Markdown features can easily be lost.
I can’t say I really have this figured out, however I can work around it. Ideally I would like a keyboard shortcut to take a nvATL note and create a new Mail.app message with something like GitHub formatting.
Challenges
Anything more complicated than this I am still having challenges with, and am looking for ways to really solve the problem.
Commercial Documents
I write quite a lot of commercial documents at Rittman Mead, in the form of proposals, statements of work and commercial/legal agreements. I will often draft these in Markdown, ideally I want to then press a button, use a keyboard combination or even run a script and these will be output to a formatted PDF document.
I believe all documents a company outputs should be a high quality. Previously I used Pages and Word for this. I could write fairly well formatted in Pages and the export to PDF function gave a true rendering of the Pages document. The main problem I had with this was that:
- I much preferred writing in Markdown;
- I wanted to separate the content from the formatting, so if we changed our look and feel, or if the proposal needed to be written from the US office this was regeneration, not re-authoring;
- there is not a seamless integration of Pages between iOS and OSX, whereas there is for text files.
- Pages files, despite how good Spotlight is, don’t have the same ease of search as text files in nvATL.
Formatted Output
Currently my best approach to this problem is to us a command line utility called Pandoc which is a multipurpose converter that happens to take Markdown as an input and you can select various outputs such as PDF, ePub or Word.
The reason I started using Pandoc was because when I exported to PDF from Marked I found it followed more of a web page paradigm, so there was:
- no concept of pages, just one long PDF document;
- no way to have headers and footers in the document. I would typically use these to contain the company logo, a document reference, date and page numbers.
Pandoc gave me this ability, however the Markdown to PDF conversion uses LaTex. This means I had to learn a bit of LaTex to be able to create the formatting, headers and footers that I needed and also the document has a bit of a LaTex look and feel to it.
One quite major issue I had with Pandoc was using tables in the Markdown. Pandoc didn’t ever wrap the text, so if you had a table with a lot of text in, it just disappeared of the side of the page. This was a pretty big problem for me.
Word
My use of Word was solely driven by clients requiring to review and red line commercial and legal documents using Word’s Track Changes feature. I am sure a large proportion of sales of the cash cow that is Microsoft Office is driven by corporate needs like this.
Pandoc also does a pretty good job of generating Word documents, and even has the option to base the formatting on another Word document, where it will pick up the Heading 1, Normal and other common styles from the template document.
Collaboration
I also need to write collaboratively. Google Docs is excellent for this allowing for real time multi-user editing, however provides absolutely no support for Markdown and I really struggled getting Markdown documents formatted and uploaded to Google Docs.
My current best approach is to create private Gists and share the URL with other collaborators. Gists can be written in Markdown and GitHub offers a great diff utility that I find far easier to read than Word’s Track Changes. This approach is asynchronous, as opposed to Google Docs’ real time, synchronous editing.
I recently read about Draft and have signed up for an account, but have yet to try it in anger.
Next Steps
The real challenge I have is to get well formatted PDFs from Markdown to do this I will either continue looking at Pandoc and LaTex, however I think I may have reached the limits here, without changing the type of Markdown I write, or start to look at customising the CSS previews for Marked, though I have no idea if things like headers and footers will be possible. I do seem to remember that the PDF export from Byword was a multi page PDF, so that at least must be possible.
Source Control
One final idea I’m thinking about at the moment is to create a GitHub repository out of the directory where all my text (Markdown) files are kept. Although Dropbox does a great job of syncing files and keeps an incremental history of every save, I’m thinking the ability to checkpoint files could be useful. One thing I don’t know however is how well Dropbox and GitHub play together.
To Conclude
I now use Markdown to write everything, or at least everything I write starts out as Markdown. Where the output can be in Markdown or HTML then this works amazingly well. However where my workflow requires a more complex output, or I need to collaborate with others, then there are still a few challenges to resolve before the process is seamless.
It should also be noted that there is a growing number of resources available to augment writing in Markdown, some of which I have mentioned above. Using Markdown and these resources has significantly improved my productivity and made writing far more enjoyable.


{% extends "bootstrap/layouts/base_navbar_responsive.html" %} {%- from "bootstrap/forms/macros.html" import render_field %} {% block title %} {{ title }} {% endblock %} {% block content %}
Save Delete


--- layout: page title: About header-img: "img/about-bg.png" ---
I'm a 27 year old student at Flatiron School who hopes to bring the skills i learn to the Design/Fashion industry and create history.


The beak of the raven cawed loudly against the bleak and foreboding sky, its loud creak reverberating across the landscape. [G|D]
At daybreak, the villagers were shocked to see a freakoutbreak of an unfamiliar species that had never been seen before. [G|D]
He tried to sneak past undetected, the sound of his shoes squeaking against the polished floor and his white shirt leaving a distinct streak marking his path. [G|D]
The carpenter carefully sanded the teak wood, making sure to tweak each piece until it was flawless, knowing his work would inevitably wreak havoc on the budget. [G|D]


§353-18 Director to fix committed persons' compensation. The director, by rule, may classify, grade, and fix earnings to be paid to committed persons who may be confined in any correctional facility of the State. [L 1987, c 338, pt of §3]


Colorado Rapids acquire Ghana’s Lalas Abubakar from Columbus Crew
Major League Soccer side Colorado Rapids have acquired Ghanaian centre-back Lalas Abubakar from Columbus Crew.
The 24-year-old was signed in exchange for $400,000 in General Allocation Money (GAM) and a 2020 international roster spot.
He joined the Rapids on loan from Crew SC midway through the 2019 season.
The rasta-haired guardsman made 22 appearances for the Rapids, all starts, and was selected as the club’s Defensive Player of the Year.
Prior to his arrival in Colorado, Abubakar spent two seasons with Crew SC where he recorded 35 appearances and scored two goals for the club. He was selected by Columbus in the first round (fifth overall) of the 2017 MLS SuperDraft presented by adidas.


gint (expr, dim1, dim2)
general integral, similar to the ave
function except the result is not divided by the total area.
expr
- any valid GrADS expression dim1
- the start point for the integraldim2
- the end point for the integral dim1
and dim2
are standard
GrADS dimension expressions whose dimensions must match.


How it works?
Logistic Regression
Logistic Regression also know as the sigmoid function is used commonly. Don't be fooled by the name this is not regression but classification. From keras deep learning to many machine learning tasks. The formula being depicted here multiples the X(input) by the corressponding coefficents and is raised to the negative exponent of 1.
Why is it only between 0 and 1?
Continous output will be an impossible achievement because of the lack of data. Using a bound of 50 to decide between 0 and 1.(Whether the day is good or bad)
Why not use a deep learning model?
Machine learning models can be milisecond predictions unlike deep learning models. Deep learning models need a lot of data as they are very complex.
Evaluation
Confusion Matrix
Accuracy
With this Logistic Regression model we got a 98% on our accuracy.
Correlation Matrix
Countplot
Data Types
Format
JSON FILE
304 kb
Orientation Split


Snapchat steals FaceApp’s most viral feature
Not Quite 4 Million Outcomes
by Michael AllisonSnapchat is stealing FaceApp’s most memorable feature this year with the launch of Time Machine. No, you won’t be able to travel back in the time and fix your mistakes. What Time Machine does is ls let you pick a time and age or deage yourself as required. Let me run this by you again; you take a selfie and pick one of five options. It ranges from very young all the way to very old, so you’ll be seeing only a limited part of your life. It’s also crap quality wise, but really fun if you’re in the target audience.
The caveat that you’re giving you photo data over to Snapchat still exists like with FaceApp. That said, if you were using Snapchat, you were doing that anyway, so there’s nothing to worry about that didn’t exist anyway.
Here’s a sample of the feature below:
Snapchat’s Time Machine is rolling out now.


Introduction
blobs.io has a public, read-only API that can be accessed by anyone. Whether you want to implement blobs.io statistics in your app or write a simple CLI tool that displays who's playing, this page should give you an overview of all available endpoints. The API can be accessed through /api/


{% extends 'indabom/base.html' %} {% load materializecss %} {% block head-title %}Select a plan{% endblock %} {% block title %}Select a plan{% endblock %} {% block content %} {% load static %}
Gain access to multi-user organizations, prioritized support, and fully managed BOM management software.


I have a temperature node input, and the following processes;
1. x 0.1
2. Log to feed (Timestore)
3. max value
4. min value
5. x 1.8
6. + 32 (To convert temp to degF)
7. Log to feed (Timestore)
However, although the feed page displays the temp in degF, the Raw Data graph is blank, and the Timestore.log shows millions of these lines;
20130910-20:32:19:ERROR:tsdb.c(135): Error opening metadata<PHONE_NUMBER>000084.tsdb: No such file or directory
20130910-20:32:19:ERROR:http_tsdb.c(699): Invalid node
Feed 84 corresponds to process 7 - Log to Feed.
I've tried deleting the feed/process, but whenever I re-add it, I get the same result (with incrementing feed id of course). All other existing feeds are OK, and no other errors reported.
Paul
Re: Timestore error being reported
...In fact, it's not unique to the temperature node described above. Any new feed that I create is exactly the same and the same error message is logged.
Paul
Re: Timestore error being reported
Sorted thanks to Trystan.
Make sure that your Timestore admin key is the same as contained in your settings.php file!
Paul
Re: Timestore error being reported
Glad to hear yours is now ok Paul, will have to check mine out tomorrow. I'm convinced that my admin key was correct though, as it was one of the first things I checked.
Re: Timestore error being reported
is it changing ?
sudo ./timestore causes the key to change when I tried it a couple of times
Dave
Re: Timestore error being reported
It shouldn't do now, if you are using the latest timestore.
Paul
Re: Timestore error being reported
Paul
My install of Sat evening using the from scratch install quide and checking for updating timestore says that everything is at latest and up to date 2350 - maybe something else up as I have no graphs as mentioned by others
Additionally the processes may be running but it looks like no data is being stored in the database as the size which started at 0.3M is still at 0.3M 10 hours later.
(Updated sun)
Dave
Re: Timestore error being reported
Provided you cloned it from https://github.com/TrystanLea/timestore you should have the latest version.
Can you try this again (although you probably have already);
and ensure that this key is exactly the same as in your settings.php file.
Reboot your Pi, to ensure that the adminkey has been read correctly by the system.
Then try;
and it should report that it's running.
Paul
Re: Timestore error being reported
Paul
I can confirm that the installed followed the Emoncms on the Raspberry Pi - Build from scratch. All instruction are cut and paste into Putty. The time store database cloned from TrystanLea/timestore. This was confirmed as up to date using the git pull origin master instruction higher in the thread above.
The admin key is identical - again cut and paste. The only difference from the instruction is an addition of a semicolon following the close quotes - I followed the manual religiously the first time round !
Time store reports that its running
sun evening - When setting up and modifying feeds it is possible to select MYSQL - for a brief moment, then it switches back switches back to Time store. When feeds are adjusted to daily then the graph frame draws. My challenge is still to get it drawing graphs but it look to me as if it receives data correctly but does not store data - any ideas?
Dave
Re: Timestore error being reported
Dave, have you had a look in the timestore error log?
I would expect 'DAILY' feed graphs to draw, as they are stored in MySQL not timestore.
I PM'd you earlier.
Paul
Re: Timestore error being reported
Quite a lot !
of error messages like:
20130921-20:47:33:ERROR:tsdb.c(135): Error opening metadata<PHONE_NUMBER>000001.tsdb: No such file or directory
20130921-20:47:33:ERROR:http_tsdb.c(699): Invalid node
Thats a similar message to yours at the top of the thread -
I checked the key and it was ok - cannot do that now but will check this evening.
Thanks for idea
Dave
Re: Timestore error being reported
I know that you had some permission issues previously, could you also try re-installing php5-curl just to make sure that it did install correctly.
Paul
Re: Timestore error being reported
The command runs confirming php5-curl at newest version
You have picked up correctly I had problems with the permissions previously - in the end these were overcome by reinstalling the complete package from scratch - I don't think I ran, as per instructions, the first command sudo apt-get update.
I have rechecked the timestore admin key equals exactly the same as in settings.php
Dave
Re: Timestore error being reported
Same problem here. I come from thread http://openenergymonitor.org/emon/node/2812


Getting Started Developing KUnit¶
Setting Up Your Work Environment¶
Follow the instructions at Using KUnit.
Familiarize Yourself with KUnit’s Design¶
KUnit’s design is discussed in the KUnit Design section.
Contributing to code in the Linux kernel¶
Please follow the guide in the Linux kernel: https://www.kernel.org/doc/html/latest/#introduction-to-kernel-development
In addition, remember to CC<EMAIL_ADDRESS>and<EMAIL_ADDRESS>Contributing to code outside of the Linux kernel¶
This section is for contributing code to repos that live outside of https://git.kernel.org.
Why is there a distinction?¶
The Linux kernel has been around a lot longer than KUnit, and thus has rules that we have no say on. However, any code that lives outside of the kernel is managed by Google; it’s open source and everyone has equal right to it, but because it is under the Google umbrella and not the Linux Foundation’s umbrella it means that there are certain rules we have to follow in one place, and different rules in the other.
The details are not important, all you have to know is that if you send code to the Linux kernel you should follow the rules above, and if you are contributing to any other KUnit repos, you should follow the rules here.
If you still have confusion, feel free to reach out to us.
Sign the Contributor License Agreement¶
For any contributions not sent directly to the Linux kernel via the Linux kernel mailing lists, we require contributors to sign our Contributor License Agreement (CLA).
You may sign our CLA here: https://cla.developers.google.com/
Note
Your company may already have a CLA on file with Google.
Submitting Changes¶
We use Gerrit for all non-upstream code reviews.
In order for Gerrit to accept your change, you must first make sure your commit messages are formatted correctly. It should have a:
Change-Id
- see https://gerrit-review.googlesource.com/Documentation/user-changeid.html for more information.Signed-off-by
- see https://www.kernel.org/doc/html/latest/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin
Now you are ready to send your change for review:
git push -u origin HEAD:refs/for/master
For more information on submitting changes through Gerrit, please see the following section Gerrit Workflow.


Name: Body: Name: To: Cc: Subject: Attachments: Body: First Name: Last Name: Full Name: Phone: Email: Business: EAN: Comments: Tools Utilities Clear Cookies Settings


This is React-Spotify
, a React front end client that
communicates with the Spotify API.
See it in action here.
If you wish to run the code locally run the following.
yarn
yarn start
visit http://localhost:3000
You can also run as an electron app by running
yarn run electron-start
.
Please note that the Spotify API only provides 30 second audio snippets. It may be possible to get the full track by using the Web Playback SDK.
Released under the MIT License.
Check LICENSE.md for more info.


Here at Drew's Game Corner we strive to go above and beyond when it comes tosafety and sanitation standards
Help us win more awards by picking up after yourselves when you visit!


Modern industrial automation is developing its market at a rapid pace. This is directly related to the development of the fourth industrial revolution - Industry 4.0. It is the amalgamation of industry and digital technology, resulting in smart factories or factories and digital manufacturing. The main challenge for Industry 4.0 is not to change what it makes, but how it is produced.
The leading change, of course, is the movement towards a decrease in the number of elements involved in the control system and tracking of technological processes. For example, the creation of a SCADA system, which allows combining the functions of a PLC and an operator visualization panel, which directly simplified and reduced the cost of the control cabinet for technological processes.
At this stage, key changes in familiar technologies are being made by merging two areas: industrial production and digital technologies. Soon, the condition for the functioning of any production will be the direct information interaction of various installations and devices. This kind of technology is called machine-to-machine interaction (M2M) and closely overlaps with the industrial "Internet of Things" (IIoT). The concept of this innovation is the exchange of data between all departments of the enterprise (enterprise specialists, executive components, ERP systems, robots, products and other installations) that are involved in the production chain.
Since Industry 4.0 allows the massive introduction of cyber-physical systems into production, global process automation and endowing devices with artificial intelligence, this has a direct impact on reducing the cost of the product and increasing productivity. In addition, already at this stage, many manufacturers are introducing personalized production, for example: Nike provides the opportunity to order sneakers with your pattern.
Based on all these possibilities, there are four main principles that are changing Industry 4.0:
1. Compatibility - all devices and machines must be able to communicate with each other in one language, through the "Internet of things", have direct compatibility;
2. Transparency - creating a digital copy of a product, collecting data from microchips and sensors through which devices communicate;
3. Technical support - the software collects, analyzes, organizes, visualizes data received from sensors, and helps a person make decisions or makes them automatically, thereby freeing up human resources;
4. Decentralization of management decisions - automation of various decisions by systems, maximum complete substitution of people.
The food industry is one of the areas for which the introduction of new technologies is vital, as it provides a number of advantages:
- Increase in productivity;
- Improving the efficiency of the production process;
- Reducing operating costs;
- Ensuring a high level of security;
- Minimization of the human factor;
- Improving product quality;
- Reducing the likelihood of manufacturing defects.
An example of the introduction of new technology into a production line is the Eaton SmartWire-DT communication system, which is used in an automated processing line for poultry cutting. This system unites in a single network various automation components and low-voltage actuators located in the control cabinet and outside it. The switching system distributes power and control signals over a single loop. The connection between SmartWire-DT and the PLC is provided by a router. SmartWire-DT is used to save space in production, reduce product costs and increase equipment functionality.
But there is also a negative side to the development of the fourth revolution. Automation of processes leads to the release of jobs; it is necessary to retrain specialists for other types of activities. The importance of low- and medium-skilled labor will decline, which will lead to a decrease in income and material wealth of the middle class. Low purchasing power of the population will lead to low demand, which will reduce the profitability of enterprises. Since this stage of industrial development is mainly the digitalization of production, there is a danger of hacker attacks.
However, at this point in time, the merger of technologies allows: to change the root processes of production, consumption and cultivation; optimize machinery, reducing and eliminating the risks of failure affecting the production line. Also, with the help of modernization of production technology, it is possible to ensure the leadership of the enterprise in the Russian market. Today, there are enough specialists and companies in Russia for the Industry 4.0 concept to be implemented at existing enterprises. Technologies such as SmartWire-DT will optimize your workflow for all industry specifics.
Competence Model for Industrial Automation
INDUSTRIAL AUTOMATIONGlobal economic evolution, driven by industrialization, has led to the creation of demand-oriented consumption centers as well as industrial sectoral clusters. While technological inventions have spurred the development of the industrial sector, global economic expansion has led to the emergence of a myriad of industrial products and goods designed to meet basic and non-basic needs and requirements. The continuous development of technology over the past two centuries has greatly influenced our lives and changed the paradigm of the industry.
A REVOLUTION IS COMING: THE MAIN AREAS OF DEVELOPMENT OF INDUSTRIAL AUTOMATION
INDUSTRIAL AUTOMATIONProgress does not stand still. This concerns, not least, the automation of production processes. Industrialists and equipment developers want to know what technologies to expect in the coming years, what technical innovations to save money for in the first place, what to look for when organizing the work process at the enterprise. The text below is about that.


--- layout: post title: Orëveriel Foolishly Ignored date: 2014-10-02 19:10:54.000000000 -05:00 categories: - Personal - Silly Stories tags: - imaginary friend - orëveriel - quenya - silly story - vanyánan status: publish type: post published: true author: ---
I gave Orëveriel a hard time about the the whole shaving fiasco as reported in my previous record.
In Orëveriel's defense, occasionally, randomly almost, she gets things correct. And, often, these are the times I choose not to listen to her. This morning, for example.
Orëveriel was in her usual spot in the middle of the living room. Only, this time she was a giant calico cat. A six foot long calico cat. And did I mention she was wearing a neon orange rain jacket. This detail was difficult to miss.
I had not even put on my glasses, or changed into my work clothes, or brushed my teeth, when she said, "You should drive to work today."
I was still sore at her, so I ignored this suggestion and went about my normal morning routine, which now, tragically, included an obligatory morning shave. As I left the bathroom, holding a towel on my face, she had moved to stand, blocking the door, on her hind legs, paws on hips, bent at the waist.
"You really, really should drive to work today."
I lost it.
"Just like I really should shave? Really should grow mutton-chops? Really, really ought to go work in Mexico? No thanks. I can screw up my own life without your help." A tad melodramatic but that did the trick. She said something along the lines of "You sure can" and took her leave.
I took the train to work, like I always do, and everything went swell, until I left.
Turns out, there was a thunder and hail storm while I was at work. And all the trains were just sitting there, on the tracks, doing nothing for about an hour and half after I got off work. I am only just now coming within 10 minutes of the train station near my home, having left the office nearly three hours before. Giving up on the trains Dallas inner-city trains, I walked 3 miles to the transfer point for the TRE, which thankfully was only about a half hour behind schedule.
Sitting next to me on the train is Orëveriel, a six-foot tall erect calico cat, wearing a now soaked rain-coat and sipping hot tea (I know not from where) from a porcelian tea cup (from I know not where.) She hasn't said anything yet. She just looks at me, with the smug superiority that seems to always on the face of all cats.
I no longer look like me. I look like a very cold, very wet baby. And she, as a smug, self-satisified cat with a silent "told you so" expression, looks like no one except Orëveriel.


chirps provides the API Client for Climate Hazards Group InfraRed Precipitation with Station Data (CHIRPS) via ClimateSERV. CHIRPS is a 35+ year quasi-global rainfall data set. Spanning 50°S-50°N (and all longitudes) and ranging from 1981 to near-present (normally with a 45 day lag), CHIRPS incorporates 0.05° resolution satellite imagery, and in-situ station data to create gridded rainfall time series for trend analysis and seasonal drought monitoring.
The development version can be installed via
library("remotes") install_github("agrobioinfoservices/chirps", build_vignettes = TRUE)
Fetch CHIRPS data from three points across the Tapajós National Forest (Brazil) from Jan-2017 to Dec-2017. Then calculate the precipitation indices over the timeseries using intervals of 30 days.
library("chirps") lonlat <- data.frame(lon = c(-55.0281,-54.9857, -55.0714), lat = c(-2.8094, -2.8756, -3.5279)) dates <- c("2017-01-01", "2017-12-31") dat <- get_chirps(lonlat, dates) p_ind <- precip_indices(dat, timeseries = TRUE, intervals = 30)
The full functionality of chirps is illustrated in the package vignette. The vignette can be found on the package website or from within R
once the package has been installed, e.g. via:
vignette("Overview", package = "chirps")
While chirps does not redistribute the data or provide it in any way, we encourage users to cite Funk et al. (2015) when using CHIRPS.
Funk C., Peterson P., Landsfeld M., Pedreros D., Verdin J., Shukla S., … Michaelsen J. (2015). The climate hazards infrared precipitation with stations—a new environmental record for monitoring extremes. Scientific Data, 2, 150066. https://doi.org/10.1038/sdata.2015.66.
Please report any issues or bugs.
License: MIT.
Get citation information for chirps in R by typing citation(package = "chirps")
.
You are welcome to contribute to the chirps project. Please read our contribution guidelines.
Please note that the chirps project is released with a Contributor Code of Conduct. By participating in the chirps project you agree to abide by its terms.


March 3rd, 2016
By Eric Gumerlock
Ruby Hashes vs Javascript Objects
Although they might look extremely similar, Ruby and Javascript have noticeable syntax differences, especially when it comes to nitpicky notation such as the “;” that is necessary at the end of Javascript statements. While there a number of differences in Ruby and JS, I am focusing on explaining the difference between the Ruby hash and the JS Object. Lets start off with the similarities, as they do roughly the same thing - handle composite data structures that can include many different kinds of information (strings, classes, symbols, arrays, other hashes, etc. They look alike given by their literal notations:
# Ruby hash:
book = {
name: “A Wrinkle in Time”,
year: 1963,
length: 500,
publisher: “Farrar, Straus & Giroux”
}
// JS object:
var book = {
name: “A Wrinkle in Time”,
year: 1963,
length: 500,
publisher: “Farrar, Straus & Giroux”
};
Nearly the same! Aside from a few more details required in the JS Object. Accessing their values is also similar, but actually has quite different syntax.
# Ruby hash:
book[:year]
=> 1963
// JS object:
book.year;
=> 1963
Very similar so far, as both consist of a property and a value for that property. However, the assigner is referred to as a key, whereas in JS it is called a property, but in the end they both find the same value. The difference here is that in Ruby, keys can be any data type (symbols, strings, etc), but in JS the properties are simply standardized as that: properties of the object that can be called upon by their relative methods.
Yet, the similarities keep popping up - both in Ruby hashes and JS objects the values can be nearly any data type (arrays, hashes, strings, numbers, booleans). One major difference is that properties in JS can be functions, whereas Ruby hash values cannot be the Ruby equivalent, methods. This is definitely an advantage for Javascript, but this doesn’t make Ruby lesser at all. We would code this into JS like so:
// JS Object
book.read = function() {
console.log(“You are about to read” + book.name)
} ;
book.read();
You can see in this example that book.name is referred to in the printing statement quite easily. Also, this entire function is saved as a property in the book object. As Ruby cannot save a method as a value, you would have to create the method as a separate entity from the hash.
# Ruby
def read(book)
puts “You are about to read #{book[:name]}”
end
read(book)
This code is disconnected from the hash altogether, and also the reference to book[:name] value is quite a bit harder to type that the one in JS. This is fixed in Ruby with classes, which gives the ability to reach values in a similar fashion to the one in JS. For quick and simple references to property values, I think JS wins on this one.


How Git Manages Conflicts and Collaboration
Sometimes when you’re slogging through a long writing or design project, you’ll pause – perhaps because you’ve just had a few drinks – and wonder, if I could just nuke this page/section/entire folder from orbit, I could have a clean slate for some new inspiration. So you take ten minutes, or an hour, to carefully back up your project, and then move the unwanted files to carefully labeled folders just in case you need to refer to something in the cluttery crap.
But then after a day or so, you might realize: having a clean slate didn’t help at all…now where did I put those trashed sections? The ensuing annoyance and/or panic is enough to keep you from ever radically experimenting again.
A Git/Github repo is, again, essentially just a folder of files, no different from past projects you’ve worked on. But they have inherent, built-in features that make it possible to revise, trash, and experiment with (almost) no regrets or anxiety. These features are key to how Git/Github have revolutionized open-source collaboration. But even if you plan to work alone, these version control features can still reduce anxiety and inconvenience.
TK: chapter in progress, more text to come
Conflicts
Note: If you’re working alone and on a single computer, you may never run into a “merge conflict,” just as you (hopefully) wouldn’t erase your own files while copying them the old-fashioned way. But just in case, this is a quick walkthrough on how Git protects you from accidentally wiping out data.
I don’t intend to get into Github’s full suite of collaboration features (they’ve got guides for that). But if you can clone once, you can obviously clone your repo from more than one computer. Which means you can edit and sync files from multiple computers.
So what happens when two different computers clone a repo, edit the files, and then try to sync with Github.com?
These sync-related conflicts a basic pain when it comes to working on Git-managed projects. But hell, they’re a major pain for any project that involves more than one person. You’ve probably run into this when a colleague has accidentally saved over one of your files.
One side-effect of managing your project through Git (actually, most would consider it Git’s raison d’etre) is that, automagically and behind-the-scenes, Git will keep track of changes and conflicts.
Placeholder images
Deleting files
Let’s see what happens when we just delete a whole bunch of files…which is what we want to do now because we want to build a website from scratch, not from the pre-fab HTML files we’ve been working with so far.
More text, to be continued…TK
Rolling back
More text, to be continued…TK
Things we’ve learned
- Why Git (and Github) is ideal for collaboration and experimentation
- How to handle conflicts
- How to delete everything
- How to rollback big mistakes
…to be written


One of the thinks that is important to consider when designing and creating IoT solutions is edge computing. So, can we leverage Pentaho Data Integration for edge processing?
Pentaho Data Integration On the Edge!
Most of the times you don’t want to send all the data from all the sensor to a central deposit, but only send the data. Edge computing allows is useful in many use cases and one example is to have data produced by Internet of Things (IoT) devices processed closer to where it is created instead of sending it all across long distances to data centers or clouds. If we do edge computing we will definitely save on costs, faster response time creating a better overall solution that is still capable of fulfilling project requirements.
Here, you will find a simple article on the subject.
You may ask, how “big” will be my edge device or gateway and how much will I need to perform on the edge? Well, that depends on your goals and project requirements, but I almost bet that you can now think on many ways to improve your solution. Anyhow I am sure that for edge we usually want some technology that is light and performant, easy to develop with.
You might struggle to find many edge solutions that will perform all operations you need, so most of the times you will find that most time you need to get hands dirty and create some custom code.
To reduce your solution time to market, you can also make use of tools that will allows you to save time when it comes to data processing and analysis and apply artificial intelligence on it. One of those tools is Pentaho Data Integration.
One of the problem of amazing tools is that they get big and sometimes they provide much more then we need for simpler, anyhow more complex tasks.
So, can we use Pentaho Data Integration for Edge Computing?
The answer is off course, yes, we can!
But PDI is a greater and more advanced tool with much more features and functionality that we need for edge computing, so why not using only what we can, having a tiny data integration tool were you just add what you need? Of course, that if you still need more than its core components or parts, you should be able to do it. I guess that the solution would be to start from base and core functionality and add the components and/or plugins we need for specific operations.
On Edge devices or gateways you will probably be executing Kitchen, Pan or even Carte. The use of OSGI and some plugins that are included by default makes Spoon and associated command line tools to be a bit slow at start. So, we need to do some adjustments on Pentaho Data Integration and use a lighter but still powerful version of it.
Let’s get to the point and check what it can be done on that sense
First, I need to raise a warning, this is totally unsupported by Pentaho, so you need to do/use it on your own risk!
Second, I need to set some of the goals/objectives:
- Start with core and base kettle tool that provides essential functionality for edge processing;
- The goal was to find an easier solution, and avoid having to recompile kettle on every change;
- To be able to re-include plugins as we need;
- Consume as less memory, cpu and disk space as possible.
Let me know if you find issues and please contribute with improvements. Share experiences and feedback while using it! We can make it much better, I just spend couple of hours putting this in place, so I know that lots of improvements can and must be done.
Getting PDI on a diet
Looking to plugins and some of the functionality under OSGI, it’s not required for edge computing, so, I have removed OSGI and OSGI plugins plus plugins that you might add later without any issues if we need to use them. You must be aware that by removing OSGI, you also remove some of PDI functionality, but you might be completely fine with that. You won’t be able to connect to repository, won’t be able to use Big Data shims, Yarn, Adaptive Execution Layer (AEL), Data Lineage and remote execution.
Yes, I will miss DET, but I can survive with that. I can even do development with a version were OSGI is available but having proper continuous integration process in place to perform proper testing using edge version.
Also, there are plugins that most of the time we don’t use, and that most of the time wont be required for edge computing.
Less than 160MB of Pentaho Data Integration to be used!
I have reduced components to a core and had not to recompile Kettle. So, now I do have a Kettle solution that takes less than 160 MB of disk space and consumes less computing recourses so better efficiency while doing edge processing, just by running and maybe designing your kettle transformations and jobs on the edge.
So, what were the main transformation I did?
Removing OSGI and dependencies
We can remove Karaf/OSGI listeners but there are still some dependencies on the code that will break spoon during startup. Even if it works well on kitchen and pan, spoon would break, and I wanted to have spoon also running. So, I had to remove some “dependencies” from PentahoSystem.java class and recompile it. But that’s how much I had to do to have a lightning startup also on Spoon. No need to recompile PDI code, only had to replace the jar file from Pentaho Platform Core.
Plugins removed:
I’ve removed most of the plugins that are inside the plugins folder except for essential as json, xlm, platform utils, core plugins, dummy (yes we should avoid using it, but it is quite useful sometimes)
Samples were also removed to save disk space and have faster deploy process. Karaf folder was completely removed.
I will make the list more accurate and precise once time permits. The list will be available in this github repository, I have called the repository “Orlo”, that is edge in Italy, where I was when worked on this.
How to install it and run Spoon, Kitchen, Pan and Carte?
You can find a zip file with thin PDI using this link
Once you download the zip file in here you just need to unzip and start Spoon, Kitchen and Pan from the command line as you would to it normally, just like the example below. Don’t forget to optimize JVM memory, point to specific Kettle Home folder, etc..
sh kitchen.sh -file ../etl/job.kjb -level Error -logfile ../joblog.log
You will see the job/transformation is started instantaneously, and no starting overhead. If you measure the execution time (by any mean you might have), plus memory and cpu (that you easily do using jconsole) you will be able how much you’ve improved.
Unfortunately, I had to leave Windows out of this, anyhow as for now I don’t see windows as the operating system for edge computing. Just a reminder that you can still develop the transformations and jobs in Windows but having proper tests in place to make sure that you’ve developed will work on the Edge version of Pentaho Data Integration.
Have fun creating jobs and transformations to be used on edge Computig on small and scarse resources devices.
NOTE: This is great solution not only for edge computing but can also be used in solutions that uses “serverless” and part of the backend, as Dan Keeley has already mentioned on a post on his blog. Some other uses cases are cloud and elastic computing that I will later write a post about it.
Follow me at:


Our app will help you to take care of your favorite vehicle.
Record your expences. Beepster will remind your about next scheduled service and insurance renewal.
How much is car ownership costing you per month? Beepster will give you exact answer.
Use only the best gas stations to fill your car. Beepster will understand your location and show best gas next to you.
Write gas stations reviews and read reviews of others.