[00:00.000 --> 00:01.540] What time do we have? [00:01.600 --> 00:02.720] Not even 20. [00:03.240 --> 00:04.300] This one? [00:06.280 --> 00:08.900] So that people know why I got slipped. [00:14.600 --> 00:15.480] Yes. [00:19.920 --> 00:20.800] Alright. [00:21.440 --> 00:23.340] Are you going up there to that microphone? [00:23.340 --> 00:25.820] Yeah, it's this one right here. [00:25.820 --> 00:27.160] Can you bend me the lighting? [00:30.220 --> 00:32.400] I will stand behind the podium. [00:39.100 --> 00:42.280] I don't want to wear this for an entire hour though. [00:45.260 --> 00:47.340] As the hour goes, it just sheds. [00:52.840 --> 00:56.000] I think it's hilarious. [01:00.000 --> 01:01.380] I'm recording right now. [01:04.080 --> 01:20.160] Alright, we are going to start here. [01:20.560 --> 01:21.220] Excellent. [01:21.220 --> 01:23.580] Welcome to CypherCon's badge panel. [01:23.580 --> 01:25.740] For some reason I got selected to moderate it. [01:25.740 --> 01:26.940] Can't imagine why. [01:26.940 --> 01:29.640] Thank you very much for that by the way. [01:30.080 --> 01:33.880] We have six wonderful badge making people up here. [01:35.180 --> 01:39.800] We are going to kick off a conversation about making badges. [01:39.800 --> 01:41.280] I got some questions off Twitter. [01:41.280 --> 01:43.060] Let me unlock this bad boy. [01:45.320 --> 01:47.880] We will start with some of the questions from Twitter. [01:49.420 --> 01:50.840] First question. [01:51.080 --> 01:54.300] Other than to save money, why don't badges have power switches? [01:54.300 --> 01:55.700] I like this question. [01:55.700 --> 01:56.920] Why don't they? [01:57.100 --> 01:58.400] Who wants to start? [01:59.020 --> 02:00.000] I will start. [02:01.220 --> 02:02.040] That's not fair. [02:02.040 --> 02:02.760] Yours does. [02:02.760 --> 02:04.860] It does have a switch. [02:04.960 --> 02:07.080] That was one of our biggest critiques last year. [02:07.080 --> 02:08.660] He had to remove the battery. [02:08.840 --> 02:10.740] Next year's will have a switch. [02:10.780 --> 02:12.280] That's a very good question. [02:14.640 --> 02:17.340] Speaking from experience on the first few that we did, [02:17.340 --> 02:18.500] we know better now, [02:19.060 --> 02:21.620] the power switch is kind of an afterthought. [02:21.620 --> 02:23.700] Why would anyone want to turn off your badge? [02:23.700 --> 02:26.260] It doesn't make sense. [02:28.080 --> 02:29.720] That's a lesson we learned also [02:29.720 --> 02:31.180] in our badges. [02:32.160 --> 02:33.040] Logistically, [02:33.560 --> 02:36.300] a lot of the badges have SMT switches. [02:36.540 --> 02:38.020] And those actually can get knocked off [02:38.020 --> 02:38.820] really easily. [02:38.820 --> 02:41.400] Kind of like some of the IRDA modules [02:41.400 --> 02:43.980] that you guys have had on our badge. [02:44.720 --> 02:45.320] They just, [02:45.320 --> 02:46.660] if somebody so much as [02:47.180 --> 02:48.840] knocks it the wrong way, [02:48.840 --> 02:50.880] then it lifts the pads [02:50.880 --> 02:52.660] and then you no longer have a working badge. [02:52.940 --> 02:54.760] I know some people don't include power switches [02:54.760 --> 02:56.040] because of that. [02:56.920 --> 02:57.980] Yeah, that's a pain. [02:57.980 --> 03:01.120] I will say you can sometimes use capacitive touch [03:01.120 --> 03:02.640] for switching, but we find that [03:02.640 --> 03:04.680] that will still drain the battery over time. [03:05.960 --> 03:07.860] I got one more bit for that one. [03:08.000 --> 03:09.360] Go for it. [03:10.780 --> 03:12.640] Actually on our badge, [03:13.680 --> 03:15.060] those that have had the badge [03:15.060 --> 03:16.380] or seen the badge, there's two buttons. [03:16.380 --> 03:18.380] On and then off and throw. [03:18.380 --> 03:20.320] On is actually a hardware on switch [03:20.320 --> 03:23.320] and off and throw is a software switch. [03:23.440 --> 03:24.520] So to get our [03:24.520 --> 03:26.520] standby current down to 6 microamps [03:26.520 --> 03:28.320] so that the battery didn't go dead [03:28.320 --> 03:30.420] in transportation to the con, [03:30.420 --> 03:32.860] the regulator gets bootstrapped [03:32.860 --> 03:33.920] when you push the on button [03:33.920 --> 03:36.420] to actually power it up and bring up the 3.3, [03:36.420 --> 03:37.940] at which point the micro takes over [03:37.940 --> 03:40.220] and keeps the badge on until you push off. [03:42.280 --> 03:43.640] That's cool as hell. [03:43.640 --> 03:44.880] Alright. [03:46.700 --> 03:47.920] There's another fun one [03:47.920 --> 03:49.720] also from Tim V. [03:51.740 --> 03:53.620] What do you think of the idea [03:53.620 --> 03:55.580] of including sound as a post-con option [03:55.580 --> 03:57.300] on a badge since having it live at the event [03:57.300 --> 03:58.880] would probably be disruptive? [03:58.960 --> 04:01.320] And by probably we mean definitely. [04:02.300 --> 04:03.800] Isn't that the point? [04:04.140 --> 04:05.880] Well that's why these are this bright. [04:07.580 --> 04:10.680] So ours do have a sound option. [04:11.300 --> 04:12.400] There are two [04:13.480 --> 04:14.780] solder points that you can [04:14.780 --> 04:16.560] solder a piezo or a speaker to [04:16.560 --> 04:19.060] and if you get your badge into the Morse code [04:19.060 --> 04:20.800] mode or to the DTMF [04:21.880 --> 04:22.400] payphone [04:22.400 --> 04:24.660] then you can actually make DTMF [04:24.660 --> 04:26.260] tones that you can use to phone freak [04:26.260 --> 04:28.900] or have the Morse code [04:29.420 --> 04:30.680] make sounds. [04:30.680 --> 04:32.540] So we're going to be releasing those [04:32.540 --> 04:34.640] instructions once we get some sleep. [04:36.990 --> 04:38.450] I know that feel. [04:40.750 --> 04:41.670] All right. [04:41.670 --> 04:42.850] This one should take a little bit longer [04:42.850 --> 04:44.770] for you guys. Describe your approach [04:44.770 --> 04:46.610] to choosing components. [04:47.410 --> 04:48.770] Randomly poking at digikey [04:48.770 --> 04:50.170] not being a good one. [04:51.490 --> 04:53.010] So if you were in my talk [04:53.010 --> 04:54.450] in the last hour [04:55.850 --> 04:56.770] one thing is [04:56.770 --> 04:58.650] mostly cost, right? [04:58.650 --> 05:00.690] And then supply. So how easily [05:00.690 --> 05:02.630] can we get our hands on it? How easily can we [05:02.630 --> 05:04.470] prototype with it? And then [05:05.890 --> 05:06.750] who are the [05:06.750 --> 05:09.830] vendors that actually sell it? [05:11.910 --> 05:12.810] For the ones [05:12.810 --> 05:14.770] that we've done, one thing [05:14.770 --> 05:16.790] is the more you do this [05:16.790 --> 05:18.770] the more you build up a library of stuff [05:18.770 --> 05:20.550] you've done before, stuff you know how to do [05:20.550 --> 05:22.630] and you always keep track of [05:22.630 --> 05:24.370] what was the best part for that. [05:25.050 --> 05:26.730] So there's [05:26.730 --> 05:28.570] also a lot of reuse. [05:29.230 --> 05:30.710] If you can't find [05:30.710 --> 05:32.170] ones significantly cheaper [05:32.170 --> 05:34.610] or some other good [05:34.610 --> 05:35.450] reason to change [05:35.450 --> 05:38.610] use a lot of the parts you've [05:38.610 --> 05:39.730] used before. [05:40.630 --> 05:42.290] And I would second that. [05:42.350 --> 05:44.410] For us a lot of it is [05:44.410 --> 05:45.370] need [05:46.450 --> 05:47.490] then cost [05:48.490 --> 05:50.390] and it really depends on your budget [05:50.390 --> 05:52.490] for the badge. If you have a nice [05:52.490 --> 05:54.530] budget then you can afford to [05:54.530 --> 05:56.470] have more protection on your circuit. [05:56.710 --> 05:58.230] If you have him designing it [05:58.230 --> 05:59.910] then a lot of it is over. [06:01.190 --> 06:02.470] Just kidding. [06:03.450 --> 06:04.530] No such thing. [06:04.530 --> 06:07.030] I don't believe you. I'll second that. [06:11.090 --> 06:12.390] No more on choosing [06:12.390 --> 06:13.350] components? [06:13.990 --> 06:16.370] How about what happens when you've picked it [06:16.370 --> 06:18.670] you've prototyped it, you go to do manufacturing [06:18.670 --> 06:20.490] and it's not available anymore. [06:22.250 --> 06:24.090] We didn't have that problem. [06:24.090 --> 06:25.410] We started out with [06:26.330 --> 06:28.290] a particular brand of IRDA module [06:28.290 --> 06:30.530] got four months [06:30.530 --> 06:32.930] into it and then realized [06:32.930 --> 06:34.650] that the initial [06:34.650 --> 06:36.710] modules we had worked great. [06:36.710 --> 06:37.990] We got another batch of them [06:38.370 --> 06:40.410] and they were sensitive to electrical noise. [06:40.410 --> 06:42.910] We were getting electrical interference [06:42.910 --> 06:44.890] on our IRDA modules [06:44.890 --> 06:46.650] which caused the whole networking stack [06:46.650 --> 06:48.770] just to completely stop. [06:48.890 --> 06:50.550] So thankfully we [06:50.550 --> 06:53.110] found it before we ordered all the parts for $400. [06:53.250 --> 06:54.110] But it still [06:54.930 --> 06:56.370] caused a rock hard spin [06:56.370 --> 06:58.350] because the pinout was different on the new module. [06:58.350 --> 07:00.110] The new module was slightly more expensive [07:00.110 --> 07:02.130] but there was no choice. [07:02.130 --> 07:04.070] It was either abandon that function [07:04.070 --> 07:06.130] or pick a different part. [07:09.250 --> 07:10.510] Actually we have an interesting story [07:10.510 --> 07:12.090] on this year's badge related to that. [07:12.090 --> 07:14.390] If you watch the Kickstarter video [07:14.390 --> 07:16.850] we mentioned the APA-102 LEDs. [07:17.150 --> 07:18.310] It's actually what's on this [07:18.310 --> 07:20.370] vendor badge here, but they look a lot [07:20.370 --> 07:22.490] nicer, they're a lot easier to program. [07:22.630 --> 07:23.630] What we learned was [07:23.630 --> 07:26.450] they don't support a very high temperature [07:26.450 --> 07:28.230] and they crack when they're being [07:28.230 --> 07:30.390] when they're being put to a reflow [07:30.390 --> 07:32.170] oven. And so the manufacturer [07:32.170 --> 07:34.350] we had putting this together, they were using [07:34.350 --> 07:35.530] lead-free solder [07:36.110 --> 07:38.810] and that was cracking all the LEDs. [07:38.850 --> 07:40.570] And so we're having to go back and use hot air [07:40.570 --> 07:41.970] and remove almost every LED [07:41.970 --> 07:43.390] and then hand solder them. [07:43.430 --> 07:46.190] So we've switched to the same LED we used last year. [07:46.190 --> 07:47.590] It's a little bit more resilient. [07:48.010 --> 07:50.390] And we're going to solder 6,000 of these [07:50.390 --> 07:51.290] by hand this year. [07:51.530 --> 07:53.170] So they don't go through the oven. [07:53.930 --> 07:56.410] I know those feels. When I was making those USB blinkies [07:56.410 --> 07:58.510] earlier today, I overheated one of them while soldering it on [07:58.510 --> 08:00.270] and it did not work anymore. [08:00.690 --> 08:02.370] And I guess another thing to add onto that [08:02.370 --> 08:04.090] is just size constraints. [08:04.350 --> 08:06.430] So for the badges for [08:06.430 --> 08:08.350] this conference, they were all hand [08:08.350 --> 08:10.490] placed by [08:10.990 --> 08:12.990] me, among others. [08:13.230 --> 08:14.270] But me. [08:14.470 --> 08:16.370] And so I had to decide [08:16.370 --> 08:18.410] are my eyes [08:18.410 --> 08:20.390] good enough to see what I'm putting? [08:20.450 --> 08:22.470] So for resistors [08:22.470 --> 08:24.470] and capacitors, we went no smaller than [08:24.470 --> 08:25.730] 0603s. [08:26.410 --> 08:28.190] And we tried not to do any [08:28.190 --> 08:30.890] QFNs and stuck with QFPs, [08:30.890 --> 08:32.530] SOICs, that type [08:32.530 --> 08:34.390] of thing. Pins that I could see. [08:36.810 --> 08:38.470] I agree with that. [08:38.470 --> 08:40.970] I give Charles a dirty look if he puts any 0402s [08:40.970 --> 08:41.810] on there. [08:42.650 --> 08:43.870] Fly poop. [08:44.010 --> 08:46.030] I haven't done that in a long time. [08:49.850 --> 08:52.150] Come on. Live dangerously. [08:52.170 --> 08:54.150] 010.05s. [08:55.690 --> 08:57.130] That's a thing? [08:57.130 --> 08:58.570] That is a thing. [08:58.570 --> 09:00.030] You don't have to deal with. [09:01.790 --> 09:03.950] I wouldn't even want to breathe near that. [09:03.950 --> 09:05.850] No, you sneeze. They're gone. [09:08.050 --> 09:10.570] All right. Let's start a flame war. [09:10.570 --> 09:12.050] Which protocol of LEDs [09:12.050 --> 09:13.310] do you prefer? [09:19.190 --> 09:20.190] So I [09:20.190 --> 09:22.350] definitely prefer the AP102s. [09:22.350 --> 09:24.270] And that's because you can use [09:24.270 --> 09:26.190] SPI hardware to talk to them, which means [09:26.190 --> 09:28.110] the core of your microcontroller [09:28.110 --> 09:30.270] doesn't have to babysit them. They can go off and do other [09:30.270 --> 09:32.270] things. In fact, another chip that [09:32.270 --> 09:34.250] I like and have been using a lot is [09:34.250 --> 09:36.110] the X-Mega series from [09:36.110 --> 09:38.270] Atmel, which is really cool [09:38.270 --> 09:40.050] because they have both hardware SPI [09:40.050 --> 09:41.870] and DMA. So [09:41.870 --> 09:43.850] you can set up your memory buffer [09:43.850 --> 09:45.930] and just point the [09:45.930 --> 09:48.350] SPI hardware at the memory buffer, say, [09:48.350 --> 09:50.270] dump all this out to the LEDs, tell me when you're [09:50.270 --> 09:51.170] done. [09:52.570 --> 09:54.230] Very convenient. [09:54.730 --> 09:56.330] We use just straight-up [09:56.330 --> 09:57.210] LEDs, so [09:58.590 --> 09:59.870] fortunately, the micro [09:59.870 --> 10:02.350] that we're using has the eight different [10:02.350 --> 10:04.490] cores. So I put together [10:04.490 --> 10:06.170] bitbangs, you know, [10:06.170 --> 10:07.810] live-driving all the [10:07.810 --> 10:10.350] charlieplexed matrix stuff. [10:11.650 --> 10:12.410] I think [10:12.410 --> 10:14.230] it would be really nice to be able to just map things [10:14.230 --> 10:16.410] like that. I like that. [10:16.870 --> 10:18.110] To continue, the [10:18.110 --> 10:20.110] the top [10:22.590 --> 10:23.190] end [10:23.190 --> 10:24.130] of that X-Mega series [10:24.130 --> 10:26.110] has eight [10:26.110 --> 10:27.830] hardware SPI [10:29.030 --> 10:30.210] and I think [10:30.210 --> 10:32.250] eight DMA channels. I'm not sure [10:32.250 --> 10:34.350] on that. I'd have to check the datasheet. [10:34.450 --> 10:36.030] So you could control eight [10:36.030 --> 10:37.550] different strips [10:38.110 --> 10:39.610] completely with hardware. [10:40.890 --> 10:41.270] So [10:42.010 --> 10:43.810] it all depends whether you [10:43.810 --> 10:46.090] you're doing a job that you want done [10:46.090 --> 10:47.650] and you want it done easy or [10:47.650 --> 10:49.270] if you're going for credit. [10:49.470 --> 10:51.330] If you're going for credit, it's the [10:52.130 --> 10:52.730] WS [10:53.650 --> 10:54.850] 2012. [10:55.150 --> 10:57.510] So I have [10:58.150 --> 10:59.990] a project that's been cooking for [10:59.990 --> 11:01.710] oh man, it's probably three years now [11:01.710 --> 11:03.910] where someone gave me a whole [11:03.910 --> 11:05.170] bunch of those LEDs [11:05.770 --> 11:08.130] stuck them to a board to make a [11:08.790 --> 11:10.090] scrolling text display [11:10.870 --> 11:13.310] and I have a [11:13.310 --> 11:14.030] 20 megahertz [11:14.030 --> 11:15.750] 8-bit microcontroller [11:15.750 --> 11:17.950] that reads out of an SD card [11:17.950 --> 11:20.050] and spits it out to those strings. [11:20.270 --> 11:22.030] Which, if anyone's worked with that [11:22.030 --> 11:23.870] knows how tight that timing is [11:23.870 --> 11:27.750] and getting that all fitted into a [11:27.750 --> 11:28.030] 20 [11:28.750 --> 11:30.470] megahertz 8-bit part [11:30.470 --> 11:34.070] was a real challenge. [11:34.070 --> 11:34.770] I'll second [11:34.770 --> 11:36.430] the APA 102. Having that [11:36.430 --> 11:39.430] clock line is really nice. We went back [11:39.430 --> 11:42.050] to the WS2812s this year [11:40.030 --> 11:42.030] and we are actually using SPI [11:42.050 --> 11:43.110] to do it. [11:43.910 --> 11:46.130] We are using Nordic on our [11:46.130 --> 11:48.150] MCU and one of the challenges [11:48.150 --> 11:50.290] with Nordic is you can only send 255 [11:50.290 --> 11:52.110] bytes at a time over DMA [11:52.110 --> 11:53.910] so the driver [11:53.910 --> 11:56.750] it works, but it will only work up to 20 LEDs. [11:57.390 --> 11:57.490] So [11:58.330 --> 12:00.190] somehow able to make it work through bit banging [12:00.190 --> 12:02.050] SPI with DMA. [12:02.690 --> 12:03.630] So with [12:03.630 --> 12:05.070] that 8-bit PIC [12:05.070 --> 12:08.790] I was able to do past that, but same thing. [12:08.890 --> 12:10.070] You get to a point [12:10.070 --> 12:12.370] in the flash or into the SD card [12:12.370 --> 12:14.110] and you get a page boundary. [12:14.110 --> 12:16.410] When you hit that, you have to readdress the card. [12:16.410 --> 12:18.090] So you have this big dead time before you [12:18.090 --> 12:19.590] get your next block of data. [12:19.770 --> 12:21.930] So to get around that, I ended up having to implement [12:22.230 --> 12:23.910] a circular buffer. So I would read [12:23.910 --> 12:25.630] ahead in the SD card. [12:25.810 --> 12:27.930] So every time the interrupt came around to go service [12:27.930 --> 12:29.930] the LEDs to keep their timing happy, [12:29.930 --> 12:32.050] there was always data there for it to do it. [12:32.050 --> 12:33.810] Otherwise, you get a delay [12:33.810 --> 12:36.130] all the LEDs would latch whatever data they had [12:36.130 --> 12:37.930] right now, even if it wasn't [12:37.930 --> 12:38.990] the correct data. [12:40.490 --> 12:41.930] Another reason I like the [12:41.930 --> 12:43.710] APA-102s is [12:44.470 --> 12:45.950] they can work at, you can [12:45.950 --> 12:47.550] send data up to, I think, [12:47.550 --> 12:50.010] 32 MHz. I'm not really sure because it's not [12:50.010 --> 12:51.650] really been relevant to me yet. [12:52.830 --> 12:53.910] But you can send [12:53.910 --> 12:56.050] data to them a lot faster. Another project [12:56.050 --> 12:57.530] I've been working on recently [12:57.530 --> 12:59.730] is we're putting LED strips [12:59.730 --> 13:01.410] on a car. [13:01.650 --> 13:03.990] So it lights up and does all sorts of cool things [13:03.990 --> 13:05.550] and there are strips that are [13:05.550 --> 13:07.150] 200 LEDs long [13:07.150 --> 13:09.550] and of course I wanted a reasonable refresh rate [13:10.590 --> 13:11.550] so that [13:11.550 --> 13:13.810] translates to having to [13:14.730 --> 13:15.510] send the data [13:15.510 --> 13:16.990] out very quickly. [13:20.240 --> 13:21.660] Side question. [13:21.860 --> 13:23.480] How masochistic do you have to be [13:23.480 --> 13:25.080] to get into badge design? [13:28.750 --> 13:30.090] You just need a [13:30.090 --> 13:32.170] pair of people that are like, hey, [13:32.170 --> 13:34.170] can you give us a hand with this? It'll be [13:34.170 --> 13:36.130] fun. That was a year [13:36.130 --> 13:36.610] ago. [13:37.410 --> 13:38.610] I remember getting [13:38.610 --> 13:39.710] that. [13:40.510 --> 13:41.130] So [13:42.870 --> 13:44.590] for this badge, [13:44.590 --> 13:46.230] for this conference, [13:46.230 --> 13:48.630] I started soldering in the [13:48.630 --> 13:50.550] beginning of February and it was [13:50.550 --> 13:51.910] about 6 hours every day [13:52.550 --> 13:54.830] and 16 hours on the weekend. [13:54.890 --> 13:56.110] No breaks. [13:56.450 --> 13:57.130] So [13:58.270 --> 14:00.610] if you're cool with that and you don't have a life [14:00.610 --> 14:02.450] otherwise, you're [14:02.450 --> 14:05.070] welcome to do that. [14:07.110 --> 14:07.810] Yeah, [14:07.810 --> 14:09.110] and these two have been programming [14:09.910 --> 14:11.290] this badge for [14:11.290 --> 14:13.030] about a year? [14:13.310 --> 14:15.290] Maybe? 8 months? [14:15.290 --> 14:17.150] 6 months? Yeah, probably 6 months. [14:17.150 --> 14:18.650] 6 months in earnest. [14:18.650 --> 14:21.330] We had all the circuit design before that. [14:22.030 --> 14:22.810] Yeah. [14:22.810 --> 14:23.070] So [14:24.710 --> 14:27.130] it really depends on your design. [14:27.130 --> 14:29.010] So last year's CypherCon badge was [14:29.010 --> 14:30.990] mostly solder work because there was [14:30.990 --> 14:33.410] no programming. So that was me. [14:33.410 --> 14:35.370] And I didn't have a stencil [14:35.370 --> 14:37.070] then, so I hand-pasted [14:37.850 --> 14:39.270] all of the [14:40.090 --> 14:41.130] pins. [14:42.330 --> 14:43.470] That took a long [14:43.470 --> 14:45.490] time, but I personally find it kind of [14:45.490 --> 14:46.290] zen. [14:48.830 --> 14:49.350] But [14:49.350 --> 14:50.270] yeah. [14:51.350 --> 14:52.390] Yeah. [14:53.710 --> 14:55.690] So very masochistic. [14:55.950 --> 14:57.410] So this year when we started [14:57.410 --> 14:59.370] she's like, I'll just hand-paste them. I'm like, [14:59.370 --> 15:01.470] no, get a stencil. I'll just hand-paste [15:01.470 --> 15:03.530] and get the stencil. She got the [15:03.530 --> 15:04.850] stencil, we set her up, and she's like, [15:05.390 --> 15:07.450] this is amazing! [15:08.190 --> 15:09.350] Well, and the brain board [15:09.350 --> 15:10.950] of this badge has like [15:11.670 --> 15:13.910] 80 parts or something like that? [15:13.910 --> 15:15.630] And so I was like, yeah. [15:15.630 --> 15:17.090] I don't think I can [15:17.090 --> 15:19.310] hand-paste that. And thankfully, my hand [15:19.310 --> 15:21.790] started cramping actually with the tweezer action. [15:22.330 --> 15:23.510] So I'd have to kind of [15:23.510 --> 15:25.090] shake it out every now and then [15:25.090 --> 15:27.870] and make sure I wasn't having a heart attack or something. [15:29.190 --> 15:30.190] I feel you. [15:30.190 --> 15:32.170] Anytime anyone asks [15:32.170 --> 15:34.270] us if we have a pick and place, Charles [15:34.270 --> 15:36.330] just smiles and looks at me. [15:36.910 --> 15:37.950] Yep. [15:38.510 --> 15:40.590] I think I'll add something to that. [15:40.770 --> 15:42.030] If you're 14, [15:42.030 --> 15:44.190] go to school and have a job. It's very [15:44.190 --> 15:46.190] difficult. I'm just going to [15:46.190 --> 15:47.510] say that right now. [15:51.560 --> 15:53.180] It's a labor of love, [15:53.180 --> 15:55.080] but I think, like, we've had [15:55.080 --> 15:56.900] such great feedback from everybody [15:56.900 --> 15:58.660] and part of it is [15:58.660 --> 16:01.860] loving to see how people work with your badge. [16:01.860 --> 16:03.520] Even if someone just [16:03.520 --> 16:04.700] sits there and [16:05.680 --> 16:08.520] tries to concentrate on it, even for a little bit, [16:08.520 --> 16:10.480] for me, it's worth it. [16:11.240 --> 16:11.880] So there [16:11.880 --> 16:13.820] is that trade-off. [16:18.900 --> 16:20.440] So for me, last year, [16:21.800 --> 16:22.680] basically, [16:22.680 --> 16:24.380] kids go to bed, I get on my [16:24.380 --> 16:26.340] computer. Kids go to bed, I get [16:26.340 --> 16:28.220] on my computer. Weekends, they're [16:28.220 --> 16:30.860] napping, whatever, I'm on my computer coding, [16:30.860 --> 16:32.500] designing, soldering, whatever. [16:33.360 --> 16:35.220] Some of us within the community, [16:35.220 --> 16:36.280] there's a hashtag we use called [16:36.280 --> 16:38.900] Badgelife, because it is a lifestyle. [16:38.940 --> 16:40.340] It's something you choose. [16:41.580 --> 16:42.520] I didn't have [16:42.520 --> 16:44.660] anybody saying, hey, this sounds like a good idea. [16:44.660 --> 16:46.600] It was mostly me telling myself that, so [16:46.600 --> 16:48.180] I can blame myself. [16:49.180 --> 16:50.580] But that's, yeah, that's my [16:50.580 --> 16:52.740] experience. Masochism. [16:52.760 --> 16:54.440] Yes, and I love it. [16:57.880 --> 16:58.460] Alright, so [16:58.460 --> 17:00.380] one thing I've noticed, and this is based on [17:00.380 --> 17:02.800] another question from Twitter, [17:02.800 --> 17:03.280] is that [17:04.380 --> 17:06.220] your first badge tends to be [17:06.220 --> 17:08.180] somewhat static or animated, and your second [17:08.180 --> 17:10.600] or third badge starts to become interactive. [17:10.600 --> 17:12.640] So you guys want to tell stories about [17:12.640 --> 17:14.500] transitioning from static [17:14.500 --> 17:16.200] badges to interactive badges? [17:17.520 --> 17:19.120] Oh, yeah. [17:19.600 --> 17:20.240] So [17:20.240 --> 17:22.420] last year's badge here, [17:23.040 --> 17:24.180] it being the first [17:24.180 --> 17:26.520] year of the conference, it needed to be [17:26.520 --> 17:27.580] pretty light. [17:29.040 --> 17:29.480] And [17:30.200 --> 17:31.680] Michael had asked me if I [17:31.680 --> 17:33.600] had any ideas that would work out [17:33.600 --> 17:35.520] for making it cost [17:35.520 --> 17:37.080] effective for a first year. [17:37.260 --> 17:39.600] And I sort of explained an idea of using [17:39.600 --> 17:41.400] just some 7400 logic chips [17:41.400 --> 17:44.040] to implement an XOR stream cipher. [17:44.440 --> 17:45.660] And he said [17:45.660 --> 17:47.960] you're hired. And I said, that's not what I meant. [17:50.520 --> 17:51.600] And we were closer [17:51.600 --> 17:53.460] to when the con was supposed to happen, [17:53.460 --> 17:55.160] when that conversation occurred. [17:55.160 --> 17:57.560] So it did have to be really simple. [17:57.620 --> 17:59.280] But we didn't want people to think [17:59.280 --> 18:00.780] that's all we can do. So [18:00.780 --> 18:03.160] this year we just sort of dropped [18:03.160 --> 18:05.200] the bomb on the conference a little [18:05.200 --> 18:06.500] bit with this badge. [18:06.840 --> 18:09.000] Because we all come from software [18:09.000 --> 18:10.880] design backgrounds, so [18:10.880 --> 18:13.060] we can do all that high-level stuff. [18:13.060 --> 18:15.240] But I think next year we might go back to something a little [18:15.240 --> 18:17.520] more analog and whatnot. [18:17.520 --> 18:19.080] I think it's good to be able to just shift [18:19.080 --> 18:21.220] around and change, do different things every [18:21.220 --> 18:21.880] year. [18:23.620 --> 18:24.820] There is an urge [18:24.820 --> 18:26.900] to show off, isn't there? I like the [18:26.900 --> 18:28.760] three-dimensional part. [18:28.760 --> 18:29.760] Thank you. [18:29.760 --> 18:32.900] It came together at a sushi restaurant [18:32.900 --> 18:34.980] on a paper napkin. [18:35.580 --> 18:36.960] We were like, we need [18:36.960 --> 18:39.720] to do something having to do with fringe science. [18:39.840 --> 18:40.920] And cube the movie [18:40.920 --> 18:42.700] while very sadistic [18:42.700 --> 18:45.560] is pretty fringy. [18:45.660 --> 18:46.980] But wait, can we [18:46.980 --> 18:48.160] do a cube? [18:48.720 --> 18:50.400] Wait, can we do a cube? [18:50.400 --> 18:52.400] Do we want to multiply everything [18:52.400 --> 18:54.180] by six times? [18:54.700 --> 18:56.760] Next time I want to see a dodecahedron. [18:57.340 --> 18:58.600] I think we were talking [18:58.600 --> 19:00.760] about a buckyball or something. [19:00.940 --> 19:02.100] That's basically it. [19:02.100 --> 19:02.860] Yeah. [19:03.980 --> 19:05.100] Nope. [19:08.200 --> 19:09.640] So in our experience [19:10.840 --> 19:12.120] in going from [19:12.120 --> 19:13.440] static to [19:14.260 --> 19:15.680] interactive, I just want to say [19:15.680 --> 19:18.160] I am still convinced that capacitive touch [19:18.160 --> 19:20.160] sensors are black magic. [19:20.520 --> 19:22.600] They're awesome because they're cheap. [19:23.180 --> 19:24.240] You basically just need [19:24.240 --> 19:26.160] like a resistor and a [19:26.820 --> 19:29.400] copper core. [19:29.400 --> 19:30.440] I did [19:30.440 --> 19:32.340] some on the badge that Ben is wearing. [19:32.340 --> 19:37.200] The recharge badge. [19:37.200 --> 19:38.360] And there's [19:38.360 --> 19:40.260] two down in front that work [19:40.260 --> 19:42.220] beautifully. And then I [19:42.220 --> 19:44.160] tried to do like a d-pad thing [19:44.980 --> 19:46.180] somewhere else on the badge. [19:46.180 --> 19:48.040] And I can see [19:48.040 --> 19:50.120] when stuff touches it, but [19:50.120 --> 19:52.080] the capacitance like crosses [19:52.080 --> 19:54.080] over all the buttons. There's no way to get [19:54.080 --> 19:56.140] any reliable direction out [19:56.140 --> 19:58.240] of it. And then I did [19:58.980 --> 20:00.300] try to do the same thing [20:00.300 --> 20:02.160] on this. I just kind of threw together at the last [20:02.160 --> 20:03.360] minute and [20:04.200 --> 20:04.880] when I [20:05.800 --> 20:08.220] built it, put the code on it, [20:08.220 --> 20:10.180] I started trying to use the touch pad [20:10.180 --> 20:12.600] and just nothing happened. [20:12.920 --> 20:14.740] In the car on the way up here. [20:14.740 --> 20:16.580] So I'm convinced [20:16.580 --> 20:18.620] they're black magic. If you get it to work [20:19.560 --> 20:20.460] amazing, [20:20.460 --> 20:22.140] please tell us how. [20:23.400 --> 20:24.720] I think another thing [20:24.720 --> 20:26.280] with the badge interactivity [20:26.280 --> 20:28.880] thought is, so our first [20:28.880 --> 20:31.200] one, there's different levels of interactivity. [20:31.200 --> 20:32.360] There's one where [20:32.360 --> 20:34.140] it's between [20:36.740 --> 20:38.480] you and your badge [20:38.480 --> 20:40.620] with another person and their badge [20:40.620 --> 20:42.220] and helping each other figure out [20:42.220 --> 20:43.560] like the [20:44.520 --> 20:46.260] encryption method for last [20:46.260 --> 20:48.240] year's badge. So there's [20:48.240 --> 20:50.280] the collaboration portion of [20:50.280 --> 20:52.020] people working together to try to figure out [20:52.020 --> 20:54.160] puzzles that are dealt with [20:54.160 --> 20:55.280] with the badge. [20:55.960 --> 20:58.240] With our second badge [20:58.240 --> 21:00.340] that we did for another conference, [21:00.340 --> 21:02.220] we thought about not [21:02.220 --> 21:04.280] only how people could collaborate, but also [21:04.280 --> 21:06.160] just the [21:06.160 --> 21:08.140] physicalness of actually getting [21:08.140 --> 21:10.520] two badges together to interact [21:10.520 --> 21:12.420] with each other. And if you've [21:12.420 --> 21:14.080] come to our table, you'll see one of the [21:14.080 --> 21:16.340] DNA strand badges. [21:17.620 --> 21:18.440] And so we [21:18.440 --> 21:20.620] wanted something that was simple enough to understand [21:20.620 --> 21:22.460] so that people didn't have to [21:22.460 --> 21:25.140] be geniuses to figure out how it works. [21:25.540 --> 21:27.180] And from that, [21:27.180 --> 21:28.920] when we come to this badge, [21:28.920 --> 21:30.400] this actually also has different [21:30.400 --> 21:32.100] levels, I feel, [21:32.100 --> 21:34.220] where it can be [21:34.220 --> 21:36.340] as simple as helping each other figure out how [21:36.340 --> 21:38.560] not to suffocate, to [21:39.200 --> 21:40.820] how you can [21:42.160 --> 21:42.720] jump [21:42.720 --> 21:44.980] from your badge to another person's badge, [21:44.980 --> 21:46.760] and then to the point where [21:46.760 --> 21:48.820] multiple people in one person's [21:48.820 --> 21:50.980] badge can talk to each other. [21:51.260 --> 21:52.820] So there were different levels [21:52.820 --> 21:54.740] that we wanted to try to hit [21:54.740 --> 21:56.200] for different reactions [21:57.240 --> 21:58.280] so that when people [21:58.980 --> 22:00.640] got to that reach goal, [22:00.640 --> 22:02.100] they're like, dudes. [22:02.460 --> 22:04.440] And that was motivation [22:04.440 --> 22:06.560] for us to keep feature [22:06.560 --> 22:07.840] creeping in some of these [22:09.460 --> 22:10.420] different aspects [22:10.420 --> 22:12.360] of the badge. So hopefully [22:12.360 --> 22:14.920] you guys have gotten to relay with each other on the badge. [22:14.920 --> 22:16.540] If you haven't, it is [22:16.540 --> 22:17.420] possible. [22:17.820 --> 22:20.540] So speaking of feature creep, [22:20.540 --> 22:22.580] how do you decide what to [22:22.580 --> 22:24.480] keep and when to cut off [22:24.480 --> 22:27.100] new ideas and such like that? [22:27.600 --> 22:28.620] And tell us stories [22:28.620 --> 22:30.400] about when you came up with an idea [22:30.400 --> 22:32.360] that was just too good to not [22:32.360 --> 22:34.520] do and was worth staying [22:34.520 --> 22:36.380] up all night for a few weeks to do. [22:36.420 --> 22:38.860] It's Tuesday night. The con's on Thursday. [22:43.240 --> 22:44.860] Charles can't answer this question. [22:44.860 --> 22:46.060] He does not know. [22:47.840 --> 22:49.960] I was going to say, Tuesday night? [22:50.060 --> 22:51.560] That's your cut off? [22:53.080 --> 22:55.040] This one it was. [22:56.240 --> 22:57.160] I think [22:58.220 --> 22:59.840] last year we had one that [23:01.840 --> 23:02.800] they're delivering [23:02.800 --> 23:04.320] the badges to the con in [23:04.320 --> 23:05.960] 12 hours. [23:06.840 --> 23:07.960] Yes. [23:08.520 --> 23:09.980] I remember that night. [23:13.340 --> 23:14.700] So anyone who's [23:14.700 --> 23:16.540] interacted with this one knows that [23:16.540 --> 23:17.680] we didn't [23:18.820 --> 23:20.800] stop at any point with our feature [23:20.800 --> 23:22.800] creep. We just kept going and going [23:22.800 --> 23:23.760] and going. [23:24.420 --> 23:26.800] It has two processors in it, [23:26.800 --> 23:28.780] which is reasons, [23:28.780 --> 23:30.800] right? The PIC hardware [23:30.800 --> 23:32.960] can do the IRDA stack [23:32.960 --> 23:34.880] and USB stack better [23:34.880 --> 23:36.380] than the PROP could have. [23:36.420 --> 23:38.540] But the PROP can do all sorts of neat things [23:38.540 --> 23:40.980] that the PIC wouldn't be very good at. [23:40.980 --> 23:42.340] So we just used both. [23:42.820 --> 23:44.760] The problem with the PROP [23:44.760 --> 23:46.800] is it only has 8k longs [23:46.800 --> 23:48.340] of programming space. [23:48.380 --> 23:51.020] And I needed to implement a [23:51.020 --> 23:53.620] timesharing operating system, [23:53.620 --> 23:55.340] an LED driver, and [23:55.340 --> 23:57.080] a text adventure, etc. [23:57.080 --> 23:58.640] So I kept running out of longs. [23:58.640 --> 24:00.660] Every two days, [24:00.660 --> 24:02.560] there would be like 40 longs left. [24:02.560 --> 24:04.620] And I would have to go back over the whole codebase [24:05.380 --> 24:06.760] and figure out ways [24:06.760 --> 24:08.360] to make it smaller and smaller and smaller [24:08.360 --> 24:10.560] so I could just have enough room to be able to [24:10.560 --> 24:12.520] implement the next feature that these guys [24:12.520 --> 24:14.480] were asking for without [24:15.160 --> 24:16.540] overflowing my stacks and [24:16.540 --> 24:18.560] the processor crashing and puking [24:18.560 --> 24:20.380] things all over the screen, etc. [24:20.980 --> 24:22.180] And then we found [24:22.180 --> 24:24.460] an idea that just let us go [24:24.460 --> 24:26.040] absolutely crazy. [24:26.040 --> 24:28.100] We took all of the strings [24:28.100 --> 24:30.000] in my source code and [24:30.000 --> 24:32.720] put them on the EEPROM in the PIC chip. [24:32.960 --> 24:34.220] Now I can just send [24:34.740 --> 24:35.960] a long to the PIC chip [24:35.960 --> 24:37.960] and the PIC chip loads up the string [24:37.960 --> 24:39.660] and sends it on to the user. So now I have [24:39.660 --> 24:42.260] 8k longs of all code [24:42.260 --> 24:43.320] space. [24:43.780 --> 24:46.040] So we were able to do things like implement the payphone [24:46.040 --> 24:48.360] and implement frequency generation on the fly [24:48.360 --> 24:49.160] for all the [24:50.120 --> 24:51.960] blue box and red box tone [24:51.960 --> 24:54.140] freaking, you know, all that stuff. [24:54.140 --> 24:56.240] So we basically just never [24:56.240 --> 24:58.160] said no. We just kept going and [24:58.160 --> 25:00.800] going and figured out how to fit it in. [25:02.380 --> 25:04.240] That seems to be a theme. How about you guys [25:04.240 --> 25:05.500] with the vendor badge? [25:06.860 --> 25:08.120] So the way we picked [25:08.120 --> 25:09.980] features, we had maybe [25:09.980 --> 25:12.020] 40 different ideas in our spreadsheet [25:12.020 --> 25:14.220] that the team contributed to. [25:14.540 --> 25:15.980] If you saw my talk, I mentioned [25:16.480 --> 25:18.120] FPGA. There was really no [25:18.120 --> 25:20.760] reason why other than to have an FPGA. [25:21.280 --> 25:22.120] So what we tried [25:22.120 --> 25:23.840] to do was just map, [25:23.840 --> 25:25.740] we have this cool hardware, [25:25.740 --> 25:27.280] what will it actually do? [25:27.440 --> 25:29.180] What's the person going to use it for? [25:29.180 --> 25:30.800] And then try to find commonality [25:30.800 --> 25:33.280] between those ideas. [25:33.460 --> 25:35.780] So one of the things we removed from this [25:35.780 --> 25:37.380] year's or this upcoming badge [25:37.380 --> 25:39.200] is accelerometer. [25:39.580 --> 25:41.320] We couldn't find anything to do with it [25:41.320 --> 25:42.960] other than to tilt the badge. [25:42.960 --> 25:45.000] So it was a huge waste of money [25:45.000 --> 25:47.540] just to put this QFN part on there. [25:49.300 --> 25:51.180] I've got to think of another one. [25:51.640 --> 25:52.440] As far as [25:52.440 --> 25:54.200] coding and feature creep, [25:54.200 --> 25:56.420] that is how it goes for us. [25:56.420 --> 25:58.300] The same thing as the toy makers. [25:58.500 --> 26:00.340] Our issue tracker this year [26:00.340 --> 26:02.580] already is up to 300 issues [26:02.580 --> 26:04.200] or 330 issues. [26:04.200 --> 26:07.300] That's well beyond anything we did last year. [26:07.360 --> 26:08.140] We're up to [26:08.140 --> 26:10.400] 170k of flash used. [26:10.400 --> 26:12.880] We only used 108 last year. [26:13.360 --> 26:14.440] So we're [26:14.440 --> 26:16.240] just above everything [26:16.240 --> 26:17.220] we did. [26:17.220 --> 26:18.380] And I don't think we're going to stop [26:18.380 --> 26:19.440] until right before the con [26:19.440 --> 26:21.060] where we have to flash these things. [26:21.260 --> 26:23.460] The issue is really stability. [26:23.460 --> 26:25.060] So every time I introduce a new feature [26:25.060 --> 26:27.540] into the code, what am I breaking? [26:27.540 --> 26:28.860] I have to go back and regression test [26:28.860 --> 26:30.600] everything that's already in there. [26:30.600 --> 26:32.140] And where I may have added a timer [26:32.140 --> 26:34.380] over here to drive an LED, [26:34.380 --> 26:36.180] I just affected the display driver [26:36.180 --> 26:38.880] over here on some animation or some game. [26:38.880 --> 26:40.760] So it's really difficult to ferret [26:40.760 --> 26:42.260] all those bugs out. [26:42.460 --> 26:44.880] Especially when you have so many things going on at once. [26:46.280 --> 26:46.980] And so I'm [26:46.980 --> 26:48.600] an expert at the [26:50.060 --> 26:50.940] game inside [26:50.940 --> 26:52.820] the Texas Adventure game because I'm the [26:52.820 --> 26:54.300] alpha tester for them. [26:54.560 --> 26:56.580] So I just have to know, I have to [26:56.580 --> 26:58.580] first be able to test all the deaths, [26:58.580 --> 27:00.820] to make sure I can get through the system, [27:00.820 --> 27:02.700] that all the actions and the looks [27:02.700 --> 27:04.100] are correct. [27:04.820 --> 27:06.660] So that's probably why I think [27:06.660 --> 27:07.700] it's so easy. [27:08.340 --> 27:09.460] Yeah, so this year, [27:09.460 --> 27:11.100] I'll throw it out, so Hyren [27:11.100 --> 27:13.240] is one of our new team members. [27:13.460 --> 27:15.140] He's been furiously testing the badge. [27:15.140 --> 27:17.860] Every time I push something to get, he's flashing onto his, [27:17.860 --> 27:19.560] he's doing some sort of test, and he's dumping [27:19.560 --> 27:21.560] about ten different issues into the [27:21.560 --> 27:23.680] tracker. So I close one thing, he opens [27:23.680 --> 27:25.960] ten. And it's usually some sort of frustrating [27:25.960 --> 27:27.600] chat log between us going, [27:27.600 --> 27:30.000] what just happened and why did this happen? [27:30.180 --> 27:31.780] So, yeah, I don't really have the same [27:31.780 --> 27:33.700] experience, but Hyren does. [27:35.700 --> 27:36.660] Again, [27:36.660 --> 27:37.940] masochism. [27:43.300 --> 27:44.680] Alright, let's start another [27:44.680 --> 27:46.820] Flame War. Language [27:46.820 --> 27:48.820] to write your code in. [27:52.360 --> 27:55.020] So, one of our [27:55.020 --> 27:56.840] friends that we hang out [27:56.840 --> 27:59.320] in IRC with is a microchip rep. [27:59.320 --> 28:00.800] And these guys originally said [28:00.800 --> 28:02.600] we want to do USB [28:02.600 --> 28:04.640] serial and IRDA. [28:04.640 --> 28:07.160] So we need two different chips to do this. [28:07.160 --> 28:08.560] He's like, oh, you can just [28:08.560 --> 28:09.860] do that in a PIC. [28:10.300 --> 28:12.360] And that's where I got involved, because I've done [28:13.100 --> 28:14.240] a lot of PIC code. [28:14.660 --> 28:16.420] Unfortunately, with the time frame we had [28:16.420 --> 28:18.620] and the chip they picked, they forced [28:18.620 --> 28:19.800] me to use C. [28:20.160 --> 28:22.560] So I have a ton of experience [28:22.560 --> 28:24.220] in assembly, because my [28:24.220 --> 28:26.360] previous jobs, I had to do [28:26.360 --> 28:27.780] some really tight optimization [28:29.220 --> 28:30.540] for work. [28:30.620 --> 28:32.340] And that just, you know, I learned [28:32.340 --> 28:34.260] in assembly, they wanted it done [28:34.260 --> 28:36.260] in assembly, because that's the only way we could optimize [28:36.260 --> 28:37.880] for certain cases. [28:38.260 --> 28:40.740] And then these guys come along like, hey, can you do this? [28:40.740 --> 28:42.500] There's this whole code thing over here, you just paste [28:42.500 --> 28:43.740] it in. So [28:44.260 --> 28:47.020] it was a real experience. [28:47.020 --> 28:48.280] You know, I knew C. [28:48.300 --> 28:50.280] I just didn't use it for [28:50.280 --> 28:52.460] programming microcontrollers until this last [28:52.460 --> 28:53.440] go-around. [28:54.320 --> 28:56.200] So, my preference is [28:56.200 --> 28:58.240] assembly. I'm a hardware guy. [28:58.240 --> 29:00.300] If I do it in assembly, I know exactly [29:00.300 --> 29:01.840] what the hardware is going to do. [29:01.840 --> 29:05.000] The downside is, I have to optimize everything. [29:05.080 --> 29:06.740] So it's totally a trade-off. [29:06.980 --> 29:08.220] If you trust your [29:09.600 --> 29:10.520] compiler, [29:10.520 --> 29:12.340] and you know it's going to do [29:12.420 --> 29:14.320] a good job, go with a compiled [29:14.320 --> 29:16.260] language. If you're [29:16.260 --> 29:18.160] doing something a little odd, or [29:18.160 --> 29:20.280] really odd in my case, then [29:20.280 --> 29:22.120] assembly might be the better way to go. [29:25.960 --> 29:27.380] I spend most of my time [29:27.380 --> 29:28.560] in C, [29:29.620 --> 29:31.280] although it should be pointed out [29:31.280 --> 29:33.440] that you can embed assembly in C, [29:33.440 --> 29:35.260] and I've had to do that on a few occasions [29:35.260 --> 29:37.360] when the compiler just couldn't figure [29:37.360 --> 29:39.320] out exactly what I was trying to do. [29:39.860 --> 29:40.820] The compiler [29:40.820 --> 29:43.320] also can usually do all kinds of [29:43.320 --> 29:45.740] amazing things that you would never think of. [29:45.860 --> 29:47.280] And I also find it very [29:47.280 --> 29:49.520] useful. The compiler, or [29:49.520 --> 29:50.780] one of the object [29:51.280 --> 29:53.360] manipulation things [29:53.360 --> 29:55.280] in the toolchain, will [29:55.280 --> 29:56.980] spit out an assembly listing [29:56.980 --> 29:59.400] of the code that is compiled. [29:59.400 --> 30:01.280] And if you really need to optimize something, [30:01.280 --> 30:03.640] you really need to figure out [30:03.640 --> 30:05.160] why you just lost [30:05.160 --> 30:06.880] 2K of program space [30:07.380 --> 30:09.320] when you added something that seemed really [30:09.320 --> 30:11.280] simple, you can go back to that [30:11.280 --> 30:13.540] listing and see what the compiler actually did [30:13.540 --> 30:15.420] and figure out where it might [30:15.420 --> 30:16.880] be doing something stupid. [30:18.940 --> 30:19.420] So [30:19.420 --> 30:21.260] first of all, Arduino sucks. [30:22.380 --> 30:23.100] I did [30:23.100 --> 30:25.580] the Bender badge last year in Arduino. [30:25.580 --> 30:28.540] If you look at our code [30:28.540 --> 30:30.520] on GitHub, we had about 30 [30:30.520 --> 30:32.600] different files. I had to name the file [30:32.600 --> 30:34.200] and give them the shortest name possible [30:34.200 --> 30:36.820] so it would fit on those tabs across the top. [30:37.200 --> 30:38.300] This year we're [30:38.300 --> 30:40.360] C, using Nordic. [30:40.360 --> 30:42.760] I actually kind of like the Nordic SDK. [30:42.760 --> 30:44.400] It's pretty nice to work with. [30:44.400 --> 30:46.040] As long as you don't use their high-level [30:46.500 --> 30:48.760] libraries too much, you're pretty much okay. [30:51.720 --> 30:52.200] So [30:53.060 --> 30:54.640] contrary to basically [30:54.640 --> 30:56.340] every Hackaday comment ever [30:56.340 --> 30:58.500] about the Parallax Propeller, you can [30:58.500 --> 31:00.440] use C on it. [31:01.200 --> 31:02.460] I don't, [31:02.460 --> 31:04.340] because I've been using Spin for a long time [31:04.340 --> 31:06.260] and I'm pretty good with it, and I [31:06.260 --> 31:08.320] treat it more like you'd approach [31:08.320 --> 31:09.280] assembly. [31:10.160 --> 31:12.380] I'm mostly shifting things in and out of [31:12.380 --> 31:13.840] registers all the time. [31:13.840 --> 31:15.240] To me, it's more about [31:16.280 --> 31:18.160] how I'm using memory than it is about [31:18.160 --> 31:19.580] what language I'm using. [31:19.720 --> 31:21.660] All this stuff is super low-level. [31:22.200 --> 31:23.880] But again, this is a weird [31:23.880 --> 31:25.740] one because not only was I [31:25.740 --> 31:27.720] having to choose a programming language [31:27.720 --> 31:29.900] to work in, that made sense for my [31:29.900 --> 31:30.920] platform. [31:31.240 --> 31:33.420] There's also a programming language [31:33.420 --> 31:35.080] interpreter built into this. [31:35.080 --> 31:37.860] So I had to design a programming language [31:37.860 --> 31:39.300] for it. [31:39.620 --> 31:41.240] So, I don't know. [31:44.780 --> 31:45.820] Alrighty. [31:46.560 --> 31:48.080] Here's the last fun one [31:48.080 --> 31:49.620] we got from Twitter. [31:49.980 --> 31:51.620] And I will add a couple of details to it [31:51.620 --> 31:53.760] because it's kind of short. [31:53.920 --> 31:55.760] Would you rather hand solder [31:55.760 --> 31:58.120] 1,000 duck-sized horse badges [31:58.120 --> 32:00.020] or one horse-sized [32:00.020 --> 32:00.920] duck badge? [32:00.940 --> 32:02.860] Asking for a friend. [32:02.860 --> 32:05.580] And I'm going to say same component count [32:05.580 --> 32:07.320] for both scenarios. [32:07.320 --> 32:08.800] How many components? [32:09.220 --> 32:10.520] The same. [32:11.960 --> 32:13.820] I see what you mean. [32:13.820 --> 32:16.340] How big are they? [32:16.500 --> 32:17.480] Well, there are [32:17.480 --> 32:19.280] 1,000 duck-sized horse badges [32:19.280 --> 32:21.840] and one horse-sized duck badge. [32:21.840 --> 32:23.060] Yeah, but the components can be [32:23.060 --> 32:25.360] kind of small on them, or they could be like [32:25.360 --> 32:26.720] you know, whatever. [32:26.720 --> 32:27.760] Your choice. [32:28.320 --> 32:30.680] Does it weigh the same as a duck? [32:32.660 --> 32:34.220] Does it quack like a duck? [32:34.220 --> 32:34.740] Yes. [32:39.360 --> 32:40.740] 1,000. [32:41.320 --> 32:42.840] 1,000 ducks. [32:43.520 --> 32:45.680] Wait, horse-sized ducks? [32:45.700 --> 32:46.860] Duck-sized horses. [32:47.480 --> 32:48.580] I don't know. [32:48.580 --> 32:49.300] Whatever. [32:49.460 --> 32:52.960] The 1,000 options, because you have reach goals. [32:53.300 --> 32:55.860] So like, when you're soldering, [32:55.860 --> 32:56.680] you know that [32:56.680 --> 32:58.780] if you get this 10 done, [32:58.780 --> 33:01.080] like this group of 10 done, [33:01.080 --> 33:03.000] you're 10 closer to the end. [33:03.040 --> 33:05.060] And you can look at your little stack [33:05.060 --> 33:07.160] of done piles and you're like, look what I did. [33:07.560 --> 33:08.180] That's so nice. [33:08.180 --> 33:10.860] But with the horse-sized duck, [33:11.620 --> 33:13.540] then you're just waiting forever. [33:13.980 --> 33:14.940] You know, and you're still [33:14.940 --> 33:17.520] pasting, pasting, pasting. [33:17.660 --> 33:18.780] And, yeah. [33:18.780 --> 33:20.140] So I think I'd do the 1,000. [33:20.420 --> 33:22.800] I mean, I did 2,400, so... [33:22.800 --> 33:23.480] whatever. [33:25.720 --> 33:26.860] I'll agree with the 1,000 [33:26.860 --> 33:28.360] because it becomes repetitive, right? [33:28.360 --> 33:30.400] That was kind of our pick and place last year. [33:31.380 --> 33:32.860] It's really easy to line up [33:32.860 --> 33:34.660] four badges and then drop the same component [33:34.660 --> 33:37.260] on all four and then put those into the oven. [33:37.740 --> 33:38.860] If we did the [33:39.260 --> 33:40.840] horse-sized duck, I'd just make [33:40.840 --> 33:43.080] Jorge do that one because he's really good at soldering [33:43.600 --> 33:45.060] a bunch of different components. [33:45.980 --> 33:47.080] Now the other thing is [33:47.080 --> 33:49.340] if you have like a quilting club, you know, [33:49.340 --> 33:51.320] you just set everybody around [33:51.580 --> 33:52.980] a lazy Susan or something [33:52.980 --> 33:55.100] and then they can take care of a part [33:55.100 --> 33:56.880] of the horse. So I guess there's that, but [33:56.880 --> 33:59.280] if you can't rely on, you know, [33:59.280 --> 34:01.040] everybody soldering like [34:01.280 --> 34:03.300] a masochist, then, yeah, [34:03.300 --> 34:04.980] 1,000. I'll echo the [34:04.980 --> 34:07.120] 1,000 for the assembly. [34:07.200 --> 34:08.980] You know, you can, you know, [34:08.980 --> 34:10.680] do assembly line style. You can [34:10.680 --> 34:13.720] get into the right rhythm. [34:15.180 --> 34:16.400] Can we make [34:16.400 --> 34:18.740] the large duck out of the smaller [34:18.740 --> 34:21.480] horses? Why not? [34:21.580 --> 34:22.700] Because then [34:22.700 --> 34:25.520] it's basically the same thing. [34:29.870 --> 34:31.310] I would just send mine to [34:31.610 --> 34:33.270] Macrofab for assembly. [34:37.650 --> 34:39.970] I'd send it to my picking place. [34:40.030 --> 34:41.250] That would be me. [34:43.890 --> 34:45.670] All right, I'm out of Twitter questions, [34:45.670 --> 34:48.370] so it's time for audience questions. Who's got a question? [34:49.330 --> 34:51.070] All right, you get first. [34:53.190 --> 34:56.070] So what feature of your badge [34:56.750 --> 34:58.170] do you hope [34:58.170 --> 35:00.130] and pray somebody finds? [35:00.130 --> 35:01.790] An Easter egg or [35:01.790 --> 35:03.590] some kind of hidden component? [35:03.930 --> 35:06.430] I'm asking for myself. [35:08.050 --> 35:09.310] The woods? [35:09.310 --> 35:10.350] The woods? [35:11.310 --> 35:12.630] For you? [35:12.630 --> 35:14.330] Probably. For Peter, [35:14.330 --> 35:15.850] it'd be the woods. [35:16.090 --> 35:18.250] If you find the woods. [35:18.730 --> 35:20.470] One person has found the [35:20.470 --> 35:22.310] woods, and they're like this [35:22.310 --> 35:23.750] close to getting in. [35:26.090 --> 35:28.410] No one has come anywhere near [35:28.410 --> 35:30.030] locating the panopticon [35:30.030 --> 35:32.870] that is in the center of the missile silo. [35:32.990 --> 35:34.450] So, you know, [35:34.450 --> 35:35.850] get busy, guys. [35:38.510 --> 35:40.270] So next year's badge will be [35:40.270 --> 35:42.270] trawlable like last year's. [35:42.310 --> 35:44.270] I had a little device last year that was [35:44.270 --> 35:46.110] sending out the rickroll packet [35:46.110 --> 35:47.910] every second, and we were rickrolling [35:47.910 --> 35:49.530] everyone we walked by. [35:49.690 --> 35:51.930] So of course we're going to do that next year. [35:52.050 --> 35:54.190] And if you're really good at Bluetooth, [35:54.190 --> 35:56.250] you may be able to figure out how to rickroll [35:56.250 --> 35:58.130] or Hypnotoad or [35:58.130 --> 35:59.570] whatever you want, all other [35:59.570 --> 36:02.130] vendor badges. And you won't need a badge to [36:02.130 --> 36:04.030] do it. You can do it with your phone. [36:04.210 --> 36:05.730] I remember I was like [36:05.730 --> 36:08.030] two drinks in, and all of a sudden I looked down [36:08.030 --> 36:10.230] and I'm getting rickrolled. And I'm like, where are they? [36:13.330 --> 36:13.770] So [36:14.730 --> 36:16.170] a story that I can tell [36:16.170 --> 36:18.270] is back [36:18.270 --> 36:20.190] when I was a noob at going to [36:20.190 --> 36:22.330] cons and nobody knew or cared who I was [36:22.810 --> 36:24.110] I'd put puzzles [36:24.110 --> 36:26.010] on my shirt or something [36:27.150 --> 36:28.030] and nobody [36:28.030 --> 36:29.350] cared and nobody would [36:29.350 --> 36:31.490] try to solve it. [36:32.350 --> 36:32.430] So [36:34.530 --> 36:35.090] for... [36:35.090 --> 36:37.350] and I want to echo what was [36:37.350 --> 36:39.350] said earlier about basically if you [36:39.350 --> 36:41.370] find anything that we've put [36:41.370 --> 36:42.110] into these badges [36:43.470 --> 36:45.370] that's just amazing for us. [36:45.370 --> 36:47.290] That someone actually took the time to find it [36:47.290 --> 36:49.370] and mess around with it. [36:50.890 --> 36:53.090] And I think actually that goes like [36:53.090 --> 36:55.090] last year's badge with encryption [36:55.090 --> 36:57.270] we had a single encryption [36:58.010 --> 36:59.410] sentence, I guess, on the back [36:59.410 --> 37:00.970] of the badge. And [37:00.970 --> 37:03.450] of 225 people [37:03.450 --> 37:05.370] I think, or 250 people who came to the [37:05.370 --> 37:07.450] conference, one team [37:07.450 --> 37:09.370] solved it. And it was students. [37:09.370 --> 37:11.550] So we love students. [37:11.950 --> 37:13.490] Because they roll over [37:13.490 --> 37:15.430] to our table. Okay, does [37:15.430 --> 37:17.030] it work like this? [37:17.290 --> 37:19.330] Oh no! And then they roll [37:19.330 --> 37:21.170] back and they work on it. So the [37:21.170 --> 37:23.410] working on it is really like [37:23.410 --> 37:24.950] what drives us and what [37:24.950 --> 37:26.910] we're going to be talking about on the [37:26.910 --> 37:28.770] trip home, to be honest. [37:28.970 --> 37:30.910] Yes, those students that cracked it [37:30.910 --> 37:33.110] last year, you may see them in the hallway. [37:33.110 --> 37:35.050] They've taken over an alcove. They've found [37:35.050 --> 37:36.950] an outlet. They have disassembled the [37:36.950 --> 37:39.030] badge, hooked logic analyzers [37:39.030 --> 37:40.910] up to it, broken [37:40.910 --> 37:42.890] basically everything. They're [37:42.890 --> 37:45.010] going through it every step. [37:45.010 --> 37:46.890] And that is [37:46.890 --> 37:49.270] worth more than whatever Getsman paid us. [37:49.270 --> 37:50.830] That feels really good. [37:53.110 --> 37:54.290] You know, [37:54.290 --> 37:55.150] continue to [37:55.150 --> 37:56.970] play with the badge. Just because the [37:56.970 --> 37:59.290] con's over, you can still play with it. [37:59.290 --> 38:00.950] And if you do find stuff, [38:00.950 --> 38:02.810] tweet it out at us. I mean, it's [38:02.810 --> 38:04.790] cool to see that, hey, two [38:04.790 --> 38:07.250] years from now someone tweets you and is like, hey, [38:07.250 --> 38:08.930] on the CypherCon 2.0 badge [38:08.930 --> 38:10.610] I found this. Just [38:10.610 --> 38:12.770] know that it's still interesting [38:12.770 --> 38:14.830] to someone. They just didn't all get thrown out at [38:14.830 --> 38:15.890] the end of the con. [38:16.430 --> 38:18.910] And for me personally, there are two [38:18.910 --> 38:21.410] things that I want to see done. [38:21.650 --> 38:23.070] So one, I've already seen [38:23.070 --> 38:24.950] kind of because people wanted points, like the [38:24.950 --> 38:26.810] QR code points, which was relay [38:26.810 --> 38:28.350] people chatting with each other. [38:28.490 --> 38:30.490] That blew my mind when [38:30.490 --> 38:32.990] Whisker implemented it. They're like, hey, [38:32.990 --> 38:34.710] sit down. And I'm like, [38:34.710 --> 38:36.950] okay, whatever. They're like, relay me. [38:36.950 --> 38:38.750] And I'm like, okay, blah. And then he starts [38:38.750 --> 38:41.150] talking to me, and I'm like, [38:41.150 --> 38:42.730] what is this? [38:42.810 --> 38:44.990] Right? I was amazed. And I love [38:44.990 --> 38:46.850] that, like, chat with each other on [38:47.010 --> 38:48.230] a badge. [38:49.430 --> 38:50.630] The other thing [38:50.630 --> 38:53.350] is when I was testing, [38:53.350 --> 38:54.730] I never managed to get [38:54.730 --> 38:56.390] more than seven hops [38:57.370 --> 38:58.710] through the badges. Seven [38:58.710 --> 39:01.010] to eight, maybe, hops [39:01.010 --> 39:02.710] before it got way too slow [39:02.710 --> 39:04.510] for me to talk or to [39:04.510 --> 39:06.990] telnet to the next badge. So I want to see [39:06.990 --> 39:08.790] how far somebody [39:08.790 --> 39:10.710] can telnet, which may require [39:10.710 --> 39:12.430] getting a bunch of people together in a circle [39:12.430 --> 39:14.710] and keeping track of [39:14.710 --> 39:16.710] where you are in the chain to make sure [39:16.710 --> 39:19.090] you're not doubling back on yourself. [39:19.430 --> 39:21.270] So, yeah. [39:21.430 --> 39:22.770] So one thing that we did at the [39:22.770 --> 39:24.650] last minute is I put [39:24.650 --> 39:26.730] these coins together that we've been [39:26.730 --> 39:28.750] handing out a few of them here and there. [39:29.170 --> 39:30.770] There's a couple of things on [39:30.770 --> 39:32.990] here that you can try to figure out. [39:34.390 --> 39:35.270] If you [39:35.270 --> 39:36.770] go to a lot of these cons, like [39:36.770 --> 39:38.370] DefCon, DerbyCon, [39:38.370 --> 39:40.810] we're going to try to hook that [39:40.810 --> 39:43.010] into something that we bring to those. [39:43.010 --> 39:45.090] So, yeah. [39:45.090 --> 39:46.910] I would be really [39:46.910 --> 39:48.930] happy if someone actually makes that connection [39:48.930 --> 39:50.950] and does that. Especially since I don't [39:50.950 --> 39:53.130] know what exactly [39:53.130 --> 39:55.270] it's going to do yet because I haven't written it. [39:55.690 --> 39:56.370] Okay. [40:00.690 --> 40:01.470] How much [40:01.470 --> 40:03.330] time is spent on research and [40:03.330 --> 40:05.270] development compared to production [40:05.270 --> 40:06.350] of the badges? [40:09.850 --> 40:11.410] So, a lot of that [40:12.030 --> 40:13.510] come... oh, sorry. [40:13.790 --> 40:14.790] Can I go first? [40:14.790 --> 40:16.070] Go ahead. [40:16.470 --> 40:18.070] A lot of that comes down to [40:18.510 --> 40:21.030] what you're doing and have you done it before. [40:21.630 --> 40:22.950] So, this year [40:22.950 --> 40:24.730] with the USB stack and the [40:24.730 --> 40:26.870] IRDA stack, that was a lot [40:27.430 --> 40:28.490] of... I mean, [40:28.490 --> 40:30.710] it wasn't so much research and development, but it was [40:30.710 --> 40:32.030] just a lot of learning. [40:32.550 --> 40:34.890] I knew this part existed here, I knew that part [40:34.890 --> 40:37.150] existed there, but I never put them together. [40:37.790 --> 40:39.290] So, what do you say? [40:39.550 --> 40:41.070] 40-60 split? [40:42.950 --> 40:44.030] Yeah. [40:44.750 --> 40:44.970] For [40:44.970 --> 40:47.130] the hardware portion, it [40:47.130 --> 40:49.130] also depends on your parts. So, [40:49.130 --> 40:50.830] we sourced through a broker in China [40:51.510 --> 40:52.050] and [40:53.410 --> 40:55.110] there are ups and downs to [40:55.110 --> 40:57.210] that. One of the downs [40:57.210 --> 40:58.950] was that the part that I [40:58.950 --> 40:59.970] asked him to get [41:00.990 --> 41:03.090] was completely opposite from the part [41:03.090 --> 41:05.090] that we got. So, we had [41:05.090 --> 41:07.070] like 2100 [41:08.090 --> 41:09.170] LEDs that [41:09.170 --> 41:11.190] were completely backwards. [41:11.710 --> 41:13.250] And so, what that meant was I had to [41:13.250 --> 41:15.190] re-spin all the boards, like [41:15.190 --> 41:16.650] all the sides, [41:17.170 --> 41:19.210] and make sure that those prototypes worked [41:19.210 --> 41:20.930] with the new LED [41:20.930 --> 41:22.810] that we actually got sourced. [41:23.210 --> 41:25.190] And then the other thing is partially [41:25.190 --> 41:27.170] feature creep. [41:27.290 --> 41:29.850] So, if you look at your badges, [41:29.850 --> 41:31.270] there are, on the sides [41:31.270 --> 41:33.430] and the top, there are absolutely [41:33.430 --> 41:34.930] no vias. [41:35.370 --> 41:37.170] So, there's nothing... [41:37.170 --> 41:39.730] Yeah, okay, I'm really proud of that. [41:39.950 --> 41:41.150] There are no vias [41:41.150 --> 41:43.190] on these boards. And so, if you look [41:43.190 --> 41:45.130] at the rose pattern [41:45.130 --> 41:47.030] inside for these [41:47.030 --> 41:49.490] 16 LEDs, and you've [41:49.490 --> 41:51.150] done trace work before, like [41:51.730 --> 41:53.190] that's... I'd like to think [41:53.190 --> 41:54.350] that's impressive. [41:55.050 --> 41:57.170] So, the amount of time that was spent [41:57.170 --> 41:58.630] doing that trace work [41:59.170 --> 42:01.190] was a little more than [42:01.190 --> 42:03.810] your normal board. [42:04.330 --> 42:04.890] But, [42:05.730 --> 42:06.470] yeah, so [42:06.470 --> 42:08.890] at least for me, that part [42:08.890 --> 42:10.710] depended on the parts and [42:10.710 --> 42:12.790] whether it worked or not. [42:13.970 --> 42:14.970] So, for us, it's [42:14.970 --> 42:17.330] about 30-40% [42:17.330 --> 42:19.770] of the time is spent just researching, [42:19.770 --> 42:21.350] buying sample parts, [42:21.350 --> 42:22.950] prototyping, writing drivers, [42:22.950 --> 42:24.950] and just kind of figuring out all [42:24.950 --> 42:26.830] those ideas that we have, which ones will [42:26.830 --> 42:27.990] actually work. [42:28.690 --> 42:30.550] The production part is... [42:30.550 --> 42:33.030] it's a furious activity. At least last year [42:33.030 --> 42:35.170] it was. It's about 6 weeks long. [42:35.230 --> 42:37.270] Not counting sourcing any of the parts. [42:37.270 --> 42:39.170] One thing I've learned, especially dealing with China, [42:39.170 --> 42:41.090] is buy the parts early, [42:41.090 --> 42:43.410] get them on hand, and then finalize [42:43.410 --> 42:45.370] the design based upon that. [42:45.370 --> 42:47.170] So, our displays last year, I think [42:47.170 --> 42:49.430] I had those on hand in March, and we didn't finalize [42:49.430 --> 42:50.950] until May. [42:51.350 --> 42:53.050] And that was just because I wasn't sure what pins [42:53.050 --> 42:54.450] I would actually end up with. [42:57.510 --> 42:59.270] Any more questions from the audience? [42:59.870 --> 43:00.930] Don't be shy. [43:02.490 --> 43:03.490] Can we [43:03.490 --> 43:05.230] make up more questions? [43:06.290 --> 43:06.890] Any [43:06.890 --> 43:09.250] duck-sized dogs or horse-sized [43:09.250 --> 43:10.670] elephants? [43:17.600 --> 43:19.140] Is there any [43:19.140 --> 43:21.800] way you can control [43:21.800 --> 43:23.820] things like TVs with the [43:23.820 --> 43:25.000] badges? [43:29.780 --> 43:30.660] The [43:30.660 --> 43:32.480] IRDA stack [43:32.480 --> 43:34.480] relies on a hardware IRDA [43:34.480 --> 43:36.220] engine in the PicMicro. [43:36.560 --> 43:38.300] And the way that IRDA [43:38.300 --> 43:40.320] works is whenever you... [43:40.320 --> 43:42.280] We're using SIR, which is [43:42.280 --> 43:44.220] simple IR. IRDA [43:44.220 --> 43:46.440] mode. So basically, it acts [43:46.440 --> 43:48.200] like a glorified UARP. [43:48.240 --> 43:50.260] The way it does it, though, is it takes [43:50.260 --> 43:52.500] for any time you send a zero, [43:52.500 --> 43:54.480] it takes the bit time, [43:54.480 --> 43:55.860] divides it by 8, and sends [43:55.860 --> 43:58.220] one high pulse for that [43:58.220 --> 44:00.280] bit time. And then on the other end, [44:00.280 --> 44:02.560] it uses that to sync things back up [44:02.560 --> 44:04.620] because they're going to be totally out of sequence [44:04.620 --> 44:06.480] and also due to reflections [44:06.480 --> 44:08.720] and other things, if it sees two [44:08.720 --> 44:10.760] pulses in that same window because [44:10.760 --> 44:12.660] of reflections, it [44:12.660 --> 44:14.680] ignores the second one. So it helps it [44:14.680 --> 44:16.180] recover the signal. [44:16.680 --> 44:18.380] So in theory, no. [44:18.640 --> 44:20.360] But as soon as I say that, someone's going to be like, [44:20.360 --> 44:22.420] hey, I just turned off my TV. So [44:22.420 --> 44:24.780] if you get the right baud rate [44:24.780 --> 44:26.680] coming out of IRDA and the bits [44:26.680 --> 44:28.960] just happen to line up in the right spots, [44:28.960 --> 44:30.940] it might be possible. [44:30.940 --> 44:32.080] So [44:33.600 --> 44:34.240] the [44:34.940 --> 44:37.000] TVVigon is a really neat little [44:37.000 --> 44:38.860] mischief making device. [44:38.980 --> 44:40.900] And it's completely open source [44:40.900 --> 44:42.840] so you can get the plans off of [44:42.840 --> 44:44.660] wherever. [44:44.700 --> 44:46.900] Adafruit has one version of it. [44:46.920 --> 44:48.500] It runs with an [44:48.500 --> 44:51.660] ATTiny85, a couple of transistors, [44:51.660 --> 44:53.260] and infrared LEDs. [44:53.640 --> 44:54.720] And, well, crystal [44:54.720 --> 44:57.080] power filtering capacitors, all that. [44:57.480 --> 44:58.760] Boilerplate. [44:58.760 --> 45:00.160] And that [45:00.560 --> 45:02.860] has been and will be rolled into [45:04.380 --> 45:05.660] badges. [45:06.060 --> 45:06.700] So [45:06.700 --> 45:08.980] the first IRDA part [45:08.980 --> 45:10.560] that I picked had [45:11.260 --> 45:12.440] a RR remote mode [45:12.440 --> 45:14.680] built into it. But unfortunately, [45:14.680 --> 45:16.760] when that part just turned out to be [45:17.920 --> 45:19.180] junk, [45:19.180 --> 45:20.660] the new part didn't [45:20.660 --> 45:22.900] have that, so that feature got dropped. [45:23.920 --> 45:24.760] But it would have [45:24.760 --> 45:26.320] been a good feature for you. [45:26.320 --> 45:28.400] Yeah, I mean, we were totally planning [45:28.400 --> 45:30.600] with the original part to support [45:31.800 --> 45:33.200] there's a [45:33.200 --> 45:34.940] Linux open source project [45:34.940 --> 45:36.780] for controlling remote TVs [45:36.780 --> 45:38.720] and whatnot, where they have a standard [45:38.720 --> 45:40.820] format of libraries for IR codes. [45:40.820 --> 45:42.840] We were planning on supporting that format [45:42.840 --> 45:44.600] so you could just type it in and your badge [45:44.600 --> 45:46.780] would do it. But unfortunately, switching [45:46.780 --> 45:48.700] to the other IRDA module [45:48.700 --> 45:52.020] sort of killed that feature. [45:52.020 --> 45:52.680] I will say [45:53.560 --> 45:54.440] that Charles and I have been [45:54.440 --> 45:56.280] told not to provide batteries [45:56.280 --> 45:58.100] for certain things. [45:58.100 --> 46:00.320] You can do that at certain conventions [46:00.320 --> 46:01.700] by the hotel staff. [46:02.220 --> 46:04.320] Pro tip, some of our TV [46:04.320 --> 46:06.360] BeGons and some of our other soldering kits [46:06.360 --> 46:08.220] take the same kind of battery. [46:10.320 --> 46:10.680] So [46:10.680 --> 46:12.440] that was actually one of the ideas [46:12.440 --> 46:14.740] we dumped. We had a TV BeGon idea. [46:14.740 --> 46:16.440] We wanted to do IR and do some interesting [46:16.440 --> 46:18.280] badge-to-badge comms with it. [46:18.280 --> 46:20.640] We didn't continue with that idea. [46:20.640 --> 46:22.440] But if you have the Defcon 20 or [46:22.440 --> 46:24.500] Defcon 22 badge, those are easy [46:24.500 --> 46:26.440] to hack to do [46:26.440 --> 46:28.440] any Sony IR remote control code [46:28.440 --> 46:30.500] you want to do. We did it and [46:30.500 --> 46:32.360] we're actually able to basically DOS [46:32.360 --> 46:34.420] any IR signal around us [46:34.420 --> 46:36.520] with the Defcon 20 badge. [46:36.520 --> 46:39.240] So if you have that on hand, go look at it. [46:39.800 --> 46:40.600] So what [46:40.600 --> 46:42.440] dream feature would you guys like [46:42.440 --> 46:44.320] to add to a badge if you had [46:44.320 --> 46:46.320] the budget and the time [46:46.320 --> 46:48.440] and all of the stars aligned? [46:48.480 --> 46:49.600] Defray! [46:49.600 --> 46:51.180] Defray or deathray? [46:52.560 --> 46:53.140] Let's go ahead and [46:53.140 --> 46:55.640] add a deathray. [46:55.680 --> 46:57.380] We might have a winner there. [47:05.880 --> 47:08.020] Fully fledged relay computer? [47:09.140 --> 47:11.520] Clack, clack, clack, clack, clack, clack, clack, clack, clack. [47:11.520 --> 47:12.760] Clack, clack, clack, clack, clack, clack, clack, clack, clack. [47:12.780 --> 47:13.700] Oh! [47:13.700 --> 47:15.380] Yeah, flip dots or something. [47:15.380 --> 47:17.240] Flip dots. [47:17.240 --> 47:18.300] Flip dots. [47:21.680 --> 47:23.260] Alright, so the first thing [47:23.260 --> 47:24.940] I'm going to do with mine when I get it home [47:26.520 --> 47:27.000] is [47:27.000 --> 47:29.420] tap into the UART [47:29.420 --> 47:31.280] that's on the bottom and [47:31.980 --> 47:33.240] hook it up to my acoustic [47:33.240 --> 47:35.420] coupler because we have a PBX [47:35.420 --> 47:36.820] in our house because we're [47:36.820 --> 47:38.420] those kind of people. [47:38.780 --> 47:41.280] And our own ISP on it [47:41.280 --> 47:43.300] because I want to go [47:43.300 --> 47:45.020] in IR to the badge [47:45.020 --> 47:46.780] and then out [47:46.780 --> 47:48.500] to the acoustic coupler [47:48.770 --> 47:50.920] and dial through to our ISP [47:50.920 --> 47:52.900] to get online that way. [47:53.380 --> 47:55.220] But I don't think that's really [47:55.220 --> 47:56.960] the sort of thing you would do [47:56.960 --> 47:58.980] for an actual conference day of [47:58.980 --> 48:00.900] rollout thing unless it was just for a demo [48:00.900 --> 48:03.260] or something, but it would be a cool feature. [48:04.060 --> 48:05.100] Because reasons [48:05.100 --> 48:07.460] is perfectly valid for me. [48:07.460 --> 48:08.980] Wait, so it's possible? [48:08.980 --> 48:09.800] Yes. [48:11.320 --> 48:13.140] So actually we probably could still [48:13.140 --> 48:14.980] talk to you guys [48:14.980 --> 48:16.680] through the internets [48:16.680 --> 48:18.480] with the badge. [48:18.700 --> 48:21.360] But very, very slowly. [48:22.620 --> 48:23.340] So I'm not [48:23.340 --> 48:25.200] going to talk about our dream features because that's [48:25.200 --> 48:27.260] what I'm actually working on back in the hotel [48:27.260 --> 48:29.520] room. I know. [48:29.520 --> 48:30.960] I'm sure you won't. [48:31.000 --> 48:33.000] It's been obscured on the badge. [48:33.780 --> 48:35.240] Sorry, you'll have to wait. [48:36.860 --> 48:37.340] Any more [48:37.340 --> 48:39.160] questions from the audience? I kind of want that [48:39.160 --> 48:41.440] LED matrix up there to have a capacitive [48:41.440 --> 48:43.020] touch matrix under it. [48:44.760 --> 48:45.660] If budget [48:45.660 --> 48:47.580] were not an issue, I think I would have put [48:47.580 --> 48:49.540] corner... in time. I think I [48:49.540 --> 48:51.980] would have put corner LEDs in everybody's badge. [48:51.980 --> 48:53.120] And that was the initial [48:53.120 --> 48:55.460] intention, because the corner [48:55.460 --> 48:57.040] LEDs are pretty epic. [48:57.860 --> 48:59.440] I think I will provide [48:59.440 --> 49:01.480] the part number, though, for you guys. If you [49:01.480 --> 49:03.560] choose at your own risk to take [49:03.560 --> 49:05.020] your badge apart and to [49:05.020 --> 49:07.300] put the corner LEDs in. [49:07.580 --> 49:09.400] Because when you play [49:09.400 --> 49:11.240] the game, the corner LEDs [49:11.240 --> 49:13.650] act as a map for the game. [49:14.200 --> 49:14.740] So, [49:15.480 --> 49:16.820] I think that would have been [49:17.820 --> 49:18.360] my [49:19.000 --> 49:20.500] dream feature. [49:21.140 --> 49:22.800] I definitely want to do that. [49:24.020 --> 49:26.120] Any more questions from the audience? [49:27.300 --> 49:28.160] Bueller? [49:28.520 --> 49:29.460] Bueller? [49:29.980 --> 49:32.020] Nobody? Let me see here. [49:32.660 --> 49:34.080] Oh, there we go. [49:40.160 --> 49:41.920] I know you guys integrated [49:42.560 --> 49:43.960] a game or a story into [49:43.960 --> 49:45.880] your badge, and I was just [49:45.880 --> 49:47.920] wondering, how common is [49:47.920 --> 49:49.000] that, or is this [49:50.080 --> 49:51.860] a really unique approach? [49:55.160 --> 49:55.920] Yeah. [49:55.920 --> 49:57.980] These guys have games in theirs. [49:59.920 --> 50:01.840] Do you mean like the story [50:01.840 --> 50:03.780] or the game, or both? [50:04.520 --> 50:06.180] Okay. I think... [50:06.180 --> 50:07.000] Oh, sorry. [50:07.000 --> 50:10.060] Yeah, I've played with theirs a little bit, [50:10.060 --> 50:12.120] and they've got some pretty cool games in there. [50:12.120 --> 50:14.360] Is there anything that's really like story-driven [50:14.900 --> 50:16.120] on those? [50:16.280 --> 50:17.380] No. Nothing. [50:17.380 --> 50:19.520] Next year? We'll see. [50:19.520 --> 50:21.660] I'm trying to get him to tell us stuff. [50:23.720 --> 50:25.540] We did Flappy Bird and [50:26.000 --> 50:27.840] SkiFree Asteroids. [50:28.060 --> 50:29.840] That's only because I had some [50:29.840 --> 50:31.580] back problems, and so I couldn't move, [50:31.580 --> 50:32.840] so I just sat there coding. [50:33.720 --> 50:35.520] I know you got Snake on there. [50:35.640 --> 50:37.940] On last year's, there's Snake. [50:37.940 --> 50:40.080] And then on next year's, [50:40.080 --> 50:41.900] we've implemented a Chip8 emulator, [50:41.900 --> 50:43.020] and so there's 64 [50:43.760 --> 50:45.720] emulated games in there that we've [50:45.720 --> 50:46.980] put on. [50:47.520 --> 50:50.000] But nothing story-based. The only other badge [50:50.000 --> 50:51.940] I know that even attempted that, [50:51.940 --> 50:53.920] the Whiskey Pirates tried one last year, [50:53.920 --> 50:56.020] but they had some issues with their hardware. [50:57.220 --> 50:59.680] I will say that the SkyDogCon badge [50:59.680 --> 51:02.020] that I'm wearing was designed by Red, [51:02.020 --> 51:03.860] and it had an interactive [51:03.860 --> 51:05.700] game of tank that all of the participants [51:05.700 --> 51:08.040] in the con could play versus each other. [51:08.040 --> 51:10.040] They had that running off a server [51:10.040 --> 51:11.840] over the wireless without [51:12.780 --> 51:14.460] completely killing the wireless, [51:14.460 --> 51:15.760] which was pretty [51:15.760 --> 51:17.540] amazing in of itself, and [51:17.540 --> 51:19.440] that was pretty impressive. [51:20.220 --> 51:21.820] Yeah. And speaking of badge [51:21.820 --> 51:24.020] life, if I can tell a story, [51:24.920 --> 51:26.040] Charles and I arrived [51:26.040 --> 51:27.900] at SkyDogCon going, yay, a con! [51:27.900 --> 51:29.800] We won't be up all night soldering badges [51:29.800 --> 51:31.600] before, and we'll actually get sleep. [51:31.600 --> 51:33.340] And then we met Red, and he was [51:33.340 --> 51:34.820] still putting together the last [51:35.340 --> 51:37.180] finishing touches on these, and [51:37.180 --> 51:39.280] we were talking badge stuff [51:39.280 --> 51:40.960] and soldering, and [51:41.840 --> 51:43.260] one way or another the challenge [51:43.260 --> 51:45.060] was issued, and so Charles and I [51:45.060 --> 51:47.180] stayed up until I think one or two in the morning [51:47.180 --> 51:48.400] soldering our own badges [51:50.200 --> 51:51.520] because masochism. [51:54.080 --> 51:55.460] Is that time? [51:56.040 --> 51:57.080] Yeah, that's about [51:57.720 --> 51:59.520] it. So, thank you all very much [51:59.520 --> 52:01.240] for coming, and for the [52:01.240 --> 52:02.740] panelists for talking to us all, and [52:02.740 --> 52:05.360] thank you very much for inviting us out. [52:05.780 --> 52:06.180] applause