Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Dobbs_Head
May 8, 2008

nano nano nano

Greatest Living Man posted:

What's wrong with this EIS package? Aside from the documentation being a png with background transparency meaning I can't read the description. (Note: I am not author.)

It’s the code itself. Look how the dude reads files. He iterates over folders and reads the files with pandas like a normal human and then concats them. I mean, he winds up reading them 3 times each because he doesn’t use open / readline to parse the headers but that is normal hacky stupid.

Rather than passing the list of dataframes directly to concat, he hard coded lists up to length 15 and then raises an error if there are more than 15 files. There is no earthly reason for this, other than he didn’t know that concat can take a variable sized list.

Then look at the model functions. He has functions with names like RC37, where he literally hard coded a finite sum from a list with 37 elements. It’s bonkers, and the only explanation is he didn’t know how for loops and zip work. Thousands of lines of code where he needed only a few serving as a monument to the author’s determination to not learn the basics of iteration.

Then there is how analysis is done. Rather than cleanly splitting model definition, fitting and display he’s got monster functions that do it all at once. The tool can’t be adapted outside the scope the author imagined because of this design choice. Imagine trying to systematically fit a few thousands EIS curves and having the tool write a ding dang matplotlib figure for each!

The worst part is he put his name and contact information in every docstring, so you remember exactly who thought writing that buggy crap was a good idea.

Adbot
ADBOT LOVES YOU

Dobbs_Head
May 8, 2008

nano nano nano

If I seem like I thought about this a lot, it’s because I did.

mycomancy
Oct 16, 2016

Dobbs_Head posted:

It’s the code itself. Look how the dude reads files. He iterates over folders and reads the files with pandas like a normal human and then concats them. I mean, he winds up reading them 3 times each because he doesn’t use open / readline to parse the headers but that is normal hacky stupid.

Rather than passing the list of dataframes directly to concat, he hard coded lists up to length 15 and then raises an error if there are more than 15 files. There is no earthly reason for this, other than he didn’t know that concat can take a variable sized list.

Then look at the model functions. He has functions with names like RC37, where he literally hard coded a finite sum from a list with 37 elements. It’s bonkers, and the only explanation is he didn’t know how for loops and zip work. Thousands of lines of code where he needed only a few serving as a monument to the author’s determination to not learn the basics of iteration.

Then there is how analysis is done. Rather than cleanly splitting model definition, fitting and display he’s got monster functions that do it all at once. The tool can’t be adapted outside the scope the author imagined because of this design choice. Imagine trying to systematically fit a few thousands EIS curves and having the tool write a ding dang matplotlib figure for each!

The worst part is he put his name and contact information in every docstring, so you remember exactly who thought writing that buggy crap was a good idea.

I'm a terrible coder, but at least I'm ashamed enough to not have a GitHub.

Also gently caress me I'm way better than this clown.

Dobbs_Head
May 8, 2008

nano nano nano

mycomancy posted:

I'm a terrible coder, but at least I'm ashamed enough to not have a GitHub.

Also gently caress me I'm way better than this clown.

I was so disappointed with this code too. I had a bunch of EIS data I wanted to automate analysis on. And here was a package in the python package index confidently name PyEIS.

And there was nothing I could use.

In contrast, check out pHcalc. It’s a lovely little package for calculating the pH of buffer systems from charge balance. It has its flaws, but the analytical functions can be pulled out and generalized very easily.

married but discreet
May 7, 2005


Taco Defender
Any good textbooks to teach myself rudimentary structural biology? I'm never going to be solving structures myself but I want to have some understanding of the colourful wiggles I keep seeing in papers. I have a PhD in microbiology so I don't need to learn bio scratch.

Epitope
Nov 27, 2006

Grimey Drawer

Dobbs_Head posted:

If I seem like I thought about this a lot, it’s because I did.

Informative and amusing :)

I'm in a small setting, all our information management is home brewed. I don't know if it qualifies as a LIMS. The core is a SQL database. Instrument data transfers in by ODBC. We contracted someone to build an app to transfer the electronic notebook data in. I've blundered my way through creating SQL views and R scripts to process the data and populate notebook pages. The most sophisticated one is for quality data, where formulas and criteria are applied to parameters from across multiple sample IDs. Anyway, it's interesting to hear how this type of skill set is applied in bigger settings so thanks for sharing.

Greatest Living Man
Jul 22, 2005

ask President Obama

Dobbs_Head posted:

I was so disappointed with this code too. I had a bunch of EIS data I wanted to automate analysis on. And here was a package in the python package index confidently name PyEIS.

And there was nothing I could use.

In contrast, check out pHcalc. It’s a lovely little package for calculating the pH of buffer systems from charge balance. It has its flaws, but the analytical functions can be pulled out and generalized very easily.

Guess we have to make pynotZView now.

Greatest Living Man
Jul 22, 2005

ask President Obama

Dobbs_Head posted:

It’s the code itself. Look how the dude reads files. He iterates over folders and reads the files with pandas like a normal human and then concats them. I mean, he winds up reading them 3 times each because he doesn’t use open / readline to parse the headers but that is normal hacky stupid.

Rather than passing the list of dataframes directly to concat, he hard coded lists up to length 15 and then raises an error if there are more than 15 files. There is no earthly reason for this, other than he didn’t know that concat can take a variable sized list.

Then look at the model functions. He has functions with names like RC37, where he literally hard coded a finite sum from a list with 37 elements. It’s bonkers, and the only explanation is he didn’t know how for loops and zip work. Thousands of lines of code where he needed only a few serving as a monument to the author’s determination to not learn the basics of iteration.

Then there is how analysis is done. Rather than cleanly splitting model definition, fitting and display he’s got monster functions that do it all at once. The tool can’t be adapted outside the scope the author imagined because of this design choice. Imagine trying to systematically fit a few thousands EIS curves and having the tool write a ding dang matplotlib figure for each!

The worst part is he put his name and contact information in every docstring, so you remember exactly who thought writing that buggy crap was a good idea.

lmmaaaaooo you weren't kidding

code:
        # adds individual dataframes into one
        if len(self.df_raw0) == 1:
            self.df_raw = self.df_raw0[0]
        elif len(self.df_raw0) == 2:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1]], axis=0)
        elif len(self.df_raw0) == 3:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2]], axis=0)
        elif len(self.df_raw0) == 4:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3]], axis=0)
        elif len(self.df_raw0) == 5:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4]], axis=0)
        elif len(self.df_raw0) == 6:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5]], axis=0)
        elif len(self.df_raw0) == 7:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6]], axis=0)
        elif len(self.df_raw0) == 8:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7]], axis=0)
        elif len(self.df_raw0) == 9:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8]], axis=0)
        elif len(self.df_raw0) == 10:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9]], axis=0)
        elif len(self.df_raw0) == 11:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10]], axis=0)
        elif len(self.df_raw0) == 12:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], axis=0)
        elif len(self.df_raw0) == 13:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11], self.df_raw0[12]], axis=0)
        elif len(self.df_raw0) == 14:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], self.df_raw0[12], self.df_raw0[13], axis=0)
        elif len(self.df_raw0) == 15:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], self.df_raw0[12], self.df_raw0[13], self.df_raw0[14], axis=0)
        else:
            print("Too many data files || 15 allowed")
        self.df_raw = self.df_raw.assign(w = 2*np.pi*self.df_raw.f) #creats a new coloumn with the angular frequency

mycomancy
Oct 16, 2016

Greatest Living Man posted:

lmmaaaaooo you weren't kidding

code:
        # adds individual dataframes into one
        if len(self.df_raw0) == 1:
            self.df_raw = self.df_raw0[0]
        elif len(self.df_raw0) == 2:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1]], axis=0)
        elif len(self.df_raw0) == 3:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2]], axis=0)
        elif len(self.df_raw0) == 4:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3]], axis=0)
        elif len(self.df_raw0) == 5:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4]], axis=0)
        elif len(self.df_raw0) == 6:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5]], axis=0)
        elif len(self.df_raw0) == 7:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6]], axis=0)
        elif len(self.df_raw0) == 8:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7]], axis=0)
        elif len(self.df_raw0) == 9:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8]], axis=0)
        elif len(self.df_raw0) == 10:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9]], axis=0)
        elif len(self.df_raw0) == 11:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10]], axis=0)
        elif len(self.df_raw0) == 12:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], axis=0)
        elif len(self.df_raw0) == 13:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11], self.df_raw0[12]], axis=0)
        elif len(self.df_raw0) == 14:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], self.df_raw0[12], self.df_raw0[13], axis=0)
        elif len(self.df_raw0) == 15:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], self.df_raw0[12], self.df_raw0[13], self.df_raw0[14], axis=0)
        else:
            print("Too many data files || 15 allowed")
        self.df_raw = self.df_raw.assign(w = 2*np.pi*self.df_raw.f) #creats a new coloumn with the angular frequency
Aaaaaaaahahahahahaha hahahahaha Jesus H. Christ this is terrible!

mycomancy
Oct 16, 2016
Lazy enough to write code to do it for me, too lazy to Google Stack Exchange.

Cardiac
Aug 28, 2012

Greatest Living Man posted:

lmmaaaaooo you weren't kidding

code:
        # adds individual dataframes into one
        if len(self.df_raw0) == 1:
            self.df_raw = self.df_raw0[0]
        elif len(self.df_raw0) == 2:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1]], axis=0)
        elif len(self.df_raw0) == 3:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2]], axis=0)
        elif len(self.df_raw0) == 4:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3]], axis=0)
        elif len(self.df_raw0) == 5:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4]], axis=0)
        elif len(self.df_raw0) == 6:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5]], axis=0)
        elif len(self.df_raw0) == 7:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6]], axis=0)
        elif len(self.df_raw0) == 8:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7]], axis=0)
        elif len(self.df_raw0) == 9:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8]], axis=0)
        elif len(self.df_raw0) == 10:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9]], axis=0)
        elif len(self.df_raw0) == 11:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10]], axis=0)
        elif len(self.df_raw0) == 12:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], axis=0)
        elif len(self.df_raw0) == 13:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11], self.df_raw0[12]], axis=0)
        elif len(self.df_raw0) == 14:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], self.df_raw0[12], self.df_raw0[13], axis=0)
        elif len(self.df_raw0) == 15:
            self.df_raw = pd.concat([self.df_raw0[0], self.df_raw0[1], self.df_raw0[2], self.df_raw0[3], self.df_raw0[4], self.df_raw0[5], self.df_raw0[6], self.df_raw0[7], self.df_raw0[8], self.df_raw0[9], self.df_raw0[10], self.df_raw0[11]], self.df_raw0[12], self.df_raw0[13], self.df_raw0[14], axis=0)
        else:
            print("Too many data files || 15 allowed")
        self.df_raw = self.df_raw.assign(w = 2*np.pi*self.df_raw.f) #creats a new coloumn with the angular frequency

This is can be done in 3 rows or so if I am not mistaken?
Glob for the filelist, concat the datasets, do the calculation?
I keep finding functions in pandas that replace my lovely code in one function because someone else already had that problem.
Also, I don’t put it on GitHub.

Greatest Living Man
Jul 22, 2005

ask President Obama
Tempted to add a feature request for up to 99 data files and see if he updates it.

Dobbs_Head
May 8, 2008

nano nano nano

Cardiac posted:

This is can be done in 3 rows or so if I am not mistaken?
Glob for the filelist, concat the datasets, do the calculation?
I keep finding functions in pandas that replace my lovely code in one function because someone else already had that problem.
Also, I don’t put it on GitHub.

Yeah, basically.

One pandas tool I really embraced recently is the query method. I used to make boolean arrays to section data, but writing query strings to section dataframes is a lot more readable and maintainable.

Cardiac
Aug 28, 2012

Dobbs_Head posted:

Yeah, basically.

One pandas tool I really embraced recently is the query method. I used to make boolean arrays to section data, but writing query strings to section dataframes is a lot more readable and maintainable.

For some unexciting reason, I am currently concatenating a series of Excel sheets so I can put them in a SQL database.
The excel sheets have had experimental samples defined manually and despite there being an in-house standard for how information should be put it, the variation of date formats is rather amazing.
As well as all the other issues that happen with manual import.
Pandas has an excellent tool for date formatting, but even pandas have issues with human ingenuity.

Dobbs_Head
May 8, 2008

nano nano nano

I had a program that generated a log file with timestamps. The dude who wrote it used a custom datetime to string function.

It would sometimes generate strings that looked like this: 2021-10-15 14:32:60.0

Threw me for a loop that did.

Better than hunting through excel docs for all the times someone malformed a date though.

When I’ve had to deal with that, I’d use pandas to_datetime function with the coerce argument set to true and just slam through a list of string format codes recursively on anything that generated a nan as output until they all got converted. Anything left I’d add a rule to the format code list to deal with it, or if was too stupid to fix I’d push a null into the db.

Dobbs_Head
May 8, 2008

nano nano nano

More lab oriented: just spent a day sorting through working electrodes. Every ding dang one had scratches and chips in them and was useless in CV (our system reverses in the presence of an H2 catalyst, so scratches make an electrode worthless)

Spent hours polishing and couldn’t rehabilitate a single one. Going to need to just toss like $5-10k in electrodes because we couldn’t be bothered to take care of them.

mycomancy
Oct 16, 2016

Dobbs_Head posted:

More lab oriented: just spent a day sorting through working electrodes. Every ding dang one had scratches and chips in them and was useless in CV (our system reverses in the presence of an H2 catalyst, so scratches make an electrode worthless)

Spent hours polishing and couldn’t rehabilitate a single one. Going to need to just toss like $5-10k in electrodes because we couldn’t be bothered to take care of them.

Bastard Tetris
Apr 27, 2005

L-Shaped


Nap Ghost
Thank you for posting that hosed up Python code, I think it psychically damaged some of my coworkers on an existential level

Dobbs_Head
May 8, 2008

nano nano nano

Ok, I’m moving on from my current job. Part of my role has been supporting our LabWare LIMS implementation.

Since I actually like my coworkers, I’m trying to find them alternative avenues for support.

Does anyone ITT know anyone who does consulting support for LabWare LIMS? I know LabWare does it, but I’m looking for multiple options for the team.

Lyon
Apr 17, 2003
Off the top of my head the big to decent sized firms are: CSols, Astrix, Accenture (acquired LabAnswer consulting group), Clarkston

Youth Decay
Aug 18, 2015

X-posting from jobs thread because even though I got off the bench and into QC reviewer heaven I got a bunch of chemistry/biology lab jobs for y'all. Mostly on the bench doing ELISAs or LC/MS and the like, some sample management, a couple IT.

Youth Decay posted:

Job Openings (MANY!)

What: at least 136 (as of 2/21/2022) open laboratory positions at PPD/Thermo Fisher laboratories at my location. It's pharmaceutical contract research, you'll be running samples from patients in clinical trials. Positions available include assistant through senior scientists (aka lab techs), in several departments including immunochemistry, vaccine, cell-based, chromatography. sample coordinator (aka sample accessioner, full and part-time), a variety of managers, QA auditors, scientific writer, applications administrator, facilities coordinator, HVAC tech, etc. Not entirely sure on pay for each position but I think it's $17-$18/hr-ish starting for the entry-level assistant scientist and it goes up from there.

Who: Most scientist positions just need a BS/BA in a science, more experience/education for higher levels. Sample Coordinator and Facilities Coordinator just need high school diploma + experience. Lab experience highly preferred, undergrad lab experience is fine. Clinical lab certs are a super-mega-ultra-bonus but not required, there's only a handful of people here who even have one. Must Love Pipettes.

Where: Richmond, VA and Middleton, WI

When: Most positions ASAP, interview process takes a few weeks

Why: training provided, actually hires new college grads for entry-level positions, decent pay for the location, decent benefits that have increased since we got bought by Thermo, flexible schedules for 1st and 2nd shift, an actual 40-hour workweek, OT often available but not usually required, pretty chill work environment, no patient/client/customer interaction, many opportunities to advance or switch career paths. Feel like you're playing a teeny tiny part in bringing new biologics, antivirals and vaccines, including COVID treatments and vaccines. Several positions are specifically for the Pfizer vaccine team.

How: Look through current openings here and PM me for referral details.

BadSamaritan
May 2, 2008

crumb by crumb in this big black forest


If anyone is working in a hospital lab and is interested in making the switch to hospital lab IT, my Boston-based hospital system is doing a ton of lab IT hiring for both clinical lab and anatomic pathology sides.

It’s a field that generally doesn’t have very many openings and this is a fantastic opportunity if you want to make the switch. PM for deets or with questions.

AfricanBootyShine
Jan 9, 2006

Snake wins.

We're having issues securing centrifugal concentrators, which we use to concentrate lysates and cell supernatants down to about 200-500 uL.

I've been tasked with looking at alternatives - it seems like Amicon stirred cells might be an option, but I'm wondering if there's anything else out there that could be a replacement as well.

The Aardvark
Aug 19, 2013


Right now we're struggling by using Cytiva ones. It takes forever to concentrate our stuff with them though.

Stir cells are ok, but there's also a filter shortage or something because we never have 30k filters for them, just 10k, so that takes longer for us too.

street doc
Feb 20, 2019

Layoffs are starting to pick up. Hope your employer has solid revenue or giant piles of cash.

CuddleCryptid
Jan 11, 2013

Things could be going better

street doc posted:

Layoffs are starting to pick up. Hope your employer has solid revenue or giant piles of cash.

Of course, my employer made huge profits last year due to a huge cash injection from the government due to covid which is absolutely not sustainable.

Epitope
Nov 27, 2006

Grimey Drawer
It does feel like the feeding frenzy is over

Covid testing carpetbaggers stole a chunk of our analytical staff. Their spiel included some malarkey about transitioning to toxicology. Of course as soon as the government bucks dried up they pulled stakes. At least one guy tried to come crawling back, sorry matey

Cardiac
Aug 28, 2012

Epitope posted:

It does feel like the feeding frenzy is over

Covid testing carpetbaggers stole a chunk of our analytical staff. Their spiel included some malarkey about transitioning to toxicology. Of course as soon as the government bucks dried up they pulled stakes. At least one guy tried to come crawling back, sorry matey

From our side as a CRO, we see that clients that are in need of fresh injections of cash are suspending their operations. New startups are still getting money however.

trilobite terror
Oct 20, 2007
BUT MY LIVELIHOOD DEPENDS ON THE FORUMS!

Cardiac posted:

From our side as a CRO, we see that clients that are in need of fresh injections of cash are suspending their operations. New startups are still getting money however.

same as it ever was

Shrieking Muppet
Jul 16, 2006
Patent for my current employers money maker is good until 2034 so should be safe assuming I don’t continue to be a barely functional idiot.

married but discreet
May 7, 2005


Taco Defender
Crosspost from Bio thread, does anyone have an idea where I could order a bacterial strain with the classic R1 plasmid? https://en.wikipedia.org/wiki/R1_plasmid
I'm asking around at my university right now but if that doesn't work out I'd rather not just cold-call the last person who published a paper on it.

Dik Hz
Feb 22, 2004

Fun with Science

married but discreet posted:

Crosspost from Bio thread, does anyone have an idea where I could order a bacterial strain with the classic R1 plasmid? https://en.wikipedia.org/wiki/R1_plasmid
I'm asking around at my university right now but if that doesn't work out I'd rather not just cold-call the last person who published a paper on it.
Just e-mail the last person. Academics love that poo poo.

Matryoshka SexDoll
Feb 24, 2016

Bad Habit
Just wanted to thank the people that chimed in about my grad school question. I'm required to do a capstone in a research lab and can certainly see where a lot of you are coming from with respect to project management. It feels very strange to have a deadline pushed until its inflexible and still have no idea what needs to be completed with 100% clarity.

AfricanBootyShine
Jan 9, 2006

Snake wins.

We just got permission to work with pathogens in our lab after months of paperwork and back and forth. Meaning I finally have the OK to blow money on a TC incubator. Anyone have recommendations for brands? Last lab I was in had a couple of aliexpress rebrands sold by some local supplier and they wound up being huge pieces of poo poo that need to be recalibrated weekly.

I know Thermo is of iffy quality, but is Sigma any good? Or should I just spring for an eppendorf? I need something stackable and that would also have room for a roller apparatus.

Zudgemud
Mar 1, 2009
Grimey Drawer

AfricanBootyShine posted:

We just got permission to work with pathogens in our lab after months of paperwork and back and forth. Meaning I finally have the OK to blow money on a TC incubator. Anyone have recommendations for brands? Last lab I was in had a couple of aliexpress rebrands sold by some local supplier and they wound up being huge pieces of poo poo that need to be recalibrated weekly.

I know Thermo is of iffy quality, but is Sigma any good? Or should I just spring for an eppendorf? I need something stackable and that would also have room for a roller apparatus.

What sizes are you aiming for and what exactly are you going to use it for, only tissue culture? Shake flask cultures? Roller bottles? Spinner cultures?

We have big Infors HT Multitrons for shake flask cultures and Thermo incubators for the rest. We threw away our roller bottle incubator because there is little use for them with better options available.
One could in theory use the Infors HT Multitrons for culture flasks too but I don't know if they have good shelving systems or so as we have never used them for that.

We have had very few problems with our Thermo incubators over the years, at most our big Thermo incubator have had their gas sensor break/glitch, which is costly with service etc but apparently one can often just tap that sucker and it will work again, problem is knowing where and how to find it. Our small Thermo incubators have never had any problems over 18 years.

Our Infors shakers are only a couple of years but we have never had any problems with them and before we bought them we had multiple other large labs and core facilities recommend them and their reliability. Only possible downside is that they tend to drink a lot of water.

Dobbs_Head
May 8, 2008

nano nano nano

My work had me use a ductless hood for some chemistry dev work.

Just straight up overwhelmed the filters and started pumping HCl vapor into the lab space. It wasn’t even that much material.

Upside is I get my own real fume hood now.

Mustached Demon
Nov 12, 2016

Dobbs_Head posted:

My work had me use a ductless hood for some chemistry dev work.

Just straight up overwhelmed the filters and started pumping HCl vapor into the lab space. It wasn’t even that much material.

Upside is I get my own real fume hood now.

Ahh the strategy of "commit war crimes vs coworkers to get what you want" paying off I see.

Dobbs_Head
May 8, 2008

nano nano nano

Mustached Demon posted:

Ahh the strategy of "commit war crimes vs coworkers to get what you want" paying off I see.

Hey man, I ran my experiment plan by ESH and they told me to use the ductless hood. I never used one before and after this I’d rather not use one again.

carnassials
Jan 5, 2013
Alright I'm looking for way a to branch into a different chemical industry / region. I have a BS only, but I'm wrapping up 1 year of experience in qualification/validation and have ~8 years of PRD experience in the pharma CRO industry.

Any suggestions on job titles I should search? I'm thinking the qual/val xp should have good carryover into other roles but I would be fine to stay in a similar role.

Main thing is I'm trying to move more out west (oregon, texas, etc) and get a pay bump since out internal promotions are stingy as gently caress.

Adbot
ADBOT LOVES YOU

AfricanBootyShine
Jan 9, 2006

Snake wins.

More equipment questions:

Sigma vs Eppendorf refrigerated microcentrifuge.

The staff at my new job swear by Sigma equipment, but I'm bit skeptical. I've never used sigma equipment before, but in my experience the company branded equipment (like Fisherbrand or Thermo Fisher) starts falling apart after about five years, while eppendorf holds up.

Is it worth the 20% premium to get an eppendorf?

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply