Enrolled as a Software Engineering student at Minho University
2004
Learned about the wonders of beer
2010
Started life as a working man
Present day
Being awesome
What have I been doing?
Intern - Plako
Turning a PSD design into a fully-functional website, making use of home grown Portal and CMS.
Maintain and develop core modules of said applications, as well as live websites
Main Technologies:
Javascript
30%
HTML
15%
CSS
20%
PHP
25%
XUL
10%
Nov 2010 - July 2011
Junior Web Developer - Farfetch
Part of the Partners/Portal Team, responsible for creating/maintaining new and existing partner websites, as well as farfetch.com
Main Projects
Multi-faceted asynchronous catalog browser
Infinite scroll editorial page
Full-screen image zoom plugin
Main Technologies:
Javascript
40%
HTML
15%
CSS
15%
.NET
30%
Sep 2011 - Sep 2012
Web Developer - Farfetch
Part of the Portal team, responsible for maintaining and driving the product’s new features. Working alongside UI, Design and UX teams using SCRUM methodologies.
Main Projects
Qubit OpenTag integration
Clickstream (streaming server and collector pixel)
Parallax homepage
Recommendation engine integration
Main Technologies:
Javascript
50%
HTML
10%
CSS
10%
.NET
30%
Sep 2012 - Sep 2013
Senior Web Developer - Farfetch
Part of the Partners/Portal Team, responsible for creating/maintaining new and existing partner websites, as well as farfetch.com
Main Projects
Multi-faceted asynchronous catalog browser
Infinite scroll editorial page
Full-screen image zoom image plugin
Main Technologies:
Javascript
60%
HTML
10%
CSS
10%
.NET
20%
Sep 2013 - Feb 2014
Senior Web Developer - Farfetch
First engineer part of the newly-created Labs (R&D) team, responsible for practicing and promoting innovation across the organisation.


Tesla surges after Elon Musk says more than 200,000 people have ordered the controversial new Cybertruck
by Carmen Reinicke- Over the weekend, Elon Musk tweeted that pre-orders were rolling in for Tesla’sCybertruck and reached 200,000 as of Sunday.
- Shares of Tesla traded up as much as 5% on the news early Monday.
- The pre-orders come after the Cybertruck’s rocky reveal last week when the vehicle’s shatterproof glass windows were broken in a live demonstration, sending the stock down.
- Watch Tesla trade live on Markets Insider.
Tesla’s rebounding after its Cybertruck disaster sent shares slipping last week.
Shares of the electric-vehicle maker were up as much as 5% in early trading Monday after Elon Musk tweeted Sunday that 200,000 people had pre-ordered the electric pickup.
The tweet followed an earlier message from Saturday in which Musk said that only 48 hours after the Cybertruck reveal event – where the vehicle’s “shatterproof” windows were accidentally smashed in a demonstration – as many as 146,000 people had pre-ordered the truck.
The glut of orders also comes after Wall Street’s less-than-rosy reaction to the Cybertruck’s futuristic design. Analysts wrote Friday that the truck looked “weird” and that it could keep consumers from purchasing it.
So far, it seems that the more expensive options are the most popular. Musk tweeted Saturday that 41% pre-ordered the triple-motor option, which starts at $US69,900, and 42% have ordered the dual-motor option at $US49,900. Only 17% have pre-ordered the single-motor option, which starts at $US39,900.
The pre-orders are coming in even with “no advertising and no paid endorsement,” according to Musk.
Customers can pre-order a Cybertruck on Tesla’s website for a $US100 “fully refundable” deposit.
Tesla shares are up 0.2% year-to-date through Friday’s close.


Dear {{ nome }},
Welcome to SingSong!
To confirm your account please click here.
Alternatively, you can paste the following link in your browser's address bar:
{{ url_for('auth.confirm', token=token, _external=True) }}
Sincerely,
The SingSong Team
Note: please do not reply to this email address.


Package org.apache.sis.metadata.iso.identification
Information to uniquely identify the data or service.
An explanation for this package is provided in the OpenGIS® javadoc.
The remaining discussion on this page is specific to the SIS implementation.
Overview
For a global overview of metadata in SIS, see the org.apache.sis.metadata
package javadoc.
| Class hierarchy | Aggregation hierarchy |
|---|---|
ISO 19115 metadata ├─ Identification «abstract» │ ├─ Data identification │ └─ Service identification ├─ Resolution ├─ Browse graphic ├─ Keywords ├─ Usage ├─ Aggregate information ├─ Coupled resource ├─ Operation metadata └─ Operation chain metadataCode list ├─ Progress ├─ Keyword type ├─ Association type ├─ Initiative type ├─ Topic category ├─ Coupling type} └─ Distributed computing platform} |
Identification «abstract» ├─ Resolution ├─ Topic category «code list» ├─ Progress «code list» ├─ Browse graphic ├─ Keywords │ └─ Keyword type «code list» ├─ Usage └─ Associated resource ├─ Association type «code list» └─ Initiative type «code list»Data identification Service identification ├─ Coupling type} «code list» ├─ Coupled resource ├─ Operation metadata │ ├─ Distributed computing platform} «code list» │ └─ Parameter descriptor │ └─ Parameter direction} «enum» └─ Operation chain metadata |
In addition to the standard properties, SIS provides the following methods:
DefaultRepresentativeFraction.setScale(double)
for computing the denominator from a scale value.
Null values, nil objects and collections
All constructors and setter methods accept null
arguments.
A null argument value means that the metadata element can not be provided, and the reason for that is unspecified.
Alternatively, users can specify why a metadata element is missing by providing a value created by
NilReason.createNilObject(Class)
.
Unless otherwise noted in the Javadoc, all getter methods may return an empty collection,
an empty array or null
if the type is neither a collection or an array.
Note that non-null values may be NilObject
s.
Unless the metadata object has been marked as unmodifiable and unless otherwise noted in the Javadoc, all collections returned by getter methods are live: adding new elements in the collection modify directly the underlying metadata object.
- Since:
- 0.3
Defined in the sis-metadata
module
-
Class Summary Class Description AbstractIdentification Basic information required to uniquely identify a resource or resources.DefaultAggregateInformation Associated resource information.DefaultAssociatedResource Associated resource information.DefaultBrowseGraphic Graphic that provides an illustration of the dataset (should include a legend for the graphic).DefaultCoupledResource Links a given operation name with a resource identified by an "identifier".DefaultDataIdentification Information required to identify a dataset.DefaultKeywordClass Specification of a class to categorize keywords in a domain-specific vocabulary that has a binding to a formal ontology.DefaultKeywords Keywords, their type and reference source.DefaultOperationChainMetadata Operation chain information.DefaultOperationMetadata Parameter information.DefaultRepresentativeFraction A scale defined as the inverse of a denominator.DefaultResolution Level of detail expressed as a scale factor or a ground distance.DefaultServiceIdentification Identification of capabilities which a service provider makes available to a service user through a set of interfaces that define a behaviour.DefaultUsage Brief description of ways in which the resource(s) is/are currently or has been used.


Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
For the fig-swirl: Melt butter over medium heat in a saucepan. Add brown sugar and stir to dissolve. Halve all of the figs and toss in the saucepan with water and lemon juice. Cook over medium heat, stirring frequently, until you have a chunky-jammy mixture. Add salt with one or two stirs, set aside and let cool completely.
Food enthusiast, photography fan. Add a pinch of raw foodism and that's pretty much who I am. Proudly published with Ghost.
Vanessa Stevenson


SmokePing Puppet module
Puppet module to completely manage a SmokePing installation. Includes managing of Master/Slave installation and the menu hierarchy.
Some background information can be found here: Puppet module to manage SmokePing
Features
- Master/Slave/Standalone SmokePing configuration possible
- Menu hierarchy implemented
- Define Probes and Alert patterns
- Config files managed with templates
- Uses exported resources to configure Slaves on the Master (tag: smokeping-slave)
- Automatically generates a shared secret for Master/Slave configuration (tag: smokeping-slave-secret)
Supported Platforms
Fully supported:
- Ubuntu (Tested on 12.04, 14.04)
Standalone Only (no master/slave support yet):
- Fedora 22+
- CentOS 7+ (Note: requires third party repository to provide smokeping package).
Dependencies
Example
Standalone SmokePing instance
# install a standalone instance on a server with default values (see init.pp for
# parameter documentation
class { '::smokeping':
mode => 'standalone',
}
Master SmokePing instance
# install a master instance on a server with default values (see init.pp for
# parameter documentation. You must have a slave, or this will not work!
class { '::smokeping':
mode => 'master',
}
Slave SmokePing instance
class { '::smokeping':
mode => 'slave',
slave_name => $::hostname,
master_url => 'http://myserver.tld/smokeping/smokeping.cgi',
slave_location => 'zurich',
}
This configures the server as slaves and adds the slave definition automatically to the master using exported resources.
Probes
$probes = [
{ name => 'FPing', binary => '/usr/bin/fping' },
{ name => 'FPing6', binary => '/usr/bin/fping6' },
]
Class['::smokeping'] {
probes => $probes
}
Alerts
$alerts = [
{
name => 'bigloss',
alert_type => 'loss',
pattern => '==0%,==0%,==0%,==0%,>0%,>0%,>0%',
comment => 'suddenly there is packet loss',
},
{
name => 'startloss',
alert_type => 'loss',
pattern => '==S,>0%,>0%,>0%',
comment => 'loss at startup',
},
{
name => 'noloss',
alert_type => 'loss',
pattern => '>0%,>0%,>0%,==0%,==0%,==0%,==0%',
edgetrigger => true,
comment => 'there was loss and now its reachable again',
},
]
Class['::smokeping'] {
alerts => $alerts,
}
Targets
# Top Level
smokeping::target { 'World':
menu => 'World',
pagetitle => 'Connection to the World',
alerts => [ 'bigloss', 'noloss' ],
}
smokeping::target { 'GoogleCH':
hierarchy_parent => 'World',
hierarchy_level => 2,
menu => 'google.ch',
pagetitle => 'Google',
}
smokeping::target { 'GoogleCHIPv4':
hierarchy_parent => 'GoogleCH',
hierarchy_level => 3,
menu => 'google.ch IPv4',
host => 'google.ch',
slaves => ['slave1'],
}
smokeping::target { 'GoogleCHIPv6':
hierarchy_parent => 'GoogleCH',
hierarchy_level => 3,
menu => 'google.ch IPv6',
host => 'google.ch',
probe => 'FPing6',
slaves => ['slave1'],
}
smokeping::target { 'GoogleCHCurl':
hierarchy_parent => 'GoogleCH',
hierarchy_level => 3,
menu => 'google.ch Curl',
host => 'google.ch',
probe => 'Curl',
options => {
urlformat => 'http://%host%/',
}
}
License / Author
The module is written by
- Tobias Brunner<EMAIL_ADDRESS>Licensed under Apache License, Version 2.0, Copyright 2015 by Tobias Brunner
Contibutors
See: Github Contributors


%
# Note that this file is not a valid *.html file!
# It is intended to be a bottlepy - style template
# used for the scripting part of TheOnionBox!
%>
{{!header_row('Tor', 'Connection Error')}}
{{error_msg}}
This error cannot be recovered by The Onion Box.
Please contact the operator for assistance.


Meet the Team
- Thanks for taking the time to check out Dirt-Finder. This site was created as a final project for our Code Fellows 201 Final Project-Racoon Cohort.
Jason Hiskey
- Hometown: Jason was born in Colorado Springs, Colorado. When he was 2 years old he moved to Washington where he spent the majority of his childhood in Monroe. While living in Monroe, he learned how to crash dirt bikes and jump off of tall objects into the water. He currently lives in the quickly growing town of Bothell.
- Former Career: Before embarking on his coding journey, Jason was a staff geologist who worked on hundreds of construction sites in Seattle and Los Angeles.
- Favorite Hobby: Jason likes to spend his free time working in his vegetable garden and spending way too much money buying new games on Steam.
- Favorite Food: Jason enjoys most foods that exist but especially enjoys quesadillas.
- Future Goals: Jason plans on becoming a solid full stack Java Script Developer who will be able to save up enough money to one day finance and manage a food truck company called “The Quesadilla Factory”, which will cater toward fellow aficionados of quesadillas.
Reed Hopkins
- Hometown: Reed was born in Chelan, Washington, where he lived for 8 years before moving to Spokane where he spent the rest of his childhood.
- Former Career: Before attending Code Fellows, Reed received a degree in Communications from The University of Redlands in sunny Southern California.
- Favorite Hobby: When Reed isn’t sitting behind a laptop writing code he likes to spend his spare time surfing but has found that the surfing conditions are much more favorable down in Southern California.
- Favorite Food: Reed really enjoys sitting down to a giant plate of delicious chicken and waffles, especially is it’s being served from his favorite restaurant “Screen Door” in Portland, Oregon.
- Future Goals: Reed would love to live somewhere that is close to a sweet surf spot near a tasty chicken and waffle restaurant.
Diego Ramos
- Hometown: Diego was born and raised in South Everett. He spent his childhood being sick or injured which typically resulted in him having to stay inside and play lots of video games. He still lives in South Everett.
- Former Career: Diego’s former career was attending and graduating high school. While attending high school he formed a virtual fight club.
- Favorite Hobby: Diego’s ultimate favorite hobby consists of slaying every video game that he encounters. Especially VSRGs (Vertically Scrolling Rhythm Games).
- Favorite Food: Diego enjoys sitting down to a hearty overflowing bowl of spaghetti and meatballs without any extra distracting toppings or sides.
- Future Goals: Diego hopes to get paid so that he can hire a personal chef to prepare him freshly made spaghetti and meatballs every day of his life.


---
layout: post
title: Slow Motion Walk
description: Slow-motion Walk, storyboard
date: '2019-12-02 10:10:12 +0100'
categories:
- Storyboards
- Advertising
---
Storyboard for Napoleon Games, director, Dr. Bowman, produced by Lovo Films.


---
layout: default
title: Documenting the Now
extra_css:
- home.css
extra_js:
- home.js
---
Documenting the Now responds to the public's use of social media for chronicling historically significant events as well as demand from scholars, students, and archivists, among others, seeking a user-friendly means of collecting and preserving this type of digital content. Documenting the Now has a strong commitment to prioritizing ethical practices when working with social media content, especially in terms of collection and long-term preservation. This commitment extends to Twitter's notion of honoring user intent and the rights of content creators. The project is a collaborative effort between Shift Design, Inc., the University of Maryland, and the University of Virginia. We are extremely grateful for funding from the Andrew W. Mellon Foundation.
We are building a variety of tools to help archivists, activists and researchers work with social media data. Some of these require tech know-how to get running, so please reach out to us on Slack if you are interested in using them, but not sure where to begin. We also publish Design Documents for guiding our development, and would welcome your feedback.
As of 2019, Documenting the Now is partnering with activist groups across the United States to run co-learning workshops. Activists share their work, process, and archival needs, the DocNow Workshop Team shares tools and techniques, and together we imagine and build towards better activist community archives. We will add more information on these workshops soon.
Thank you to our former team members: Vernon Mitchell (Administrative Lead 2017), Chris Freeland (Administrative Lead 2016), Timothy Cole (Project Manager 2017), Desiree Smith-Jones (Project Manager 2016), and Dan Chudnov (Data Engineer 2016-2017).
Building a community of practice around social media and Web archiving is one of the most significant aspects to the work we are doing in the Documenting the Now project. Mellon has generously funded us to hold two face-to-face meetings, one in 2016 and another in 2017. These meetings allow us to bring our advisory board together and incorporate live streaming to engage with a larger audience.


| 008:053 Khan | : |
That is so because Allah will never change a grace which He has bestowed on a people until they change what is in their ownselves. And verily, Allah is All-Hearer, All-Knower. |
| 008:053 Maulana | : |
This is because Allah never changes a favour which He has conferred upon a people until they change their own condition -- and because Allah is Hearing, Knowing -- |
| 008:053 Pickthal | : |
That is because Allah never changeth the grace He hath bestowed on any people until they first change that which is in their hearts, and (that is) because Allah is Hearer, Knower. |
| 008:053 Rashad | : |
GOD does not change a blessing He has bestowed upon any people unless they themselves decide to change. GOD is Hearer, Omniscient. |
| 008:053 Sarwar | : |
God does not change the favor that He has bestowed on a nation unless that nation changes what is in its soul.  |
Concepts/Themes Covered: أركان الإسلام > التوحيد > توحيد الله تعالي > إنذار من لا يعترف بتوحيد الله تعالي بالانتقام Pillars of Islam> Islamic> Oneness of Allah>A Warning to all who do not Acknowledge his Glory Oneness that He'll take Retribution from them أركان الإسلام > التوحيد > توحيد الله تعالي > نعمه على عباده والأمر بالتحدث بها Pillars of Islam> Islamic> Oneness of Allah> His Gifts on his Worshippers and His Order to Speak about them أركان الإسلام > التوحيد > الكافرون > صفات الكفار Pillars of Islam> Islamic> The Disbelievers> The Characteristics of the Disbelievers
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


mixmo.core.scheduler.MultiGammaStepLR¶
-
class
mixmo.core.scheduler.
MultiGammaStepLR
(optimizer, dict_milestone_to_gamma, last_epoch=- 1)[source]¶ Bases:
torch.optim.lr_scheduler._LRScheduler
Multi step decay scheduler, with decay applied to the learning rate every set milestone
-
__init__
(optimizer, dict_milestone_to_gamma, last_epoch=- 1)[source]¶ Initialize self. See help(type(self)) for accurate signature.
Methods
__init__
(optimizer, dict_milestone_to_gamma)Initialize self.
get_last_lr
()Return last computed learning rate by current scheduler.
get_lr
()load_state_dict
(state_dict)Loads the schedulers state.
state_dict
()Returns the state of the scheduler as a
dict
.step
([epoch])-


The Cutting Edge
|
|
| G'day Developers! |
|
When you build a web application, any dynamic page you think a user may wish to
bookmark directly should be controlled through query string values rather than
form values. In other words, search mechanisms should use the HTTP GET Request
and query string values, rather than a POST with Form values. You may hear that
query strings are bad and they leave you wide open to SQL injection
attacks... more
on query strings |
|
Cheers until next time,
Adam
SSW Chief Architect and Microsoft Regional Director, Australia
Got a comment for Adam? 696e666f72407373772e636f6d2e6175
|
|
Sydney .NET User Group - The best place to learn .NET for free in
Sydney
|
|
|
Sydney
.NET User Group
|
|
This month Dr. Neil Roodyn will be showing us a preview of MS Build, and will
be discussing automating your project build process. While MS Build is still in
beta, it is set to be included in the next Visual Studio .NET release. MS Build
will automate the build and deployment process into one smooth, streamlined
step.
Adam Cogan will be presenting Windows Form tips revolving around wizard
interfaces, and making a responsive user interface with threading.
|
|
Wednesday 21st January. 5:45 pm at Microsoft, 1 Epping Road North Ryde
See You There! |
Sorry I can't make it
|
|
SSW Software Audit
|
|
|
Companies from across the globe have been taking advantage of SSW's software
Audit Services. The common message that is received from clients is that
getting their software built in-house can sometimes lead to a failure to
identify design flaws and architectural insufficiencies. They need an unbiased
second opinion from a knowledgeable source that can make recommendations to
improve the quality of their software.
More on SSW software audits |
|
New Version - SSW SQL Auditor
|
|
|
Keep your SQL Server database free from design flaws with SSW SQL Auditor...
Maintaining consistent quality code across a large team can be a challenge.
Even when standards are in place, developers can make mistakes that will slip
through Quality Assurance. SQL Auditor is a part of the range of database tools
designed by SSW to help to check best practice standards and optimize SQL
Server performance. It was developed to assist in performance tuning in SQL
Server 2000 and SQL Server 7.0 by performing a SQL Server audit on your
database. It allows Developers to check their database design against common
SQL Server design rules and report on the elements that do not conform to those
rules.
More on SSW SQL Auditor
|
|
Tips
|
|
What service packs do I
need to install to run SSW Access utilities?
- Sergei Tchernykh
How do I restore the
Northwind sample Database to its original state?
- Ross Donald
|
|
Advertisment
|
|
|
Entegra
provides a complete record of data activity and changes to database structure
giving you the ability to know who is doing what to your data and databases.
Whether your need for auditing database activity is driven by regulatory
compliance or ongoing operational requirements, Entegra is the answer.
More
|


To add EIA data to your algorithm use the AddData()
system to request the data. As with all datasets, you should
save a reference to your symbol for easy use later in your algorithm. For detailed documentation on using custom data
see Importing Custom Data.
// exports of crude oil var crudeExport = AddData<USEnergy>(USEnergy.Petroleum.UnitedStates.WeeklyExportsOfCrudeOil).Symbol;
# exports of crude oil crudeExport = self.AddData(USEnergy, USEnergy.Petroleum.UnitedStates.WeeklyExportsOfCrudeOil).Symbol
Data can be accessed via Slice events. Slice delivers unique events to your algorithm as they happen. We recommend saving the symbol object when you add the data for easy access to slice later. Data is available in daily resolution. You can see an example of the slice accessor in the code below.
using QuantConnect.Data.Custom.USEnergy; namespace QuantConnect.Algorithm.CSharp { public class USEnergyAlgorithm : QCAlgorithm { public override void Initialize() { SetStartDate(2019, 1, 1); // exports of crude oil AddData<USEnergy>(USEnergy.Petroleum.UnitedStates.WeeklyExportsOfCrudeOil); } public override void OnData(Slice data) { // Accessing via Slice event var crudeExport = data.Get<USEnergy>(); foreach (var crude in crudeExport.Values) { Log($"Value: {crude.Value}"); } } } }
from QuantConnect.Data.Custom.USEnergy import * class USEnergyAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2019, 1, 1) # exports of crude oil self.AddData(USEnergy, USEnergy.Petroleum.UnitedStates.WeeklyExportsOfCrudeOil) def OnData(self, data): # Accessing via Slice event crudeExport = data.Get(USEnergy) for crude in crudeExport.Values: self.Log(f"Value: {crude.Value}")
All custom data has the properties Time
, Symbol
, and Value
.


My favorite hobbies are reading, hiking, exploring new things, writing and drawing.
My dream job is to work in a multicultural environment, where I can apply my language skill in information managment, possibly in archives field.
I live in Geneva, Switzerland, where I moved two years ago.
Because this Master's degree allows you not only to develop you knowledge about languages and their application, but also provides substantial information in terms of relevant technologies in the translation field.


<tgroup>
The <tgroup> element in a table contains the header and body rows of a table.
Category: Table elements


This is a simple example showing a file upload field that gets transmitted asynchronously using the iframe transport. Just choose one or more files, and they will be uploaded to the server (but not stored). After one upload has completed, you can upload more files.
Please note that this example needs to run via node.js, as uploads require a server-side component to work properly.


The source code of this webpage (excluding raster images) is owned by Laurenz Fiala and may not be used, copied, modified or redustributed in a way that resembles the appearance of tobiaskropp.at.
JQuery – The Write Less, Do More, JavaScript Library
Less CSS – It's CSS, with just a little more
Modernizr – Respond to your user’s browser features
Normalize.css – Normalize.css makes browsers render all elements more consistently and in line with modern standards


if ( 1 && bp->myind == 0 && dispflag != 0 )
{
printf("%s.%d RECV.%-2d %llx (%2d %llx) %llx/%llx matches.%-2d best.%-2d %s\n",dp->symbol,bp->height,senderind,(long long)np->recvmask,(int8_t)np->bestk,(long long)np->bestmask,(long long)np->srcutxo.txid,(long long)np->destutxo.txid,matches,bestmatches,Notaries_elected[senderind][0]);
}
This is the print I am seeing, james only added it just in the last update, must heve been his debug for the newest change.


---
layout: post
title: CNC 3018 Makerbot Limit Switch Wiring
date: '2020-10-12T11:16:00.011-07:00'
author: gojimmypi
tags:
- G-Code
- Woodpecker
- Limit Switch
- CNC
- GRBL
- '3018'
- ATMEGA328
- Makerbot
modified_time: '2020-10-12T11:35:22.692-07:00'
thumbnail: https://1.bp.blogspot.com/--wGN8IADSaw/X4NNjz8L9WI/AAAAAAAACy4/gB-CcfZDH1IFXJKuc702ErL1e5AA2eKAgCLcBGAsYHQ/s72-c/Y-Switch_Mount.png
blogger_id: tag:blogger.com,1999:blog-4109066286647243251.post-2854403113444598330
blogger_orig_url: https://gojimmypi.blogspot.com/2020/10/cnc-3018-makerbot-limit-switch-wiring.html
---
This is a continuation of my prior blog on limit switch mounting hardware design for the CNC3018.
There are plenty of resources on various limit switch wiring. As with most information on the internet: some is good, some not so good. One place to start for the desktop CNC is the gnea/grbl wiki: Wiring Limit Switches.
One of the first things to note is the Woodpecker board is designed such the the default switches are expected to be NO (Normally Open, High); The limit is triggered by pulling the signal low (short to ground). This is unfortunate, as switches will typically fail in the open position. Worse: Perhaps they even become disconnected and stay apparently open during a limit-exceeded condition.
I ordered these switches from ebay. There are similar ones on Amazon. Here's a switch installed in the Y-Axis mount that I designed in Fusion360:
Although there's a wiki link on the board schematic, it has long since disappeared from the internet. Fortunately I was able to recover some key files from the wayback machine, and copied them here for reference (next 5 images credit: Makerbot):
Interface description:
The PCB layout:
Bill of materials:
PCB Render; "The Mechanical Endstop v1.2 is Open Source Hardware and is licensed under the GNU GPLv3":
I needed to measure and create my own mechanical drawing with dimensions:
The PCB supports are 5mm in diameter extrusions, 2.1mm high; The 2 holes are 3.1mm diameter (snug fit). The little nubs on the posts at the end near the connector are an addition 1mm high, 2.9mm diameter.
I also ordered this
Eccentric Work shop CNC optical limit switch isolator. Keep in mind that optical isolation does only that: isolate. This is not a switch debouncer. But then, we'll never need to debounce: the first limit trigger will freeze the controller board. All future signals, limit, G-Code, serial or otherwise will be ignored until the board is reset.
See the EccentricWorkShop schematic:
At one point, I thought I might need two of these isolator boards, as there is a connection for only 1 wire for each axis. However when looking at the schematic, it appears the limit switch detection is also tied together on the PCB:
And sure enough:
So it appears that when limits are detected, there's no way for the software to determine
which
limit switch was triggered for a given axis. Although the software would of course know which direction it last send a g-code, so perhaps it could be inferred. Still, if there was a malfunction, it might be nice to know which switch actually triggered.
2* Limit-X-Axis
2* Limit-Y-Axis
2* Limit-Z-Axis
A5 = Probe
A4 =
A3 = Coolant Enable
A2 = Cycle Start/Resume
A1 = Feed Hold
A0 = Reset/About
A7 =
A6 =
D13 = Spindle Direction
RST
5V
X = D9 = PB1 = pin 13 via R20
Y = D10 = PB2 = pin 14 via R21
Z = D12 = PB4 = pin 16 via R22
My first test drive was rather disappointing. After all that design work for the limit switch mounts, when using the stand-alone controller,
nothing happened when running the sample G-Code and the limit switches were manually pressed. I would have hoped the woodpecker board would be interrupt-driven to detect the switch closures regardless of how the g-code arrived. There's a GitHub discussion where
rseijo claimed "Zen, Yen & Xen had no connection points to the Atmega328" (confirmed to
not be the case for me) and posted
this useful header diagram:
Reading the fine print in the text block, we see that hard limits are enabled with $21=1 (
of course they are). My $21 was found to be set to zero. Manually setting this to a value of 1 and tada! Upon pressing the limit switch while even manually moving the axis with the external controller, and the motion immediately stopped! See also the
grbl documentation wiki.
Of course, there's probably a
reason for having the feature
disabled by default. Once triggered, all bets are off and the machine can only continue by pressing reset. Any work in progress is lost. Thus if any sort of stray noise or interference triggers the signal, well - that would certainly fall into the "undesired features" category;
for example:
The machine stop working randomly with the spindle still running
And sure enough, if you see the settings posted, the $21 is already set on! So stray noise triggering these limit switches is definitely undesired.
"This can be done by sending Control-X followed by $X"
There are additional tips on GRBL setting there, too.
Resources, Inspiration, Credits, and Other Links:
Copyright (c) gojimmypi all rights reserved. Blogger Image Move Cleaned: 5/3/2021 1:35:54 PM


|
Shifts the first operand (destination operand) to the left the number of bits specified by the third operand (count operand). The second operand (source operand) provides bits to shift in from the right (starting with bit 0 of the destination operand). The destination operand can be a register or a memory location; the source operand is a register. The count operand is an unsigned integer that can be an immediate byte or the contents of the CL register. Only bits 0 through 4 of the count are used, which masks the count to a value between 0 and 31. If the count is greater than the operand size, the result in the destination operand is undefined.
If the count is 1 or greater, the CF flag is filled with the last bit shifted out of the destination operand. For a 1-bit shift, the OF flag is set if a sign change occurred; otherwise, it is cleared. If the count operand is 0, the flags are not affected.
The SHLD instruction is useful for multi-precision shifts of 64 bits or more.
|


commands.cpp Example File
tools/undo/commands.cpp/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the demonstration applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission.   ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "commands.h" static const int setShapeRectCommandId = 1; static const int setShapeColorCommandId = 2; /****************************************************************************** ** AddShapeCommand */ AddShapeCommand::AddShapeCommand(Document *doc, const Shape &shape, QUndoCommand *parent) : QUndoCommand(parent) { m_doc = doc; m_shape = shape; } void AddShapeCommand::undo() { m_doc->deleteShape(m_shapeName); } void AddShapeCommand::redo() { // A shape only gets a name when it is inserted into a document m_shapeName = m_doc->addShape(m_shape); setText(QObject::tr("Add %1").arg(m_shapeName)); } /****************************************************************************** ** RemoveShapeCommand */ RemoveShapeCommand::RemoveShapeCommand(Document *doc, const QString &shapeName, QUndoCommand *parent) : QUndoCommand(parent) { setText(QObject::tr("Remove %1").arg(shapeName)); m_doc = doc; m_shape = doc->shape(shapeName); m_shapeName = shapeName; } void RemoveShapeCommand::undo() { m_shapeName = m_doc->addShape(m_shape); } void RemoveShapeCommand::redo() { m_doc->deleteShape(m_shapeName); } /****************************************************************************** ** SetShapeColorCommand */ SetShapeColorCommand::SetShapeColorCommand(Document *doc, const QString &shapeName, const QColor &color, QUndoCommand *parent) : QUndoCommand(parent) { setText(QObject::tr("Set %1's color").arg(shapeName)); m_doc = doc; m_shapeName = shapeName; m_oldColor = doc->shape(shapeName).color(); m_newColor = color; } void SetShapeColorCommand::undo() { m_doc->setShapeColor(m_shapeName, m_oldColor); } void SetShapeColorCommand::redo() { m_doc->setShapeColor(m_shapeName, m_newColor); } bool SetShapeColorCommand::mergeWith(const QUndoCommand *command) { if (command->id() != setShapeColorCommandId) return false; const SetShapeColorCommand *other = static_cast<const SetShapeColorCommand*>(command); if (m_shapeName != other->m_shapeName) return false; m_newColor = other->m_newColor; return true; } int SetShapeColorCommand::id() const { return setShapeColorCommandId; } /****************************************************************************** ** SetShapeRectCommand */ SetShapeRectCommand::SetShapeRectCommand(Document *doc, const QString &shapeName, const QRect &rect, QUndoCommand *parent) : QUndoCommand(parent) { setText(QObject::tr("Change %1's geometry").arg(shapeName)); m_doc = doc; m_shapeName = shapeName; m_oldRect = doc->shape(shapeName).rect(); m_newRect = rect; } void SetShapeRectCommand::undo() { m_doc->setShapeRect(m_shapeName, m_oldRect); } void SetShapeRectCommand::redo() { m_doc->setShapeRect(m_shapeName, m_newRect); } bool SetShapeRectCommand::mergeWith(const QUndoCommand *command) { if (command->id() != setShapeRectCommandId) return false; const SetShapeRectCommand *other = static_cast<const SetShapeRectCommand*>(command); if (m_shapeName != other->m_shapeName) return false; m_newRect = other->m_newRect; return true; } int SetShapeRectCommand::id() const { return setShapeRectCommandId; }


Easy, also provides you some extensions methods to your code, they are small, simple, easily rememberable, and can be very useful... Let's see them:
We hope you enjoyed it so far, we thank you very much for following the easy.js documentation.
What if we say that there is a simple a way to request data from a server, like doing this:
Want to learn more? Follow on Connectors


Valerie A. Leal-Whitehead
Democrat
Banner Health, Cardiovascular Institute, 20 years. During my tenure here I have written our policy and procedures, helped to set up our stress testing services, served as supervisor responsible for hiring/terminating/evaluating staff, and I currently provide phone nurse triage , walk in patient care and other miscellaneous tasks. Prior to my current position: NCMC [Banner Health], Telemetry nurse 1981-85, Cardiac Rehab/patient education 1985-1998; Cardiac Research nurse 1998-2000 with the Heart and Vascular cardiology group [now affiliated with UC Health]. I also substitute taught at UNC [University of Northern Colorado here in Greeley] in the kinesiology department in the late 1980s, during a time they were in a bind with professors. I taught electrocardiography and stress testing for two separate quarters. Over the course of my career I have been provided with many opportunities to present/teach in a variety of settings and teaching is something I enjoy a great deal.
University of Northern Colorado, School of Nursing, BSN 1981 RN license, State of Colorado Certified Exercise Technologist, ACSM [American College of Sports Medicine], 1986
80634
I volunteer in the phone bank and to walk neighborhoods during presidential election years, with the exception of this year. I donate to the Democrats national organization during presidential election years, generally no more than $200 per election cycle.
During the last five years my volunteer activity has been primarily associated with my church.
I served three terms on our local board of education, 1993 - 2003. I had an unsuccessful run for the board of education in 2010. I volunteered in many ways with the theatre/performing arts and athletics at our children's high school during their time at the school. We hosted exchange students 3 years while our children were in high school and college.
With the exception of the unsuccessful run for the school board in 2010, I have not served nor sought to serve my community in some time. I have done a great deal of volunteer service through my church, including teaching children, teaching adults, serving as youth leader, camp director and the various philanthropic activities that go with serving youth. I was at a Women's March recently, during which I learned of the commission and I decided to apply.
I ran for our local board of education during a contentious time in our community [contention re: public education and what/how children should learn], and I was able to forge great relationships with board members whose backgrounds and beliefs were very different from my own. In my work setting I have served as mentor to others, and it is not unusual for me to be approached to help resolve differences among others.
As a nurse, I am called upon daily to address a myriad of issues quickly and with clarity. I am a very good listener and I am able to hone in on a patient or colleagues question/concern, and problem solve with them.
Female


Gitpod installation URL:
Open as popup:
Enable
.
keybind to open repositories in Gitpod
https://www.gitpod.io/docs/browser-extension/