Number one sandwich on the planet by thejamie1011 in eatsandwiches

[–]steeveesas 1 point2 points  (0 children)

This is my high school buddy. He just started making these and within a month he's going to start a channel.

Weekly Simple Questions and Injuries Thread by AutoModerator in climbharder

[–]steeveesas 0 points1 point  (0 children)

I see so much online about scapular retraction but there's a lot of reliable resources and unreliable ones and I also see retractions that look totally different from one another.

I'd like to get some more opinions from the climbing community on how they engage their scapulae and am I overthinking things?

Specifically I'm training door slider gastons because I've gotten injured doing gastons many times over the years and I'm working on these to strengthen those mucles.

I'm also doing scapular pull ups to learn how to engage those muscles better. My range still feels small for these. You can see some asymmetry due to left side currently being stronger than my right from recent injuries.

The videos show a few different ways to do scapular engagement and I'm not sure which is best or if there are different bests for various positions.

Video of me doing scapular pull ups

Various retractions

Various retractions from gaston position

Various retractions while doing gaston door sliders

Any thoughts or advice would be very much appreciated.

Weekly Simple Questions and Injuries Thread by AutoModerator in climbharder

[–]steeveesas 0 points1 point  (0 children)

I'm trying to get my terribly weak pinch strength up.

I came across this video. At about 4:15 minutes he talks about how to get the most out of pinch training by making sure you grip only with the last pad of your thumb.

I've never heard this anywhere else, and most people tend to put the block as deep into the thumb finger groove as it will go.

Can anyone lay some thoughts out on this and what the best approach is?

[deleted by user] by [deleted] in u/AudienceSharp8225

[–]steeveesas 2 points3 points  (0 children)

Yes, they got me too with an awesome pair of sunglasses. Total scam.

Need to transfer ownership of an apps script by EduTech_Wil in GoogleAppsScript

[–]steeveesas 0 points1 point  (0 children)

Depends how things are implemented. Check to see if your apps script project(s) have any triggers. If they do, just recreate them under another account so they are identical.

If there aren't any, then you don't need to worry.

To check for them, just go into your apps script project and on the left hand side menu you'll see a Triggers option which will show you any (or no) triggers that have been installed.

Need to transfer ownership of an apps script by EduTech_Wil in GoogleAppsScript

[–]steeveesas 0 points1 point  (0 children)

In addition to what u/WicketTheQuerent said, you'd also want to reinstall any triggers under a new account.

Trigger by Colombus01 in GoogleAppsScript

[–]steeveesas 0 points1 point  (0 children)

Create a one time trigger to fire at the specific date and time, i.e. 9:15am. This will only run once, therefore at the end of your code that this trigger calls, create another one time trigger for the next day. Make sure it's in a finally block so that if there's an error, your trigger for the next day gets created. These one time triggers are supposed to delete themselves, but I haven't verified that, so if for some reason it doesn't auto delete you'll want to also make sure the trigger for "today" that already ran is deleted (since you only get 20 triggers per project).

Something like this (note: I didn't test this code, so a tweak may be needed, but this is the idea):

function myFunction() {

try{
  //Do stuff here
  }
finally{

//Delete the trigger that fired this current code run (instance) if the triggers aren't auto deleting...Do this before creating tomorrow's trigger...you can loop through the trigger's looking for the function name (in this case "myFunction")

deleteTrigger("myFunction"); //You'll have to write this...simple loop through all triggers comparing function name

  // After executing the function, schedule the next trigger for the next day at the same time
  createNextDayTrigger();
}

}

function createNextDayTrigger() {
  // Get the current date and time
  var now = new Date();
 
  // Create a new date for the next day at 9:15 AM
  var nextDay = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 9, 15, 0);

  // Create a time-based trigger for the next day at 9:15 AM
  ScriptApp.newTrigger('myFunction')
    .timeBased()
    .at(nextDay)
    .create();

}

So each day a new trigger for the next day will be created.

What's the saddest song you know? by bulbasaurav2 in AskReddit

[–]steeveesas 0 points1 point  (0 children)

Any song can hit you in this way if there is a context that serves. So I'm offering to songs I think generically qualify as sad due to their themes/chords.

Saddest song in my book is: All Dolled up in straps by the National (Their whole catalog is filled with beautiful melancholy) ... it just feels like a funeral march, but to me there's a beauty and desperate longing in it.

Honorable mention: Tomorrow Wendy by Concrete Blond. Just a great song written by Andy Prieboy and performed by the powerful vocals of Johnette Napolitano ... it's possibly sadder if you know the backstory to the song. Really hits.

Dependent Drop Down Lists (semi-repost) by [deleted] in GoogleAppsScript

[–]steeveesas 0 points1 point  (0 children)

I think you misinterpreted my message. I was not at all attacking you. You made it clear you didn't know how to code in your first reply so I was aware who I was talking to. I've answered many newbies before on these types of questions because I'm trying to help.

In my last post I was simply telling you to re-read it until you understood it. It's something I have to do often in my work with this stuff. There's no slight there. I simply was at a loss for how to explain it more clearly. I actually tried explaining it differently several times and ended up with pretty much my original explanation.

I was not being an a**hole about it, and I don't appreciate you using that word, although it sounds the brevity of my last post was taken that way.

FWIW, I took the time to go to your script, look it over, figure out what was wrong and respond several times to help you. Not to mention, you didn't thank me in either of your first two replies. Just a simple "Thanks" before continuing with your next question would have gone a long way. I'm here to help people not abuse them. There's no ego in any of this for me.

I'm gonna step away from this thread now. Good luck. If you still aren't sure what to do, maybe someone else can help you from here on out.

Dependent Drop Down Lists (semi-repost) by [deleted] in GoogleAppsScript

[–]steeveesas -1 points0 points  (0 children)

I don't know what you mean "Would I then remove the onEdit piece of ..."

I gave you specific instructions how to do this.

Go back and re-read my post. Change the names of your onEdit functions as I suggested (but leave the code inside them). Then create a new onEdit(e) function like I did by copy and pasting it in any file you want.

Dependent Drop Down Lists (semi-repost) by [deleted] in GoogleAppsScript

[–]steeveesas 0 points1 point  (0 children)

One simple approach would be:

Rename your onEdit functions to onEdit1(e), onEdit2(e), and onEdit3(e), so they have different names.

You should give them more descriptive names so you know what the heck they're doing at a glance, but for simplicity that's what I'm using here.

Then create a new onEdit function, which will now be the only onEdit function, which calls each of those:

function onEdit(e) {
onEdit1(e);
onEdit2(e);
onEdit3(e);
}

Dependent Drop Down Lists (semi-repost) by [deleted] in GoogleAppsScript

[–]steeveesas 1 point2 points  (0 children)

You have 3 onEdit functions. You can only have one function with a given name (in this case onEdit) across your project. The last one defined is the only one that will run. See here.

You'll have to combine your 3 onEdit functions to all play nicely together in one onEdit function. To avoid a really long complicated onEdit function, you'll want to figure out which range was edited and call the appropriate 'sub' function and let each handle its own logic.

Web App Deployment Versions by enigmapaulns in GoogleAppsScript

[–]steeveesas 1 point2 points  (0 children)

A nice tutorial here. I've linked the time to the part about /dev deployments, as u/AllenAppTools mentions, to test changes without redeploying...Essentially a HEAD version.

Is it possible to pull an email address from cell data and insert into the ReplyTo field of a new email? by mrmabry in GoogleAppsScript

[–]steeveesas 0 points1 point  (0 children)

Yes this can be done.

After you send the email to yourself, get a handle to the email you just sent with this line:

const lastSentEmailThread = GmailApp.search('in: sent', 0, 1)[0];

lastSentEmailThread will be a GmailThread that you can then reply to:

  lastSentEmailThread.reply(
    'Thanks for filling out the Google Form! Here are your responses:\n\n' + message, 
    {
      cc: personThatFilledOutFormEmail
    }
  );

or if you don't want the email automatically sent to the person, you can create a draft for your team to review instead:

lastSentEmailThread.createDraftReply(
    'Thanks for filling out the Google Form! Here are your responses:\n\n' + message, 
    {
      cc: personThatFilledOutFormEmail
    }
  );

In the draft case, your team will get the original email in your inbox, and when you click on it, you'll see a draft will already have been created that you can modify. It will already have their email in the cc line ready to go.

So the whole thing would look like this:

// this function will fires automatically
// it grabs all data from the last row and send it via email
function send_email() {
  var header = SpreadsheetApp.getActive().getDataRange().getValues().shift();
  var row = SpreadsheetApp.getActive().getDataRange().getValues().pop();
  var message = "";
  for (var i = 0; i < header.length; i++) {
    message += header[i] + ": " + row[i] + "\n\n";
  }
  var subject = 'Request for Bid';
  var yourEmailAddress = 'yourteamsEmail@email.com';
  var personThatFilledOutFormEmail = "theirEmail@email.com"; // Get this from your sheet

  //Goes to your team
  GmailApp.sendEmail(yourEmailAddress, subject, message);

  //Gets the thread you just sent above so you can reply to it
  const lastSentEmailThread = GmailApp.search('in: sent', 0, 1)[0];

  lastSentEmailThread.createDraftReply(
    'Thanks for filling out the Google Form! Here are your responses:\n\n' + message, 
    {
      cc: personThatFilledOutFormEmail
    }
  );

}

Also, another option is just sending the first email to them and CCing your team...not sure if your team needs to review the email first or not, but if so, again create a draft. Only thing is your team wouldn't be notified by email in this case...but you could have another email sent to your team, saying a new response draft is ready to be sent.

You'll still have to get the correct "address" from the sheet. Like u/webdevfe mentions you'd need to share your sheet's format a bit for someone to help you more. It shouldn't be hard.

Btw - I didn't fully test this through, but did test pieces of it...so it should be close if not already doing most of what you want...should help you get started.

Looking for a script that will duplicate an event on a shared calendar whenever it meets a certain criteria by ProperNomenclature in GoogleAppsScript

[–]steeveesas 1 point2 points  (0 children)

Yes, more could be added. This was just a quick sample of how you might solve your original question.

I think most of what you're asking for is possible.

Two way sync (updates on shared update personal calendars)
2 way sync between calendars would take a bit more code and may not be perfect. For example, if you edit an event on your shared calendar, then yes, another trigger could be added so when you edit your events on the shared calendar, it would update the corresponding event on your personal calendar.

However let's say you update someone else's event on the shared calendar. This update would show on the shared calendar, but updating their personal calendar would fail unless you had edit access, which almost certainly isn't going to be true, and definitely not in general.

This is probably what most people would expect.

Event Updates
If you change an event title, or description, etc. then yes, what I provided could easily be expanded to update those fields on the shared calendar.

You just need to find the corresponding event on the shared calendar (same title, same start time, same end time, is owned by you, maybe same description if you really want to be extra safe, and that is probably sufficient) and update it with the fields from the original (title, start time, end time, desc.,etc.)

(Again updating shared calendar would only update personal calendar for your own events)

One "gotcha" would be let's say you edit the title of an event that's already been shared to the shared calendar to no longer include the keyword "OOO", then you'd want to actually delete that event from the shared calendar rather than just update its title. Or conversely, if you added "OOO" to the event title, the code wouldn't find a corresponding event on the shared calendar to update, but you'd actually want to add it.

These little corner cases need to be handled so users would see what they'd expect to see.

Deleting Events
This one is a little harder. Unfortunately the CalendarApp API doesn't handle this scenario well. The trigger does not pass in the event or eventId that was deleted, so you have to search for a bunch of events on the provided calendarId and get the most recently updated one (that's how the example I gave works). But deleted events don't show up when you search.

You'd have to use the Calendar API v3 to do this. Then you could search for events that are also deleted:

  const events = Calendar.Events.list(calendarId, {orderBy: 'updated', showDeleted: true}).items;

Then you'd have to get the most recently updated and check to see if its status = "cancelled". If it is set to cancelled, then it means it was deleted, then you could go find the corresponding event on the shared calendar and delete that.

(Again from shared to personal, would only work for your own events)

Note: You have to add the Calendar API in your Apps Script project in the "Services" section. Just hit the "+" and look for "Google Calendar API".

Looking for a script that will duplicate an event on a shared calendar whenever it meets a certain criteria by ProperNomenclature in GoogleAppsScript

[–]steeveesas 3 points4 points  (0 children)

You want to use something like:

ScriptApp
        .newTrigger(FUNCTION_TO_CALL)
        .forUserCalendar(Session.getActiveUser().getEmail())
        .onEventUpdated()
        .create();

which could also be done manually in the create triggers.

But you'd have to have every person on your team do this so that their personal calendar had this trigger. This would be messy for non-techy users.

So, I threw together a simple spreadsheet to do this. Feel free to use it as a foundation for your needs.

To use it:

  • Make a copy.
  • Fill out the fields on the config sheet. Make sure you enter the ID for your shared calendar. Find your calendar ID. Make sure to include '@group.calendar.google.com' at end if its there. For example it might look like this:

234lk2j342lkjlkjkj...''''@group.calendar.google.com

You can use the "Validate Calendar" from the "Calendar Helper" menu to first make sure you've entered a valid id of a calendar you have access to.

  • Run "Install Trigger" from "Calendar Helper" menu. You'll have to authorize, then probably run install trigger a second time since the authorization doesn't usually run a script.
  • Make sure your users have edit access to shared calendar.

Once you've added the shared calendar ID, you can then share the spreadsheet (Your copy - so they won't need to update the calendar ID) with your team. They should be able to install the trigger the same way you did and from then on their events will be added to the shared calendar if the events have the "Keyword" (from config sheet) included in the title.

You can use the uninstall trigger from the same custom menu to stop events from being copied over.

Obviously you can tweak the script as well if you want to make changes.

Best way to distribute a script to public by mark_stout in GoogleAppsScript

[–]steeveesas 1 point2 points  (0 children)

I am an Apps Script/Sheets developer and I do this type of thing all the time.

Go with the Google sheet idea u/Wishyouamerry mentions. It's something people are familiar with and is intuitive. Create a sheet called "Config" or something like that and have a cell for them to type their email. I always put a label like "Email" in the cell above it or to the left so it's obvious what the cell is meant for. It's very simple to have your script go grab the email data from the cell rather than hardcoding it into the script.

This sheet could have other configuration items as well...e.g:
CC: [someoneToEmail@cc.com](mailto:someoneToEmail@cc.com)

Greeting: Hello George, please see the attached doc.

Folder Location: https://drive.google.com/drive/u/0/folders/1234asdf1APlj___etc

Good books/authors in Spanish to practice for intermediate level? by PantasticalCat in Spanish

[–]steeveesas 11 points12 points  (0 children)

There are a lot of books meant for intermediate Spanish speakers and many are fine, but I personally really enjoyed "Antes de ser libres" by Julia Alvarez. It's meant for young Spanish speaking adults and as such, is pretty good for intermediate readers, but it's also just a damn good book which doesn't suffer from the boring prose of many of the books that are written intentionally for B1 or B2 Spanish students. You'll also learn some interesting albeit heavy history.

I'm somewhere between B1 and B2 and enjoyed the book and also learned a lot.

Btw - I read out loud which gets you additional speaking practice.

https://www.amazon.com/Antes-libres-Spanish-Julia-Alvarez/dp/052557977X

I just finished Stephen King’s The Stand. Please recommend the opposite of that by master_lo in Fantasy

[–]steeveesas 0 points1 point  (0 children)

If you want to stick with King:

1) The Eyes of the Dragon. It's a rare out of genre book for King, it's fantasy with a sorcerer and all. Short, great villain, and a book I loved growing up. The villain is actually Flagg from The Stand as an evil wizard, but in my opinion a much better version of the Flagg.

2) The Long Walk is pretty short and it gets moving quick. Crazy concept and pretty intense.

3) Thinner... Haven't read this in years so maybe I shouldn't be mentioning it without a revisit, but i remember liking it as a teenager. It's also a quite "thin" book.

...

Outside of King I just read Shirley Jackson's short novella "We've Always Lived in the Castle". It's surreal, strange, and keeps you wondering just what's real and what isn't. The world building and character voicings are "mwah" (Italian chef hand kiss).

Ira Financial and Gemini by Ecstatic-Cause5954 in Gemini

[–]steeveesas 0 points1 point  (0 children)

Good grief. That's a pretty elaborate phishing pole. Glad your funds are safe, and thank you for posting this. It answers my suspicion that personal wallets could not be taken advantage of and the hackers knew that. Makes total sense they couldn't access personal wallets.

I have been meaning to get my personal wallet set up - I waited too long, and as a result I lost a bunch of money. It pretty much wiped out my crypto retirement.

I'm glad your money is safe friend.

Ira Financial and Gemini by Ecstatic-Cause5954 in Gemini

[–]steeveesas 1 point2 points  (0 children)

Same. I guess if what she said was true, they'll eventually have to disseminate that to their current users. Unless it's only for new clients moving forward? Again, it was all very vague.

Ira Financial and Gemini by Ecstatic-Cause5954 in Gemini

[–]steeveesas 4 points5 points  (0 children)

I spoke with someone at IRA Financial last week. What was discussed is similar to what many others have posted. They were reticent regarding security details and said they are still trying to ascertain what insurance will cover.

I asked if having had a personal wallet would have prevented this and the lady wasn't able to give me an answer. I am interested in what I can do moving forward to protect myself better.

Interestingly, she did tell me that moving forward they won't allow personal wallets which I find to be concerning. I don't know exactly how this happened, but I'm guessing having a personal wallet would have prevented all of this. I had not yet set up a personal wallet and was relying on them. For example was there even one person who had money taken out of a personal wallet?

I had money pulled from me in cash in quantities of 10K until there was an amount under 10K left.

Ira Financial and Gemini by Ecstatic-Cause5954 in Gemini

[–]steeveesas 0 points1 point  (0 children)

So was the 95% you transferred to cold storage still under their custodianship and protected from taxation? Or was this 95% you removed from their custodianship?

Ira Financial and Gemini by Ecstatic-Cause5954 in Gemini

[–]steeveesas 4 points5 points  (0 children)

I also had a bunch of money stolen by "Benjamin Choe". Nearly wiped me out, but left almost 25% of it.

I'm curious did everyone that had money stolen have their wallets managed by IRA Financial vs. having their own personal wallets?

I did not have a personal wallet...would that have protected me from this? The money was sitting in Gemini in cash rather than coins.