Do you follow anyone on social media who are inside or outside the LEGO® community?
I follow a lot of YouTube storytellers and creators who I enjoy watching. Matthias is one of my favorites. I also enjoy watching Ryan Trahan, Airrack, and JStu. There are a lot of content creators I look up to.
How did you get into LEGO?
When I was like 7 years old I was at church and saw some LEGO® in the donation bin. So, I asked my parents if they would buy me some. I didn’t know it then but another kid named Christian (who is now one of my best friends) overheard me and the next week he brought me a HUGE TUB of LEGO.
How did Riley From Brick Science Start The Youtube Channel?
Q: We are subscribed to your Brick Science YouTube channel, such great content! How did you come about starting your channel?
A: Probably like 6 years ago I had an idea for a show called “Brick Science” where I would share goofy facts about LEGO® in a comedic way. Fast forward a couple of years and I was watching a show called “Dope or Nope” on YouTube. And I really liked the way they presented their content on a “set”
So, I crafted my own set with some cheap materials and started shooting the show with 2 iPhones on tripods. I just started doing tutorials and stuff. but I would design it first take. So that people would get the full story of how something came to be. Most channels at the time would design something and then start recording. A lot of the things I made early on were designed WHILE RECORDING on the spot.
Summary of Brick Science Youtube Content Channel
Q: Following on from the previous question, could you give our readers a summary of what to expect if they checked out Brick Science now?
A: Brick Science is a YouTube channel that tells the stories behind designing crazy LEGO® inventions. Everything is built custom and I try and make the process as easy to understand as possible (even though it’s usually the first to take for me lol)
Top 5 Youtube Videos of Brick Science According to Riley
Q: What would you say are your top 5 YouTube videos?
A: My top 5 would be:
“I Made a LEGO® Robot, to Cheat on Mobile Games…”
“So I Made LEGO® Ice Weapons, Using Real Ice…”
“Instant LEGO® Drink Cooler” (my favorite)
“How to build LEGO® Siren Head”
“How to build LEGO® Among Us Task Game” (very SUS)
You make some crazy LEGO® designs in your videos; do you have any advice for anyone wanting to get started creating their own innovative designs?
The best designs can sometimes start with the dumbest ideas. (and sometimes the best videos too) Also, get your prototype built quickly. I used to spend hours fiddling with my creation and adding things before I would finally have the “Finished Product”. Now I try to come up with the design as quickly as possible to test it out and see if it even works, then I work on the finer details. it’s all very prototype-ey haha.
If you were to collaborate with the LEGO® company, what theme or type of design would you choose?
Probably LEGO® HELMETS or something. I’ve always had a knack for building wearable stuff. I feel like the LEGO® company could benefit from a new, unusual theme.
What do you think of ideas to incorporate non-LEGO items with your LEGO® creations?
I brainstorm a lot before coming up with the final idea. most ideas come from a stack of others, and are the ones I think will most resonate with my audience.
I try to find the most relatable things (ICE for example) and turn them into LEGO® inventions. Videos where I can simultaneously tell a good story about the process of creating them usually do the best, and are the most fun to create.
We really appreciate you taking time out of your busy schedule, before we say bye is there anything else you would like to share with our readers?
Honestly never stop making stuff. One of the coolest things about LEGO® is that pretty much anyone can create anything, using what most would consider “a child’s toy”.
Conclusion
This was an interview with Riley from Brick Science, we hope you’ve gotten some great information out of it.
/* Auto generated, hash = 5dceu9kevqjdyuy2uw1atqrsu */
//TODO: Break this file down so that we can actually unit test it.
(function(window) {
/**
* Renders all unrendred LinkedIn Badges on the page
*/
window.LIRenderAll = function () {
var CALLBACK_NAME = 'LIBadgeCallback', //Must match callback on helpers.js
BADGE_NAMES = '.LI-profile-badge, .LI-entity-badge',
// TODO -- tracking param for other badge types
TRACKING_PARAM = 'profile-badge',
responsesReceived = 0, //Keeps track of number of responses recieved for proper cleanup when finished
expectedResponses = 0, //Keeps track of number of responses to expect
scripts = [ ], //Keeps track of scripts added for proper cleanup when finished
childScripts = {}, //Keeps track of child scripts to render
badges = Array.prototype.slice.call(document.querySelectorAll(BADGE_NAMES));
var i, len, badge, rendered;
for (i = 0, len = badges.length; i < len; i++) {
badge = badges[i];
rendered = badge.getAttribute('data-rendered');
if (!rendered) {
expectedResponses++;
badge.setAttribute('data-rendered', true);
renderBadge(badge);
}
}
function isCNDomain() {
if (typeof window !== "undefined") {
var hostName = window.location && window.location.hostname || '';
return (/linkedin(-ei)?.cn$/).test(hostName);
}
return false;
}
function generateUrl(isEI) {
var domainPrefix = isEI ? 'https://badges.linkedin-ei' : 'https://badges.linkedin';
if (isCNDomain()) {
return domainPrefix + ".cn/";
}
return domainPrefix + ".com/";
}
function getBadgeKeyQueryParams(badge) {
return Array.prototype.slice.call(badge.attributes).filter(function (attr) {
return attr.name.lastIndexOf('data-key-', 0) !== -1;
}).map(function (attr) {
// Most browsers automatically lowercase the attribute name when its being read
// We are calling lowercase on it again to ensure consistency for any browsers that are lagging behind.
return encodeURIComponent(attr.name.replace('data-', '').toLowerCase()) + '=' + encodeURIComponent(attr.value);
});
}
/*
* Renders a single badge on the page
* @param badge: div element of badge to render
*/
function renderBadge(badge) {
var size = badge.getAttribute('data-size'),
locale = badge.getAttribute('data-locale'),
type = badge.getAttribute('data-type'),
theme = badge.getAttribute('data-theme'),
vanity = badge.getAttribute('data-vanity'),
version = badge.getAttribute('data-version'),
isEI = badge.hasAttribute('data-ei'),
entity = badge.getAttribute('data-entity'),
isCreatePage = badge.hasAttribute('data-iscreate'),
uid = Math.round(1000000 * Math.random()),
baseUrl = generateUrl(isEI),
queryParams = [
'locale=' + encodeURIComponent(locale),
'badgetype=' + encodeURIComponent(type),
'badgetheme=' + encodeURIComponent(theme),
'uid=' + encodeURIComponent(uid),
'version=' + encodeURIComponent(version)
],
url;
if (version === 'v2') {
baseUrl += 'view';
queryParams.push('badgesize=' + encodeURIComponent(size));
queryParams.push('entity=' + encodeURIComponent(entity));
queryParams = queryParams.concat(getBadgeKeyQueryParams(badge));
} else {
baseUrl += 'profile';
queryParams.push('maxsize=' + encodeURIComponent(size));
queryParams.push('trk=' + encodeURIComponent(TRACKING_PARAM));
queryParams.push('vanityname=' + encodeURIComponent(vanity));
}
if (isCreatePage) {
queryParams.push('fromCreate=true');
}
url = baseUrl + '?' + queryParams.join('&');
badge.setAttribute('data-uid' , uid);
jsonp(url); //Calls responseHandler when done
}
/**
* Handles a response from the server. Finds badge matching badgeUid and inserts badgeHtml there
* @param badgeHtml: String representing contents of the badge
* @param badgeUid: UID of the badge to target
**/
function responseHandler(badgeHtml, badgeUid) {
responsesReceived ++;
var i, badge, uid, isCreate;
var defaultWidth = 330 // max possible width
var defaultHeight = 300 // max possible height
for (i = 0, len = badges.length; i < len; i++) {
badge = badges[i];
// isCreate needed to prevent reloading artdeco script tag
isCreate = badge.getAttribute('data-iscreate');
uid = parseInt(badge.getAttribute('data-uid'), 10);
if (uid === badgeUid) {
var badgeMarkup = `<body>${badgeHtml}</body>`
var iframe = document.createElement('iframe');
iframe.onload = function() {
var iframeBody = iframe.contentWindow.document.body;
// 5 px buffer to avoid the badge border being cut off.
iframe.setAttribute('height', (iframeBody.scrollHeight || defaultHeight) + 5);
iframe.setAttribute('width', (iframeBody.scrollWidth || defaultWidth) + 5);
};
iframe.setAttribute('frameBorder', '0');
iframe.style.display = 'block';
badge.appendChild(iframe);
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(badgeMarkup);
iframe.contentWindow.document.close();
replaceScriptTags(badge, isCreate);
}
}
tryClean();
}
// These functions are needed because badge markup is added via innerHtml property which does not run script tags
function replaceScriptTags(node, isCreate) {
if (shouldReplaceNode(node, isCreate)) {
node.parentNode.replaceChild(cloneScriptNode(node), node);
childScripts[node.src] = true;
} else {
var i = 0,
children = node.childNodes;
while (i < children.length) {
replaceScriptTags(children[i++], isCreate);
}
}
return node;
}
function shouldReplaceNode(node, isCreate) {
return isScriptNode(node) && !childScripts[node.src] && (!isCreate || (isCreate && !node.getAttribute('data-isartdeco')));
}
function isScriptNode(node) {
return node.tagName === 'SCRIPT';
}
function cloneScriptNode(node){
var script = document.createElement("script");
for( var i = node.attributes.length-1; i >= 0; i-- ) {
script.setAttribute( node.attributes[i].name, node.attributes[i].value );
}
return script;
}
// Gets all incoming responses
window[CALLBACK_NAME] = responseHandler;
/**
* Tries to clean added tags
**/
function tryClean() {
//Clean up after all requests are done..
//Accounts for people including script more than once
var done = (responsesReceived >= expectedResponses && expectedResponses > 0) || responsesReceived >= badges.length;
if (done) {
delete window[CALLBACK_NAME];
// remove all script tags
scripts.map(function(script){
document.body.removeChild(script);
});
}
}
/*
* Makes Jsonp request, responses handles by CALLBACK_NAME
* @param url String: url of server to make request to
*/
function jsonp(url) {
var script = document.createElement('script');
script.src = url;
scripts.push(script);
document.body.appendChild(script);
}
};
if (document.readyState === 'complete') {
window.LIRenderAll();
} else {
window.addEventListener('load', window.LIRenderAll, false);
}
})(window);