Gleason Park, Saturday October 22, 2016
1233 Yacht Club Blvd
Indian Harbour Beach, FL
Candlelighters of Brevard's Crystal Day.
With Abandoned Satellites.
Various things I'm saying and doing in various places
Looking for music, show schedule, videos? That's just a click away at paulroub.com.
454 N Harbor City Blvd
Part of the Show and Tell series: Featuring several pieces from local artists Shireen Makhlouf & Kasey Klein. They will be on hand to talk about their process and what inspiries them to create. If you fall in love with any/all of their pieces, they are available for purchase. Show & Tell starts at 5pm, the music begins at 7:30..
I don't roast or sell coffee.
But my friends sure do. Organic and fair-trade coffees, roasted in small batches and shipped fresh to you.
These guys run my favorite local music establishment (performance space, coffee bar, food -- and it's in a music store). They also roast their own coffees, and are now selling them online.
I've been lucky enough to "beta test" most of these, and their dedication to finding the perfect roast for each bean has been fun (and delicious) to watch. Check 'em out, won't you?
"I should probably blog about the thing."— Paul Roub (@paulroub) April 26, 2016
"How did I used to update my blog?"
*buried under cobwebs, spiders, ruby stack traces*
Good news, I remembered how to post things! I think! We’ll see!
So, a number of years ago (fine, a number of decades ago), I went to high school with two very nice guys named Glenn and Pete. We were in jazz band together, we played in a few short-lived cover bands together, and Glenn even played on some very early demos of mine that the world must never, ever hear.
Fast-forward a while. Pete played on It Almost Seems Like Christmas — honestly, he’s the reason it was finished and released at all. We were pretty proud of the result, and loved working together. Pete joined me at a few acoustic shows, and we wondered what would happen if we recorded in an actual studio. Of course, said Pete, “we gotta get [Glenn] Hess”.
And get Hess we did.
Under the watchful ears of Mark Brasel, we recorded a 6-song EP.
Why 6 songs? Short answer: I’m not terribly prolific. There are other songs-in-progress, but if we waited for me to finish another 3 or 4, we’d have to round up to the next decade.
We called ourselves Abandoned Satellites, and released “Room Enough for the Sun” last month.
Want to own it?
Want a preview? Yes, we are in fact on Spotify.
454 N Harbor City Blvd
Abandoned Satellites CD Release Party. I went and recorded 6 songs with a band, and you can have them in silvery disc form -- and hear them live..
With Abandoned Satellites.
You never left me when you should have
When you couldn't trust a word I'd say
Now I finally got it all together
Naturally it's now you walk away
I found some old shopping list you wrote me
For milk and bread and what's the use
Saw you addressed it "my darling"
No, I'm OK, I can stop shivering
Any time I choose
And it just takes one thought to send me reeling
One word to knock me on my back
One memory and I can't shake the feeling
I may never get myself back on track
It's been seven hundred years since you walked away
That's a month or a year or som...
You cut your hair, you moved out west
You're changing everything
And I wonder if you're trading me in, too
You're feeling stronger and you show it
By not picking up the phone
You don't come over
Don't invite me over there with you
You like to sleep at home, I hate to sleep alone
Just last week I walked on water
Just last week I hung the moon
Just this week you just don't know
You just don't know
You just don't know
The things that make a hunger
Make things such a mess
When one side's higher than the other
It tilts, it spills, it taints us
I though you were my lo...
I have landed
It's 2am and
I'm past the tollbooth
I'm on my way
You said to call when
I was in motion
I've had three coffees and a Coke
I'll be OK
Looks like it rained here
All dark and shiny
I've got new tires and
Old Husker Du
I sing along and
Drum on the dashboard
And make up new words for the ones
I never knew
I curse the clock, I count the signs
Name the trees and watch the lines
Please don't lie awake I'll be just fine
Wake up in the morning I'll be right there
Drive right by the exits
They never cross my mind
Now I'm nearly half way home
I'm not sure how to take you
Or if you're mine to take
Today I thought somebody called your name
And I can't say I adore you
So I won't say I adore you
But I'll go on adoring just the same.
And I tried
And I lied
I will bite my tongue until it bleeds
And never tell you why
Goodbye, go on
Don't start that conversation
With your hand over the phone
I'll only talk in daylight from now on
And I can't say I don't miss you
So I won't say I don't miss you
Almost hope you never hear this song
I am no backu...
You know they’re out there
You know they’re waiting
You’ve never seen them
But they echo through the room
They tell you secrets
They tell you stories
Of all the sad things
That might just come true soon
Once you were small and
Once you dreamed bigger
You could imagine
A mountain of your own
Some asshole told you
And you believed him
It’s scary out there
Better stay at home
Wind outside makes the
Trees wave hi, how are you?
Air inside is cold and still and deep
The moon’s a distant nightlight
Hung just for you
As you brace yo...
And I’m told up there
It gets cold up there
It gets old up there
by the spring
And the city lights
Are a touch too bright
And they stare at you
When you sing
But it’s not when we know
And never when we’re certain
Not where we stand, it's
Where we go and what we do when
We’re only human
Go be human
Bet it’s changed since then
Yeah they'll change it then
They pretend it’s
Just the same
Do you know what you
Are prepared to do
When the new ones
Don’t know your name?
Slam the door and
Jump the fence and
From time to time, we hear from potential customers that they’re planning to (or have already tried to) “just roll their own sync solution”.
Excellent. It’s challenging, exciting, and — for a certain type of nerd — fun. Lets think through some of the challenges you’ll face along the way. It’s difficult to backfill gaps in your sync strategy once you have live apps out in the world.
All sorts of things can go wrong during sync, of course: network dropouts, client crashes, server crashes… but let’s save those for another day. Today, we’re working in an ideal universe, with completely reliable communications.
Back at the office (or warehouse, or data center, or virtual cloud-based thing that you know exists somewhere), you have your data. You have applications that read, update, analyze, tend to, and generally use that data.
You want some of that data to escape the office, and live on the phones (or scanners, or tablets, or laptops) of your colleagues (customers, users) out in the field (on the road, in the aisles of Warehouse 57, up in the sky, at the wind farm or oil rig).
And you don’t want to require them to connect to your servers when they’re out in the wild.
You need to sync that data to those devices.
For our purposes, let’s define it like so: We want to maintain two copies of one or more tables: one copy on a server, one on a mobile device.
Let’s start with the simplest case, and say “yes”. One way. The server owns all of the data, the client gets a copy and changes nothing. No deletes, no inserts, no updates from the client.
A single ideal-world client, making one reliable, successful request at a time.
Excellent. This one’s easy! We just send the whole dataset down from the client to the server whenever anything’s changed. That warehouse-management database fits nicely on your average tablet.1
Easy! The row count is larger on the server.
Or smaller. Or the same, but some of the fields have changed. Or rows have been replaced.
OK, not exactly “easy”.
☐ TODO: Devise a way to know that changes have happened at all
Should we track server changes as they occur? Or examine the entire dataset on every sync request? One’s more intrusive, one’s slower.2
Examining the entire dataset could work. We could hash everything on both sides. That’s assuming the data are represented identically on both sides.3
Oh, wait: we can include the server’s idea of the hash when we send the data. The client stores it, and we compare that next time.
☐ Definitely need some housekeeping data on the server side. Where should that go?
Of course, we’re still sending the whole dataset. That seems… insane. Maybe don’t do that.
Changes, of course. Maybe row-by-row deltas. Maybe the full contents of changed rows. And a list of rows to delete. Oh, and “changed” rows also includes “new rows”.
And be sure to apply the updates in order.
…does not want to be replayed out-of-order.
☐ more housekeeping data
☐ we’re almost certainly tracking database activity now
Awkwardly. We know we have different data than the client, but that’s a binary answer. Which updates does the client need?
Thankfully we just have the one client, so we could add some per-row housekeeping, or per-change housekeeping, and mark each change as sent after it’s been synched.
That’s gonna get larger than we want, faster than we’d like.
What if we keep a list of unsent changes, and delete them as they’re sent?
That’s better, as long as we have just the one client. Multiple clients (dont worry, we’re not going there today) would require a client->updates linking table, with some sort of delete-as-we-go reference counting.
And (of course) all of our clients will check in at reasonable intervals, and none of them will ever be decommissioned, and we’ll eventually clean out that whole “unsent” table. It’s a perfect world, remember?
I’m starting to dislike this “server keeps track of clients” strategy.
That might work. The client knows when it last synched. The server knows when a change occurred. We could send recent updates based on that.
☐ include dates in the housekeeping data
This will work perfectly, since there will never be two syncs going on from different clients at the same time. No datestamp-overlap issues at all. Ideal worlds are so helpful.
Triggers, obviously. And let’s assume there are no other triggers to contend with, here in our perfect world.
Every time there’s any change, we drop all the rows-in-question into our (ideal) contention-free “unsent” table.
Simple: it’s hard-coded. Schemas don’t change in perfect worlds. Just ship it, pre-created.
We have a very workable concept, given a few minor assumptions:
We’re golden, and this barely cost us any person-days at all! Break for lunch!
No? Hmm. We’ll have to revisit that.↩
Oh, yes, speed. Remember that perfectly-reliable network? It still has a finite speed. You’re not really going to send the whole dataset down every time, right? More on that in a moment…↩
Because floating point numbers are perfectly consistent across all platforms.↩
75 N. Orlando Ave.
Cocoa Beach, FL
With J.W. Teller.
75 N. Orlando Ave.
Cocoa Beach, FL
With J.W. Teller.
We’ve received an email or two asking how to use Zumero sync from Swift code. If you’ve used other Objective-C frameworks in your Swift projects, the steps are just what you’d expect. If you haven’t, don’t worry - it’s not that bad.
Create a Swift-based project, as usual.
$ cat >> Podfile pod 'ZumeroSync' $ pod install Analyzing dependencies Downloading dependencies Installing ZumeroSync (126.96.36.19989) Installing sqlite3 (188.8.131.52) Generating Pods project Integrating client project [!] Please close any current Xcode sessions and use `swiftnzum.xcworkspace` for this project from now on.
We’ll now open the workspace as instructed, and it looks like we’re all set:
Except that Swift has no idea what we’re talking about:
Add a new Objective-C file. Call it what you like:
Yes, we do want to create a bridging header:
ZumeroSync import to that header:
1 2 3 4 5
We can delete the “dummy” Objective-C file (optional, but it serves no purpose here):
And voilà, Swift has heard of Zumero:
As for the actual usage, it’s just a Swift-y version of the Objective-C call:
1 2 3 4 5 6
“When Fort Lauderdale musician and piano teacher, Lisa ‘Noodles’ Hayden-Gordon, was reported missing, her family, friends, and the South Florida music community quickly responded by launching an extensive search. They posted tirelessly on social media, created findnoodles.com, and distributed flyers around downtown Fort Lauderdale asking for any new information on her whereabouts. She was last seen around 1 a.m. on Saturday, January 24, 2015.”
Crime Stoppers are offering up to $3,000 for information leading to the arrest of the person(s) responsible for the disappearance of Lisa "Noodles" Hayden.
Please download, print, and share this Crime Stoppers poster about Lisa and the reward.
Lisa Hayden-Gordon lived out loud — and now the silence of her disappearance is deafening.
The 51-year-old woman went missing after attending a Keller Williams show at Revolution Live in Fort Lauderdale on Jan. 24. After the concert, Hayden-Gordon went to the restroom at the nearby Poorhouse bar and vanished, police say.
Lisa's sister Tara shared this on Facebook today:
We want to send out our deepest gratitude to all Lisa's friends and our family for all the efforts and concerns to finding our beautiful sister..we want to give you an update so everyone can understand where we are to date and that we wont stop until we find her.
- We have three detectives from the ft lauderdale police working around the clock since she went missing two weeks ago.
- We have a Private investigator that is communicating closely with us and close friends in her town.
- We are working with the Guardians of the missing who are working diligently to help find her and to make the waterways search continue..they provide services to families of the missing in hopes of finding their loved ones...all volunteers! they are amazing!
- our beloved Teri Catlin Shandra Hurt and other close friends have been searching on foot at parks, forests, beaches, parking lot and places she frequents.
- the police have already sent a dive team into the canals near her disappearance and hopefully will do more dives
- the police have viewed video footage of one of the exit of the parking lot and still searching.
- we called 8 helicopter companies who agreed to be on the lookout and notify all their pilots to search for her car when on tours and lessons.
- her cell phone has not been used since 9:30 on the 24th, we have accessed her records.
- her credit cards have not been used since that evening and our amazing cousin Charlene McClaren Leon is keeping an eye daily on her financials.
- her sun pass has not been accessed.
- her Internet, social media and emails has not been accessed.
- her car has not been found.
- we had two volunteers with drones to search for her car.
- Teajay Smith has a new flyer you can print off from her link on her facebook and we encourage everyone to continue to pass out and post everywhere they can!!!
love and glitter, Tara, Suzy, Jennifer, and Jim Hayden
Friends and family of Lisa Hayden-Gordon, who was last seen Jan. 24, distribute fliers on Friday evening in Fort Lauderdale (Erika Pesantes/Sun Sentinel)
5:30 pm Friday January 30th across from the discovery center in downtown Fort Lauderdale.
We need to organize the search for our sister and her car. Today marks the 6th day she has been missing. Please share this message with all your friends. Post and repost and post again.
We need your help to get her picture out.
Lisa "Noodles on Jupiter" Hayden is still missing, as is her car - a 2003 Hyundai with stickers on the hood and bumper, Florida license plate 303 IEQ.
(source: Ed Ethridge, Facebook)
604 E New Haven Ave.
This is probably the last weekend of shows EVER at Vinyl Request, so please help us take things out with a bang..
Yes, I started with a meme1. But shorthand can be helpful — if you relate to the above, read on. Otherwise, this post is probably not for you.
I’d had this happen one-too-many times, and wished there was an app to let you show someone just a few photos. Turns out, as far as I could tell, there was not. So I wrote one.
Apart from the “hey, look at this bird I saw this morning… no, wait, those weren’t selfies, I was just… um…” problem, I often want to show someone just my favorite few photos from recent days. Here, Look solves that nicely. Just tap this one, and that one, and these two, then hand the phone over to your friend.
I personally use the app several times a week, and am happy (and relieved) to have it around. It does one thing, does it well, and stays out of your way. No ads, no popups, no notifications, no nothin’.
Have a look, and if you do like it, please leave a review behind in the App Store (the app itself will never ask you to leave a review, because, ugh).
“Hi. We wrote something and then deliberately pooped on it. You can kind of see what it was before the poop got put on it. Sure, if you take a survey, we’ll wipe the poop off and show it to you. If you don’t feel like taking a survey, just dismiss the popup window, read the two poopless sentences, then treat yourself to half a dozen ads. You’re welcome.”
75 N. Orlando Ave.
Cocoa Beach, FL
Cocoa Beach, FL
I hadn’t written a Christmas song before, and hadn’t particularly planned to. Other people seem to do it very nicely, I’ll just play those if need be.1
Then I was invited to play in a Writers’ Night, in-the-round with other local songwriters (and also a benefit), a few weeks back. The advertising was Christmas-themed, I knew others would be bringing Christmas songs, and I was gently asked if, you know, maybe I might have one?
I didn’t, and decided to be OK with that. But a week before the show, the germ of an idea showed up. It bounced around as these things do, and the night before the show, I sat down and made myself write some verses. Normally I’ll be all “I have to wait for the muuuuuuse”, but what did it hurt? If they were terrible, I already didn’t have a song. No harm done.
They weren’t terrible. I liked them a lot. It was funny, but also wistful. My song, my rules. And I love me a power-pop melody and a big singalong chorus.
The day of the show, in lieu of lunch, I wrote the middle. I made myself a little demo, something to listen to in the background the rest of the day, so that I might remember it. I posted that demo to Facebook for a really small group of friends - mostly other writers - to hear; basically, I was surprisingly proud of the song. Here’s that demo:
The show went really well (although I think I seriously flubbed the middle — we’ll see when the DVD is available2).
The next day or so, my friend Pete sends me back my demo, but he’s added drums. Tricky, considering the demo’s rather flexible approach to timing.
But it sounded really cool. I sent Pete a new demo, this one with a click track, and a sample sequenced drum part which I hoped he’d ignore. A couple of passes later, and there were drums. Good ones, alongside my little guitar/vocal guide track.
I spent much of this weekend adding bass, guitars, and real vocals. I mixed, and mixed, and re-mixed, and basically learned a lot more than I’d known before about home recording.
For example, I learned that my closet makes a nice, dry vocal/acoustic booth.
Monday night, up the song went to my music page, where you can buy it right now. It’s $1.00, but you can spend more. All profits (that is, every penny I actually see, after PayPal and Bandcamp fees) will go to charity.
I knew, when I decided to work in earnest on this track, that I wanted it to be for a cause. The choice for Pete and I was obvious: The Haven For Children. It’s a local charity, run by people I admire - and both my mom and Pete’s late mother have given countless hours volunteering and fundraising for them.
In their words:
We are licensed by the Department of Children and Families (DCF) of the State of Florida to provide therapeutic shelter care in a homelike environment for children from birth to age ten at admittance who have been removed from their homes because of neglect, abuse or abandonment. The Community Based Care of Brevard County and other community based care groups in Central Florida refer children to The Haven.
The Haven for Children, Inc. program’s goal is to nourish and protect the children in its care and guide them toward positive self-growth. Currently, we have three homes that serve an average of ten children each. Three shifts of trained staff provide 24/7 care 365 days per year. We also receive the services of a nurse practitioner from the Brevard Health Alliance who provides on site medical care to our children.
I’ve seen first-hand the dedication of these people, and the incredible change they make in the lives of children who desperately need that change. They’re superheroes, as far as I’m concerned. If we could help in some small way… no, it didn’t take a lot of thought.
If you like the song (I do!), please download it for a buck or two. If you don’t (I’ll be okay!), you can donate directly to the Haven at this page; or you can send a check to:
The Haven for Children, Inc.
P. O. Box 327
Melbourne, FL 32902-0327
Merry Christmas. Happy Holidays. Have a joyous January 17th, if that’s when you read this. The Haven will still appreciate your help.
All profits from sales of "It Almost Seems Like Christmas" will be donated to The Haven For Children.
This charity is near and dear to Pete's and my heart; it's an organization run by amazing people, dependent on donations to continue their work, providing a safe, nurturing home for kids who truly need it.
Recently, I described how to use SQLCipher with Zumero to encrypt your locally-synched DBfiles. That was all fine, except:
How do we combine all the pieces? Head to your XCode iOS project’s folder, and make sure you have a
Podfile. In that Podfile, mention Zumero and FMDB, using the SQLCipher variants of both pods:
platform :ios, '7.0' pod 'ZumeroSync/SQLCipher' pod 'FMDB/SQLCipher'
No need to specify SQLCipher itself — it’s already noted as a dependency in both the Zumero and FMDB pods.
pod install (or
pod update if other pods are already in place):
$ pod install Analyzing dependencies Downloading dependencies Installing FMDB (2.1) Installing SQLCipher (2.1.1) Installing ZumeroSync (184.108.40.2066) Generating Pods project Integrating client project [!] From now on use `EncryptedDBApp.xcworkspace`.
Do as the nice program says, and open the workspace it’s created for you.
Include paths are all taken care of:
As for actually using the three?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Easy to blog, easy to follow.
3865 N. Wickham Rd
Some of our best local songwriters performing in-the-round; all proceeds benefit the Space Coast Cancer Foundation. Tickets are $17 at the box office or online, or contact me for $15 advance tickets..
With Brant Christopher, Ashley Breaux, Dave Miller, Debbie Barnes, Megan & Kelly Hazlett, Dave Petit and Sheryl Paige.
This is one of those things that us nerdy types already know about; but three times recently, I’ve explained it to normal human beings (you know, the ones whose actual lives get in the way of exploring every menu on their phones). They either didn’t know that “Do Not Disturb” existed, or weren’t sure it would work for them.
Spoiler: it will probably work very nicely.
Enter “Do Not Disturb”, which is a not-that-new iOS feature that most likely does just what you want.
No noises, no midnight home screen lights — but your alarm will still work.
On iOS 7, it’s right there in the Settings menu:
On iOS 6, it’s hiding under the Notifications menu.1
On iOS 5, it’s worth mentioning that your carrier probably offers an iPhone 4 as a free upgrade.
“Manual” is for when you’re heading into a meeting, etc. and don’t want your phone vibrating, ringing, lighting up, etc. unless it’s actually urgent. Turn it off when you’re done.
“Scheduled” is the thing you’ll set once and never think of again. Click that to turn it on.
Here I have my phone set to shut up between midnight and 6am.
Want to change that? Click the times and do so.
I recommend leaving “Repeated Calls” on - if anyone calls you repeatedly, assume it’s urgent and let it through.
Also handy: silence “Only when iPhone is locked”. If you’re actually up and using your phone, go ahead and ring.
No matter the time of day, or the urgency of the meeting, some calls you always want to take (or at least hear about).
Maybe it’s your kids. Maybe it’s your parents.
Maybe it’s Batman.
Tell “Do Not Disturb” to always allow calls from your “Favorites” list (or another list, just for this purpose)
Then open up those contacts and add them to that list:
Choose a phone number:
“Voice Call” is the right answer in this case:
There you go. When Bats wants to call and complain about how hard it is to keep Robins around these days, you’ll be there for him.
Alarms still go through. That’s not someone else disturbing you - that’s you disturbing you, as is your right.
Sorry, no iOS 6 screenshots, but they’d be largely the same.
If you’re using a 4S or later, upgrade to 7. Seriously. When someone complains about how Apple “broke” iOS and everything’s different, I recommend hearing that as a toddler angry about having to eat Mac and Cheese out of the wrong bowl. A much better bowl, in fact.
But, you know, toddlers, what can you do?↩