3 ms·
Ask HN: How do you share scripts with non-coders?
I used to work on a team with analysts who didn't know how to code. Typically, I'd write my own Python or R functions for data cleaning, light analysis, and plotting.
Eventually, the other analysts wanted to use my functions for their own projects, so I tried teaching them how to execute Python from the terminal. That didn't really work.
Then I spent a day building a small app to run my script. It was valuable, but still a lot of work for something so small.
Just wondering - what do others do to share scripts with non-coders?
- markcampbell 12y agoLink to zip of gist separated into the files related.
- donpinkus 12y agoIs a non-engineer able to understand this?
- markcampbell 12y agoIt'll be a zip file that you extract -- it'll be in the correct structure.
- bluerail 12y agoI have created a standardized code numbers for the output (like 12 for success, 13 for suspended, etc..) and the script will output the respective number as an output of which the list of numbers and their respective output is with them already.. Then, I ll just Zip it, and send them the scripts along with some step by step instructions on how to execute it (with screenshots) and the results expected.. At beginning it will be hassle but on the way most documents will become common for all...
- hackerews 12y agoI've done this too. Takes so long to set up all the instructions though.
- sudont 12y agoAt my day job we generally will bundle small procedures/scripts into a simple webapp with either flask or express.js. For our backend systems, we're looking into rundeck to allow non sudoers the ability to restart a system service. That might be potentially useful. It seems like there might be a niche for a "Delphi for the web" stack of reusable components and standard backend systems.
- hackerews 12y agoThis sounds really cool! So non-engineers can just click "run" on a system service and get the output? How do you handle small procedures/scripts that require them to put in inputs? Or does that not pop up for you..
- glimcat 12y agoSet up a lightweight web interface using Flask. When people log in and submit a job, it gets added to an RQ task queue for asynchronous execution. If they need anything back at the end, job status, results, whatever - that goes in a database. Congratulations, you've just made a simple web app. If people are actually getting use out of it, go back and pretty it up a bit with a Bootstrap template or whatever, it doesn't take much here to have meaningful effects on user perception. It mostly just has to be nice enough that it looks reasonably professional when people show it off in meetings, which is NOT a cutting-edge design problem. Add more pages for more scripts as needed, and tag users with permissions so you know which scripts should be exposed to which users. If merited, go back and add fancy features like generating PDF reports and emailing them to the head of department every week.
- hackerews 12y agoThis is interesting. What if users have to put in their own inputs for the scripts? For instance, specify start-date and end-date for a sql query, or upload a spreadsheet to do the python analysis on?
- glimcat 12y agoYou'd use Flask-WTF for forms. https://flask-wtf.readthedocs.org/en/latest/ https://flask-wtf.readthedocs.org/en/latest/ It can also handle file uploads. https://flask-wtf.readthedocs.org/en/latest/form.html https://flask-wtf.readthedocs.org/en/latest/form.html You'd need to define a model which describes the form fields, handle it in your view, and add it to your page template. forms.py from flask_wtf import Form from wtforms import TextField, PasswordField from wtforms.validators import DataRequired class LoginForm(Form): email = TextField('Email', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) views.py from forms import LoginForm @app.route('/login', methods=('GET', 'POST')) def login(): form = LoginForm() if form.validate_on_submit(): email = form.data.get('email', None) password = form.data.get('password', None) do_login_stuff(email, password) else: return render_template('login_page.html', form=form) login_page.html {% extends "base.html" %} {% block content %} <h3>Log in:</h3> <form method="POST" action="{{ url_for('login') }}"> {{ form.hidden_tag() }} {{ form.email.label }} {{ form.email }} {{ form.password.label }} {{ form.password }} <input type="submit" value="Log in"> </form> {% endblock %}
- skratlo 12y agoSend them a link to iPython Notebook, either host it yourself or use http://nbviewer.ipython.org/ http://nbviewer.ipython.org/ . Should be easy to teach them to modify the input data and re-run the script from the web UI.
- BWStearns 12y agoI had a similar situation and I either wrapped them in really simple tkinter interface or used py2exe. Sometimes I wrote up some dialogues to get user input to control the script wrap it up in a folder with a .sh file that runs the python script and just tell them that the .sh file is the program. Double click, opens program, follow instructions (hacky and fragile but got the job done). They were usually limited in scope enough where I just let the script crash on most errors and just warned the users about it.
- hackerews 12y agoI did py2exe too when I was working a consulting gig a few years ago! :)