First, create a directory under app/ to store your image files (e.g. app/img). Then drop your images in the folder.
Here’s the correct (and only!) way to import images correctly in electron-react-boilerplate:
// First, import the image like thisimportimage_srcfrom'./../img/your_image.png';// Use it inline like so (in React)classYourImageextendsReact.Component{render(){return (<imgsrc={image_src}/>
)}}// Next, add this entry into webpack.config.base.js under modules.loaders:{test:/\.(png|jpg)$/,loader:'url?limit=25000'}// Important!!! Make sure that you disable these lines in webpack.config.production.js{test:/\.(?:ico|gif|png|jpg|jpeg|webp)$/,loader:'url-loader'}
For Postgres 9.2 and above, here’s how you can drop all active connections to your database. This is useful when you’re trying to drop a table, but someone’s still connected to it.
Amazing software. Make sure to click “More opts” and select “Echo Commands” under the “Format the output” option.
There are hundreds of formatting options, you can choose your output format for easy inclusion in shell scripts, and you can preview all of the styles at once.
I’ll save you a read if you don’t care about details. Long story short - buy yourself a quality hoop from Hyperion. Save yourself the trouble of doing this, because frankly, the results we obtained were not that impressive. We spent around $800 in materials by the end of this project and ended up with a heavy, bulky, large, cumbersome hoop that broke after 10 minutes. Seriously - just get a good hoop from a pro.
Our final result, starring my girlfriend Amanda:
It broke shortly after this video. We tried to make a wireless one after this, but didn’t have much luck. I eventually said screw it and bought a professional hoop for Amanda.
Parts List
https://www.adafruit.com/products/276 - 5V 2A (2000mA) switching power supply
https://www.adafruit.com/products/368 - Female DC Power adapter - 2.1mm jack to screw terminal block
https://www.adafruit.com/products/1461 - LED strip, but should've used the smaller strip (and I'm sure we would've if we knew it was there 😣 )
https://www.adafruit.com/products/2880 - 2-pin JST SM Plug + Receptacle Cable Set
https://www.adafruit.com/products/1311 - Hook-up Wire Spool Set - 22AWG Solid Core - 6 x 25 ft
https://www.adafruit.com/products/592 - USB cable - A/MicroB - 3ft
An Arduino Uno (R3)
http://hoopsupplies.com/shop/?id=17&collid=57 - Push Buttons - Package of 10; Select Size: Regular
https://www.amazon.com/dp/B000FMZ6D4 - White High Density Polyethylene (HDPE) Tubing, 3/4" ID, 1" OD, 1/4" Wall, 100' Length
Wire shrink
Capacitors
Solder/Flux
It’s an assimilation of a bunch of LED scripts we (pengii23 and I) found floating around by other people who had attempted making a hula hoop.
It’s really, really bad to go back and read this stuff.
You’ve been warned.
#include"LPD8806.h"
#include"SPI.h"
#include<avr/sleep.h>
#include"hearts.h"//since data is on 11 and clock is on 13, we can use hardware SPILPD8806strip=LPD8806(160);//32 LED's per meter * 5intdemoCaseNumber=0;intintervalDemo=10000;// Looking like this is 10 seconds.intpowerPin=4;intupModePin=3;intupColorPin=2;intupModeButtonState=HIGH;intupModeButtonCycles=0;intupColorButtonState=HIGH;intupColorButtonCycles=0;intCYCLES_DEBOUNCE=2;//check the button for X ticks to see if it is bouncingintMAX_COLORS=19;intMAX_MODES=17;intMAX_STRIPES=5;unsignedlongtick=0;intmode=1;intcolor=1;longpreviousMillis=0;longinterval=500;uint16_ti,j,x,y;uint32_tc,d;// Set the first variable to the NUMBER of pixels. 32 = 32 pixels in a row// The LED strips are 32 LEDs per meter but you can extend/cut the stripvoidISR_Wake(){detachInterrupt(0);detachInterrupt(1);}voidblackout(){for(inti=0;i<strip.numPixels()+1;i++){strip.setPixelColor(i,strip.Color(0,0,0));}strip.show();}voidtriggerSleep(){blackout();attachInterrupt(0,ISR_Wake,LOW);//pin 2attachInterrupt(1,ISR_Wake,LOW);//pin 3set_sleep_mode(SLEEP_MODE_PWR_DOWN);sleep_enable();sleep_mode();//sleeping, until rudely interruptedsleep_disable();}voidtriggerModeUp(){++mode;blackout();}voidtriggerColorUp(){color++;blackout();}voidhandleButtons(){if(digitalRead(powerPin)==LOW){triggerSleep();}// software debounceif(digitalRead(upModePin)!=upModeButtonState){upModeButtonCycles++;if(upModeButtonCycles>CYCLES_DEBOUNCE){upModeButtonCycles=0;upModeButtonState=digitalRead(upModePin);if(upModeButtonState==LOW){triggerModeUp();}}}// software debounceif(digitalRead(upColorPin)!=upColorButtonState){upColorButtonCycles++;if(upColorButtonCycles>CYCLES_DEBOUNCE){upColorButtonCycles=0;upColorButtonState=digitalRead(upColorPin);if(upColorButtonState==LOW){triggerColorUp();}}}}voidhandleStrip(inttemp){//switch(mode%MAX_MODES) {switch(temp){case0://solidc=GetColor(color%MAX_COLORS);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}break;case1://every other ledc=GetColor((tick%3+color)%MAX_COLORS);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}break;case2:if(tick%50==0){c=GetColor(color%MAX_COLORS);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}if(tick%50==25){c=strip.Color(0,0,0);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}break;case3://strobe 2 colorif(tick%30==0){c=GetColor(color%MAX_COLORS);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}if(tick%30==15){c=GetColor(color%MAX_COLORS+2);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}break;case4://strobe 3 colorif(tick%60==20){c=GetColor(color%MAX_COLORS);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}if(tick%60==40){c=GetColor(color%MAX_COLORS+random(5));for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}if(tick%60==60){c=GetColor(color%MAX_COLORS+random(2));for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}}break;case5://chasersd=(color/MAX_COLORS)%MAX_STRIPES+1;//chaserc=GetColor(color%MAX_COLORS);//colorj=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){if(i%(strip.numPixels()/d)==j){strip.setPixelColor(i,c);}else{strip.setPixelColor(i,strip.Color(0,0,0));}}break;case6://chasers + staticsd=(color/MAX_COLORS)%MAX_STRIPES+1;//chaserc=GetColor(color%MAX_COLORS);//colorj=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){x=i%(strip.numPixels()/d);if((x==j)||(x==0)){strip.setPixelColor(i,c);}else{strip.setPixelColor(i,strip.Color(0,0,0));}}break;case7://fuckin' rainbowsj=tick%384;for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));}break;case8://rainbow ditherd=(color/MAX_COLORS)%MAX_STRIPES+1;//chaserc=tick%384;j=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//first pixelstrip.setPixelColor(i+1,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//second pixelstrip.setPixelColor(i+2,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//third pixelstrip.setPixelColor(i+32,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//first pixelstrip.setPixelColor(i+33,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//second pixelstrip.setPixelColor(i+34,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));strip.show();strip.setPixelColor(i,0);strip.setPixelColor(i+32,0);}break;case9://rainbow chaser//d = random(3); //chaserd=3;x=tick%384;c=GetColor(color%MAX_COLORS);//colorj=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){if(i%(strip.numPixels()/d)==j){strip.setPixelColor(i,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+x)%384));//first pixelstrip.setPixelColor(i+1,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+x)%384));//second pixelstrip.setPixelColor(i+2,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+x)%384));}else{strip.setPixelColor(i,strip.Color(0,0,0));}}break;/*case 8: //rainbow chaser (3 pixel chaser)
d = (color / MAX_COLORS) % MAX_STRIPES + 1; //chaser
c = tick % 384;
j = tick % (strip.numPixels()/d);
for(i=0; i < strip.numPixels(); i++) {
if(i % (strip.numPixels()/d) == c) {
strip.setPixelColor(i, Wheel(((i * 384 / strip.numPixels() * (color%MAX_COLORS)) + c) % 384)); //first pixel
strip.setPixelColor(i + 1, Wheel(((i * 384 / strip.numPixels() * (color%MAX_COLORS)) + c) % 384)); //second pixel
strip.setPixelColor(i + 2, Wheel(((i * 384 / strip.numPixels() * (color%MAX_COLORS)) + c) % 384)); //third pixel
}
else {
strip.setPixelColor(i, strip.Color(0,0,0));
}
}
break;*//*case 10: //hands POV
j = tick % 150;
d = hands[j];
//green //orange
c = (j < 14)?GetColor((color+2)%MAX_COLORS):GetColor((color+3)%MAX_COLORS);
for(i=0;i<32;i++) {
//adding 32 to the index makes it appear on the side opposite the controller
if(d & 0x00000001) {
strip.setPixelColor(i+32, c);
}
else {
strip.setPixelColor(i+32, strip.Color(0,0,0));
}
d >>= 1;
}
break;
case 11: //tanner POV
j = tick % 150;
d = tanner[j];
//green //orange
c = GetColor(color % MAX_COLORS);
for(i=0;i<32;i++) {
//adding 32 to the index makes it appear on the side opposite the controller
if(d & 0x00000001) {
strip.setPixelColor(i+32, c);
}
else {
strip.setPixelColor(i+32, strip.Color(0,0,0));
}
d >>= 1;
}
break;
case 12: //tanner2 POV
j = tick % 150;
d = tanner2[j];
//green //orange
c = GetColor(color % MAX_COLORS);
for(i=0;i<32;i++) {
//adding 32 to the index makes it appear on the side opposite the controller
if(d & 0x00000001) {
strip.setPixelColor(i+32, c);
}
else {
strip.setPixelColor(i+32, strip.Color(0,0,0));
}
d >>= 1;
}
break;*/case10://hearts, entire stripj=tick%149;d=hearts[j];//green //orangec=GetColor(color%MAX_COLORS);for(i=0;i<32;i++){//adding 32 to the index makes it appear on the side opposite the controllerif(d&0x00000001){strip.setPixelColor(i,c);strip.setPixelColor(i+32,c);strip.setPixelColor(i+64,c);}else{strip.setPixelColor(i,strip.Color(0,0,0));strip.setPixelColor(i+32,strip.Color(0,0,0));strip.setPixelColor(i+64,strip.Color(0,0,0));}d>>=1;}break;case11://stripesc=GetColor(color%MAX_COLORS);d=GetColor((color+1)%MAX_COLORS);for(i=0;i<4;i++){strip.setPixelColor(i,c);strip.setPixelColor(i+9,c);strip.setPixelColor(i+18,c);strip.setPixelColor(i+27,c);strip.setPixelColor(i+36,c);strip.setPixelColor(i+45,c);strip.setPixelColor(i+54,c);strip.setPixelColor(i+63,c);strip.setPixelColor(i+72,c);strip.setPixelColor(i+81,c);strip.setPixelColor(i+89,c);}for(i=4;i<9;i++){strip.setPixelColor(i,d);strip.setPixelColor(i+9,d);strip.setPixelColor(i+18,d);strip.setPixelColor(i+27,d);strip.setPixelColor(i+36,d);strip.setPixelColor(i+45,d);strip.setPixelColor(i+54,d);strip.setPixelColor(i+63,d);strip.setPixelColor(i+72,d);strip.setPixelColor(i+81,d);strip.setPixelColor(i+89,d);}break;case12://stripes rainbow colorc=GetColor(color%MAX_COLORS);j=tick%384;for(i=0;i<4;i++){strip.setPixelColor(i,c);strip.setPixelColor(i+9,c);strip.setPixelColor(i+18,c);strip.setPixelColor(i+27,c);strip.setPixelColor(i+36,c);strip.setPixelColor(i+45,c);strip.setPixelColor(i+54,c);strip.setPixelColor(i+63,c);strip.setPixelColor(i+72,c);strip.setPixelColor(i+81,c);strip.setPixelColor(i+89,c);}for(i=4;i<9;i++){strip.setPixelColor(i,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+9,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+18,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+27,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+36,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+45,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+54,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+63,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+72,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+81,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));strip.setPixelColor(i+89,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+j)%384));}break;case13://stripes changing colorc=GetColor(color%MAX_COLORS);//d = GetColor((color + random(11) % MAX_COLORS));j=tick%384;for(i=0;i<4;i++){strip.setPixelColor(i,c);strip.setPixelColor(i+9,c);strip.setPixelColor(i+18,c);strip.setPixelColor(i+27,c);strip.setPixelColor(i+36,c);strip.setPixelColor(i+45,c);strip.setPixelColor(i+54,c);strip.setPixelColor(i+63,c);strip.setPixelColor(i+72,c);strip.setPixelColor(i+81,c);strip.setPixelColor(i+89,c);}for(i=4;i<9;i++){d=GetColor((color+random(11))%MAX_COLORS);strip.setPixelColor(i,d);strip.setPixelColor(i+9,d);strip.setPixelColor(i+18,d);strip.setPixelColor(i+27,d);strip.setPixelColor(i+36,d);strip.setPixelColor(i+45,d);strip.setPixelColor(i+54,d);strip.setPixelColor(i+63,d);strip.setPixelColor(i+72,d);strip.setPixelColor(i+81,d);strip.setPixelColor(i+89,d);}break;case14:for(i=0;i<4;i++){d=GetColor((color+random(3))%MAX_COLORS);strip.setPixelColor(i,d);strip.setPixelColor(i+9,d);strip.setPixelColor(i+18,d);strip.setPixelColor(i+27,d);strip.setPixelColor(i+36,d);strip.setPixelColor(i+45,d);strip.setPixelColor(i+54,d);strip.setPixelColor(i+63,d);strip.setPixelColor(i+72,d);strip.setPixelColor(i+81,d);strip.setPixelColor(i+89,d);}for(i=4;i<9;i++){d=GetColor((color+random(6))%MAX_COLORS);strip.setPixelColor(i,d);strip.setPixelColor(i+9,d);strip.setPixelColor(i+18,d);strip.setPixelColor(i+27,d);strip.setPixelColor(i+36,d);strip.setPixelColor(i+45,d);strip.setPixelColor(i+54,d);strip.setPixelColor(i+63,d);strip.setPixelColor(i+72,d);strip.setPixelColor(i+81,d);strip.setPixelColor(i+89,d);}break;case15://solidc=GetColor(color%MAX_COLORS);for(i=0;i<strip.numPixels();i++){strip.setPixelColor(i,c);}break;case16://rainbow chaser (3 pixel chaser) --------------DAVISd=(color/MAX_COLORS)%MAX_STRIPES+3;//chaser//c = tick % 384;//c = tick % 96;c=tick%80;j=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){if(i%(strip.numPixels()/d)==c){strip.setPixelColor(i,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//first pixelstrip.setPixelColor(i+1,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//second pixelstrip.setPixelColor(i+2,Wheel(((i*384/strip.numPixels()*(color%MAX_COLORS))+c)%384));//third pixel}else{strip.setPixelColor(i,strip.Color(0,0,0));}}break;case17://3 spaced chasers --------------DAVISd=(color/MAX_COLORS)%MAX_STRIPES+3;//chaserc=GetColor(color%MAX_COLORS);//colorj=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){if(i%(strip.numPixels()/d)==j){strip.setPixelColor(i,c);}else{strip.setPixelColor(i,strip.Color(0,0,0));}}break;case18://chasers + statics --------------DAVIS//If you look up an RGB chart in Photoshop, just divide the values by 2 to arrive at the necessary input)//int MAX_COLORS = 19;//int MAX_MODES = 17;//int MAX_STRIPES = 5;//int color = 1//I'm fucking with this because I don't really understand his math - it seems very convoluted.//***ORIGINAL***// d = (color / MAX_COLORS) % MAX_STRIPES + 2; //chaser, was +1, now +2// c = strip.Color(20,127,104); //hardcoded teal// j = tick % (strip.numPixels()/d);// for(i=0; i < strip.numPixels(); i++) {// x = i % (strip.numPixels()/d);// if((x == j) || (x == 0)) {// strip.setPixelColor(i, c);// }// else {// strip.setPixelColor(i, strip.Color(0,0,0));// }// }// break;d=3;//chaser, was +1, now +2c=strip.Color(20,127,104);//hardcoded tealj=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){x=i%(strip.numPixels()/d);if((x==j)||(x==0)){strip.setPixelColor(i,c);}else{strip.setPixelColor(i,strip.Color(0,0,0));}}break;case19://3 spaced chasers, with filled in gaps --------------DAVISd=(color/MAX_COLORS)%MAX_STRIPES+4;//chaserc=GetColor(color%MAX_COLORS);//colorj=tick%(strip.numPixels()/d);for(i=0;i<strip.numPixels();i++){if(i%(strip.numPixels()/d)==j){strip.setPixelColor(i,strip.Color(0,95,121));}else{strip.setPixelColor(i,strip.Color(50,10,100));}}break;// case 20: //random static colors// unsigned long currentMillis = millis();// if(currentMillis - previousMillis > interval) {// previousMillis = currentMillis;// for(int i = 0; i < strip.numPixels(); i++) {// c = GetColor((color % MAX_COLORS) + random(6));// strip.setPixelColor(i, c);// }// break;// strip.show();// }// break;}strip.setPixelColor(strip.numPixels()-1,strip.Color(0,0,0));//set that last LED off because it overlapsstrip.show();}voidsetup(){// Start up the LED stripstrip.begin();pinMode(powerPin,INPUT);// declare pushbutton as inputpinMode(upModePin,INPUT);// declare pushbutton as inputpinMode(upColorPin,INPUT);// declare pushbutton as inputdigitalWrite(powerPin,HIGH);digitalWrite(upModePin,HIGH);digitalWrite(upColorPin,HIGH);//triggerSleep();}voidloop(){tick++;handleStrip(demoLoopSeconds());handleButtons();}intdemoLoopSeconds(){unsignedlongcurrentMillis=millis();if((currentMillis-previousMillis)>intervalDemo){previousMillis=currentMillis;demoCaseNumber++;}return(demoCaseNumber%20);}/* Helper functions *///Input a value 0 to 384 to get a color value.//The colours are a transition r - g - b - back to ruint32_tWheel(uint16_tWheelPos){byter,g,b;switch(WheelPos/128){case0:r=127-WheelPos%128;// red downg=WheelPos%128;// green upb=0;// blue offbreak;case1:g=127-WheelPos%128;// green downb=WheelPos%128;// blue upr=0;// red offbreak;case2:b=127-WheelPos%128;// blue downr=WheelPos%128;// red upg=0;// green offbreak;}return(strip.Color(r,g,b));}uint32_tGetColor(intc){switch(c){case0:returnstrip.Color(127,0,0);//redcase1:returnstrip.Color(127,0,60);case2:returnstrip.Color(127,0,127);case3://orangereturnstrip.Color(127,60,0);case4://yellowreturnstrip.Color(127,127,0);case5:returnstrip.Color(127,127,60);case6:returnstrip.Color(60,127,0);case7:returnstrip.Color(60,127,127);case8:returnstrip.Color(60,60,127);case9:returnstrip.Color(60,90,60);case10:returnstrip.Color(60,60,0);case11:returnstrip.Color(0,0,127);//bluecase12:returnstrip.Color(0,60,127);case13:returnstrip.Color(0,127,127);case14:returnstrip.Color(0,127,0);//greencase15:returnstrip.Color(127,30,10);case16:returnstrip.Color(25,80,100);case17:returnstrip.Color(127,127,127);//Whitecase18:intr,g,b;r=random(0,50);g=random(40,90);b=random(80,128);returnstrip.Color(r,g,b);default:returnstrip.Color(0,0,0);}}
Yup, really. On the plus side - look at that video up top! Lovely.
The moral of this article: Don’t do it yourself. Buy one from Hyperion. Seriously. You’ll love it, and it won’t suck like the one you’ll build.