Posts Tagged ‘rant’

h1

Apology for getting us into ESC

July 27, 2015

I wanted to write you a letter to apologize that the Embedded Systems Conference (Silicon Valley) was a disappointing experience. I feel responsible as I mentioned it several times because I thought it would be interesting and educational, possibly even fun.  I invited many to speak, attend, or even to show up for the free expo at event.

I expected these good things for you and me; I felt that we didn’t get them. I’m disappointed by the actuality for myself and guilty about the people I roped into going. I was a featured speaker and I’m sorry I was affiliated with them.

I’ve been going for years, even speaking for years: I thought I knew what I was getting us into. I knew it would be a little smaller but I didn’t expect such drastic changes to the format and organization. (And it was a lot smaller, not only a little smaller, than previous years.)

I know those of you who only went to the expo didn’t have to pay anything to attend but I’m well aware of the value of time. The expo hall was a waste of time to me. It wasn’t even really an expo with exhibitors but a demo hall with sponsors. It was tiny, lacking the expected big names (TI, Atmel, Microchip were all missing as were a hundred others who had been stalwarts of ESCs past). I can’t blame them, there were no booths, instead they had tiny one sided kiosks the size of bathroom stalls with narrow aisles in between.

There were no vendor classes, no space to chat without being jostled. The room was very loud and somewhat dim. It was a terrible place to have a conversation. I could get far more info from vendor websites than the displays that were smaller than science fair posters. Since I attend the expo for the conversations, the area was pointless for me. The few demos I saw were unintelligible. Walking around was difficult as a crowd of four tended to block traffic through the small aisles.

I tweeted, wrote, and said that one of my sessions would be on the expo floor as it was listed as being in the Fantastical Theater. However, it was over in the paid area (still free to attend but difficult to find, you had to go through the bar to get there). It turned out ok, I think you found us and I was glad to have been in that room. I went to a session on the expo floor (also inexplicably billed as being in the Fantastical Theater). Though the material was fine, the session occurred during the happy hour on the expo floor. The speaker was often unintelligible as people nearby networked, chatted, and clinked bottles. The speaker had more aplomb than I would have, even to continue his session.

If you paid to attend because I suggested it, I’m frustrated you didn’t get the experience I wanted and expected for you, the one you should have. I cannot imagine how they justified turning paying attendees away from sessions because their rooms were too small. There were only a few rooms for speakers so seating was a first-come, first-served, stand-at-the-back and sit-on-the-floor sort. While my speaker pass was all-access, supposedly one of my perks for speaking, I missed sessions rather than take someone else’s spot and still I feel awful that you missed out because of poor planning.

I had nothing to do with that and nothing to do with the strange layout that made it so you had to walk through the bar and restaurant four or five times a day. It was nice they had comfy seats there but inexplicable that talks, expo, restrooms, and lunch always seemed to require a hike through the bar.

Finally, if I had any part in you signing up to be a speaker, I am the most deeply sorry for that. The speaker room was tiny, poorly appointed. To get lunch, we had to hike (through the bar) to get an attendee lunch in the expo hall. There was a nice-ish buffet lunch outside the speaker room but it was for UBM management only. I resented that they provided so well for themselves so well when I felt speakers were so shoddily treated.

At every other ESC I’ve spoken at, speakers have received a good lunch and plenty of snacks in a large speaker room. With at least half a dozen tables, it was a fun place to hang out. This year, with such a small room (one table plus a ledge with chairs), it was not a place to hang out and chat (the centrally located bar was better for that).

Also, and I think this was new, the speaker room and the media room were the same room. As a speaker and as a media representative, I do not appreciate this. As a speaker, I want down time and to meet with other speakers. In my occasional role as media, I want quiet space to interview.  (Note: I did not do any media at this event as I felt promoting it in any further way was a waste.)

One reason to speak at the conference was to get exposure. However, speaker names not in the printed program (though there was space). Even on other posters, it was talk name and company only, not the speaker (there was an exception for Max the Magnificent from Embedded.com). I found that annoying: another instance of the conference organizers being unappreciative of the time, energy, and expense that the speakers put into their presentations (and many of us were not there in company-sponsored session so all of this came from our own pocket).

Another reason to speak (see image), is the Speaker Party (‘Invitation to our “Speakers Only” Party, where you’ll get to hobnob and network with some of industry’s top luminaries and your peers’). That was not actually part of the organizers’ plan at all.

Instead, after I asked the organizers twice in the weeks leading up to the event (getting contradictory answers), I complained on the morning of the last day. At 3pm, the organizers sent out a party invite for 3:30pm, while there were still talks going on and after many speakers had left. I opted not to attend this, having reached the end of my patience with the organizers and the conference.

I feel most embarrassed because I feel like I should have known before the conference. There was a lot of disorganization in the emails leading up to the event.  However, I did not know. This doesn’t excuse my promotion and involvement with such a pathetic, disorganized conference. I will try to do better in the future.

ESCSpeakerPage

h1

Women-in-tech activities

July 17, 2015

I go to the occasional women-in-tech things. I’ve been to Grace Hopper, once as attendee, once as a speaker/manager bringing her team. I read Systers for years but don’t currently, it is just too much sometimes.

Actually, that sums up my feelings about women-in-tech events pretty well: it is just too much sometimes.  And yet.

I like to attend women-in-tech things because it is nice to see women happy as engineers. Too many times, I hear the horror stories. But there are many people, many women, untouched (or only slightly touched) by the trolls, stalkers, and jerks of the internet. I like to be reminded that it isn’t always awful.

And I go because I get a little lonely in my job sometimes. I like to connect with people who might be in the same boat, maybe offer some advice to those more junior in their career, maybe receive some advice from those more senior.

I also go to find podcast guests. I’m not shy in trying to get a gender balanced podcast despite the lack of gender balance in embedded systems. That means I have to search a little more, work a little harder to get women guests. So I go to women-in-tech meetups hoping to find people.

Though, I’m fairly terrible (stressed) in crowds and I find that seems to be getting worse as I get older. I can pretend to be an extrovert for about 4.5 minutes (8 with alcohol). Then I get jittery and want to throw up. Reeeeallllly Jekyll and Hyde-y.

I went to an event this week. It was ok. There was no alcohol. And the demos (from the hosting company) were done by men (though they were nice, it just seemed like a missed opportunity to highlight some women’s achievements). At least the talks were done by interesting, engaging women… though they were a little long. As someone there for the networking (4.5 minutes of it anyway), I don’t want detailed technical presentations.

It got me thinking about what I’d want to do if I was putting on a women-in-tech event. So let me write these ideas down, maybe it will plant a seed for later.

1. There shall be alcohol. All networking events should have beer and wine.

2. Food will be primarily vegan. Because, crap, I’m tired of not being sure what is safe for my socially-nervous and vegetarian stomach to eat. Maybe steak strips or meatballs too, but everything else will be vegan. Sometimes at these things all I want is a little peanut butter and jelly sandwich. And there will be dessert but it will served later (halfway through), not set out with the food. Dessert doesn’t have to be all vegan.

3. There will be seating but not quite enough of it.

4. For a 3 hour event, there will be four to six 5-minute talks, three at T+30min hour, three at T+65min. The goal of the talks is to create discussion and getting people to talk to each other, not to give speakers platforms. The talks act as ice breakers, the speakers will know that.

5. Badges will have first names only. There will be small stickers for different interests. If it is hosted by a company, they will have small stickers so it is easy to pick out people who work there.

6. There will be different themes in different parts of the room. They will be clearly marked: “I’d love to meet you” (seating and food), “We’d love for you to join our conversation” (seating), “We’re happy in our conversation, give us a minute” (tables but no seating). People won’t have to declare themselves, just stand in the right place. Ok, this one is sort of dumb. Maybe scratch it out and put in a networking/mixer game thingy.

7. It will be a women in tech focused event but open to anyone who wants to support getting more women interested and retained in engineering, math, technology, and science. You do not have to identify as female to come.

8. There will be a few people who are asked specifically to act as hosts, who spend the evening meeting people then introducing them to each other.

9. We will make some horrible mistake against feminism (giving out lipstick, having men do demos, handing out hot pink rape whistles) so that everyone can be aghast at something.

Oh no! We’ve reach the cynicism level. Don’t go deeper, it gets very dark in there.

I’ve been to great meetups, both gendered and not specific. One GirlGeekDinner was fantastic, another one I was lost at. The OSHPark Bring a Hack Maker Fair after party is pretty amazing: Laen gets people there and mingling with each other. Some of that is because they are fascinating people and because we’re told to bring something which creates an icebreaker. But there is something else too.

I don’t know what that something else is. I suppose if I did, I’d bottle it and make millions.

Anyway, there are many women-in-tech things and something always goes oddly but I’m not ready to give up on them yet. Though I’m not ready to throw my own either.

 

h1

In case you hadn’t noticed…

February 3, 2015

An older engineer said to me that she’d recently come out as a woman. She’s avoided all women-in-tech things, all women-only evens, even diversity boards at major companies in an effort to avoid rocking the boat. I get that though I’ve always been pretty upfront with my femininity.

That is why I will not meet you in a hotel bar to discuss your start up. That is always true but even more so if you’ve already been the sort of person who refuses to take hints, who doesn’t seem to notice when I consistently don’t respond to emails and messages. It may not be that I’m busy; it may be that you are creeping me out with too much contact from too many channels.

I understand that you may not get this. It is definitely a girl thing. On the other hand, I do know many guys who get it. There was that business trip where my electrical engineer put a chair in the hotel room door before it could close, even before I could. There was that other business trip when the guy invited me to watch TV with him in his room and then immediately explained three others would be there.

I’m a grown up, even sometimes a professional. I’m happy to meet you at a Starbucks. I’m ok having lunch if I’m not busy (and I want to). I’m a bit leery about meeting you in a hotel lobby but can see the necessities given conferences and business trips. But I won’t meet you in a bar. I won’t have a candlelight dinner with you. And I won’t be alone with you in your hotel room with the door closed.

How would that look to my husband? How would it look to your wife? These sorts of appearances matter. I won’t give my husband reason to doubt me, I wouldn’t hurt my husband for anything, especially to listen to you pitch your start up.

Ok, forget appearances. I won’t meet you in a non-public, not-well-let place because it isn’t safe for me. I won’t get in a he-said/she-said argument because there will always be witnesses. This is for both of our sakes: do you know how much such an argument can hurt your reputation?

And now, I’d like to apologize to the podcast listener that I met for coffee but refused to go back to his car to get the gift he sweetly brought me. I was ok in the busy cafe but I didn’t know him well enough to leave with him. I think he understood but was a little hurt.

So, no, I don’t want to get in your car either. Not until I know you a lot better than this.

h1

Fuel gauge for batteries

April 16, 2014

Lithium polymer (LiPo) batteries are strange beasts. I can’t simply measure the current voltage and tell you how full it is. (You can on throw-away AAs.) Worse, a nearly-full battery and a nearly-empty read about the same voltage until it become really empty and the battery dies.

Determining the LiPo battery’s state of charge requires an algorithm that monitors the battery over time and over a few charge cycles. The simplest way for me to do it for the are-you-ok widget is to buy the monitoring in the form of a small board: the LiPo Fuel Gauge.

However, while not adverse to reading datasheet, I just wanted to plug this board into my system and have it work. I did read the example code: it reads the percent from a register and sets up an alarm-interrupt I don’t care about.

I should have been more suspicious when my full battery read a state of charge (SOC) that was in the 30,000s but really, I didn’t care the actual number as long as I could see the power go down over several days. Except, with deep sleep working, the power is taking much longer than several days to go down. Last time I read the battery, it said 18664. Reading the voltage with a DVM showed it to be very high.

Then I broke that battery’s wire so I need to switch to another module (a very small one this time so I can check the fuel gauge better). Also, this time I’m going to read the datasheet, to get it set up properly.

I figured I might as well take notes here. Maybe note a few things about how to write instructions since that’s also on my mind. The intro starts off pretty good and a line caught my eye in the third paragraph.

A quick-start mode provides a good initial estimate of the battery’s SOC.

Good, that’s what I need. And I already know I can connect to it, at least to read registers. I can probably write registers but I don’t have that code for this chip.  (That’s like 3 minutes of coding and 4 minutes of testing so this isn’t a major deal.)

Next in the datasheet is a bunch self-congratulatory blahblahs that don’t help me solve my problem. Why do they do that? I already bought the thing, quit selling it to me and tell me the good stuff. I get through the “for the electric engineer” tables (those can be important to me but on first skimming, I tend to let the data slide over my brain), then  messy graphs followed by more coy hinting at their algorithm and finally to a section called IC Power-Up.

When the battery is first inserted into the system, there is no previous knowledge about the battery’s SOC.

Since the LiPo’s state of charge depends on it’s history, the first power up is tricky. It goes on to say about how the fancy-schmancy algorithm will converge with time. This was what I was depending on before (and about where I stopped reading the datasheet before). Eventually, the fuel gauge figures itself out, after a few charge and discharge cycles. Of course, if you are talking about months, then that isn’t so useful.

I want a way to charge the battery fully (because the charger says it is done and it have been charging for several hours) and then tell the fuel gauge it is full. Ideally, that will be covered in the Quick-Start section that is next.

A quick-start is initiated by a rising edge on the QSTRT pin, or through software by writing 4000h to the MODE register

Yay? Ok, so now I know how to go into quick start mode but what does that do? It doesn’t tell me. This is why I hate reading datasheets sometimes. It is like talking to a recalcitrant four-year old.

Moving on, maybe things will become clear if I keep reading. The next section is ALERT Interrupt. I don’t want that (not enough pins on the Electric Imp, maybe I could use pulldowns to double up the wakeup pin but that seems too much like work; I don’t mind polling the fuel gauge every hour since the unit needs to wake up and check-in to the server anyway).

The next section is on Sleep Mode. That should be interesting but since I can’t kill batteries, I haven’t done the last few power optimizations: put this and the accelerometer into sleep mode when they aren’t needed.

Let’s see, I can reset the fuel gauge, as though I power cycled it. Whee. (That was an unenthusiastic whee in case you couldn’t tell from the tone.)

Now for the Registers section. As a software person, this is the section I usually skip to. If this datasheet was a walnut, this would be the delicious meaty core.

Usually.

The SOC Register really should be giving me a percent full.

Units of % can be directly determined by observing only the high byte of the SOC register. The low byte provides additional resolution in units 1/256 %.

Ok! So my last reading was 18664, in hex that is 48 EB. Looking at only the high byte hex 48 equals decimal 72. My battery is 72% full. Look at that, it makes sense now.

On April 8th, my reading was 24839, in hex that is 61 07. So hex 61 is 97%.

Essentially I’ve been reading it wrong. To be fair to my previous self, I did look at the figure that showed how to read it which says something different than the text. (Different and implausible but I know why I decided I could just read the 16-bits and concatenate them together.)

This is an easy fix to my software. Where the code used to have

local tmp = (data[0] << 8) + data[1];

I modified it to

local tmp = data[0];

As I only care about the top byte.

Well, while I knew I needed to fix the output issue, the information was decreasing reasonably as I discharged the battery, I know there was just a units or conversion issue. That isn’t why I’m reading the datasheet. I need to know how to tell it that my battery is full. But I should only do it in a manufacturing mode or something, definitely not on every boot or even on every power cycle.

Happily, the next table is about the MODE register which mentions the Quick-Start command. That references the “Quick-Start description section”, what I read before that mentions there is a Quick-Start mode but not how to use it. Searching through the document for Quick-Start leads to nothing.

The MODE register section says the only valid setting is the quick-start setting. I feel like I’m reading an Escher print turned into words.

Ahhh, the version register is next to be described. What could possibly go wrong? Well, for one, it doesn’t tell me what to expect. I read the register and get a value. Is it a good value? Many (most!) vendors suggest what to expect, reading the version register (or whoami) is a great way to verify that I’m communicating properly with the chip. Alas, not for this IC monstrosity. (Ahh, it isn’t that bad, I’ve read far worse datasheets but this one is remarkably easy to pick on.)

I mean, in the next section, it goes over the CONFIG register (which incidentally is where the sleep mode is set). There is a bit in CONFIG called X (Don’t Care).

This bit reads as either a logic 0 or logic 1. This bit cannot be written.

I suppose it is my scotch-and-ice-cream dinner or the last nine pages of nonsense, but this statement strikes be as funny. “This bit cannot be written”, wanna see me try? Because I can write it. The IC may ignore it but I can so write it if I want to.

Next there are some applications of this chip, how to use it for multiple LiPo cells. That’s all very interesting but actually not.

Then there are several pages describing the communication method (two-wire so they don’t have to license from whoever holds I2C’s patent, how can you patent such things?). I don’t care about this as I have that part working.

And then the end. It includes an address only about five miles away. I want to go and ask them to explain to me if there is a way to tell their chip that the battery should be pretty full since I just finished charging it during my hokey manufacturing process.

Instead, with the data format fix, I’ll just plug in another battery and see if it is recognized as full and discharges normally. It is supposed to converge, might as well let it.

And the next time I see a MAXIM part, I will (once again) read the internet-supplied example code and not bother with the datasheet until I absolutely have to. Though, I’d still rather buy MAXIM than Infineon parts.

But that’s a separate rant, for another day.

 

h1

I need to sleep but can’t

April 8, 2014

In my ayok widget, I have a battery. To make it last, I want the high power things to sleep as much as possible.

The Electric Imp is the largest power consumer, followed by the accelerometer, and then the battery-monitoring fuel gauge.

Happily, the Imp has a low power mode. When I say imp.sleep(5.0) to sleep for five seconds, in low power mode. Though it isn’t a very low power mode, for one thing, the WiFi remains powered up.

They offer another mode, a deeper sleep more: imp.deepsleepfor(). In deep sleep, it consumes only 6uA (which is a tiny amount if you are a cell phone and a medium-to-large amount if you are a wearable device).

Foolish me, I thought I could replace my imp.sleep calls with imp.deepsleepfor calls, do a little bit of tweaking (i.e. tell the server I’m going to sleep), and it would work.

Suddenly my system kept crashing.

I feel like that represents my often-rocky interactions with Electric Imp. I still think it is a good platform for hobbyists but it is often deeply frustrating. When I first started working with (playing with?) the Imp, I wrote an in-depth review/rant detailing its shortcomings. I opted not to post it here, instead sending it to the Imp folks in hopes my time and frustration could help them make a better product. Some of those things have gotten better in the intervening six months but many things got worse. Let’s just say I wouldn’t dream of using it in a product and if things continue to be bad, well, there are other options for home hobbyists.

Anyway, back to my crashing system.

It turns out that sleep() returns to where it was but deepsleepfor() restarts execution. This is clear in their examples (but not documented in the text). There is a work-around: if the non-volatile RAM is configured, then the system has been booted before. If it has not, then this is a cold-start so I should configure the accelerometer. (I very sincerely hope that “reprogram the code” is considered a cold-start and erases the nv space.)

As a developer, I understand why this happens this way, my annoyance is primarily because I feel like they hid it from me. No, they probably didn’t. But yes, their documentation should be better.

I did fix the crashing (and not through their nv hack, instead they have a function that can tell me what the reason for the wake up is: hardware.wakereason(). Yes, I did implement the nv hack before finding that.

Now, my Imp isn’t crashing any more. I made some tweaks, trying to get rid of the slightly alarming note in the logs:

[Status] Device disconnected; 585 bytes sent, 0 received, 585 total

CaptureStatus

I couldn’t find anything about that in their documentation. But it is worrisome so I tried to remove it. My efforts led to my card not updating and the system not running at all. The error I got was unsatisfying.

CaptureHippos

I fiddled with it for a few minutes, updated this post. My device finally came back. But I think I’ve reached maximum annoyance level for the day. (If I’m going to be this frustrated, I want to get paid for it.)