https://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_...
1,787 karma · joined October 29, 2013
author: The Tao of tmux (https://leanpub.com/the-tao-of-tmux) available to read for free online at https://leanpub.com/the-tao-of-tmux/free
software libraries: cihai, unihan-etl, tmuxp, libtmux, vcspull, libvcs
tony (at) git-pull.com
https://www.git-pull.com
(If what I say isn't helpful to you, disregard it. Spread the good will and good tidings!)
https://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_...
What's going on with Adobe Kuler aka Adobe Color CC? Looks like they made it easier to grab the colors recently: https://color.adobe.com/explore/?filter=most-popular&time=mo...
It works easiest when you mouseover and click "Edit Copy" (second button)
Anyone remember Color Scheme Studio? https://www.macupdate.com/app/mac/15962/color-schemer-studio
What happened to them? I can't find an official website. I could imagine people still wanting to buy their software today.
Sure.
There's a name for it: The Bozo Event Horizon.
https://blogs.harvard.edu/waldo/2012/07/27/the-bozo-event-ho...
Maybe it's hard for good engineers to find good employers and bosses.
9/10 of the technical screens I take are bunk. It boils down to what's fresh on my mind that moment; random trivia.
I feel the comment I made "It's an employer's market" https://news.ycombinator.com/item?id=12667346 rings true.
There's no incentive for the employer to apply more thought into holistically seeing if a can perform a role - or learn it if accommodated.
Not impromptu, fanciful, hypothetical scaling scenarios and job requirements.
> good engineer
What does that mean?
Those involved in hiring aren't skilled engineers. They lack qualification to determine what a good engineer is. It's Dunning-Kruger.
A manager is reluctant to hire a star programmer that could run laps around them and upstages them. A junior programmer will use on-the-spot technical interviews to disqualify - catch them off guard - so they don't hire the person who replaces them.
Merit is thrown out the door due to turf protection. So maybe a more correct word would be, an "appropriate" engineer. To suit the political dynamic and lack of incentive to make the company tech-centric.
If you've been bossing people around for the last years, you haven't been doing much other than talking while we've been hacking all this time.
I'm could use a hand.
The codebase across all of these projects are solid. CI already wired in, including Sphinx + ReadTheDocs.
Help could be QA'ing pull requests, making features, documentation, and so on.
Here's an example project: https://tmuxp.git-pull.com - Request: https://github.com/tony/tmuxp/issues/290
Anything else on the sidebar, underneath of "Projects" of https://git-pull.com
Of all those, cihai (https://cihai.git-pull.com) doesn't have as much traction, but if you like Chinese/Japanese/Korean, it may be a fit. I'm building it to be a successor to Christoph Burgmer's cjklib (https://pypi.python.org/pypi/cjklib).
I would go the SAAS route, the way WordPress.com does it. Self-serve DIY hosting and enterprise clients (the kind of stuff you'd have account managers for).
There also is a recipe for a permissively licensed library, with a commercial front-end: spaCy, the NLP library [1], and prodi.gy, the front-end [2].
The spaCy devs are my favorite success story. A solid library, and using their know-how to create a value-added front-end on top of it.
There is a lot in play when this happens. SaltStack is a superb configuration management system. But when I make tickets on GH to pressure them to make things more fluid for non-enterprise deployments, they don't get much traction. I can't help their bottom line, and their incentive to cater to enterprise clients takes them astray from the values that made it great: the masterless, solo quickstart [3] (this is strongly my own observation).
By far the biggest usage of open source is going to be intermixing permissively licensed libraries and build tools in larger works. By the time you see a polished service or product, you may not be able to tell what it's built in, even though they stand on the shoulders of giants. PS4 and Switch is built on FreeBSD.
[1] https://spacy.io/ [2] https://prodi.gy/ [3] https://docs.saltstack.com/en/latest/topics/tutorials/quicks...
To the point I'm beta testing a canned explanation of why programmers aren't interested if you don't have funding raised.
https://www.git-pull.com/consulting/will-i-work-for-equity-o...
If you can't raise funding, or self-fund, what do you bring to the table at that stage other than talk?
The issue is, I already have ideas and a mile-long backlog. When I work by myself, I retain the intellectual property and can continue to expand and improve upon it.
I have the chance to be financially independent and have control of my own life, that is my goal. When you ask me to be your partner, you want me to take on responsibilities and give up my prized autonomy, and transfer all the byproduct to you.
What are you going to do to pull me away from potential revenue streams, remote work opportunities, my own startup, and so on?
There are people out there with bad ideas, no track record, that still manage to raise funds by being charismatic. How committed can a prospective co-founder be if they're not securing seed funding, getting family pitch in, self-funding, etc?
What I'm against is this crab mentality and envy that having contributions to open source is looked upon as if it's yacht sailing - when it's really hard work and quite thankless, heh.
I highly doubt every time I hear people saying "they don't have time", the person truly optimizes their schedule to be productive, or has forgone common "normal" timewasters.
Every time someone is playing video games, chatting, using social media, watching TV, and having spent on nothing productive: that is when open source can happen. You can do a lot in an hour of time.
If you look at my open source contributions (to other projects), more than half are:
- updating continuous integration / tests
- code styling
- documentation
- typos
How much time does it take to fix a typo? 1 minute.
To improve documentation? 5-25 minutes.
Code styling? 1 minute to 1 hour.
Updating CI? 10 minutes to 1 hour.
Those are all great stepping stones to help you gain momentum, instead of malingering with no direction. Nobody is going to come along and volunteer on your behalf, this is about your personal constitution.
A lot of my other patches come from work. In the natural course of duty, there's opportunity to send code back upstream.
My largest contributions span 2 days or more.
Remote: Yes
Willing to relocate: Dependant on salary / benefits
Résumé/CV: https://cv.git-pull.com
GitHub: https://github.com/tony
Website: https://git-pull.com
Email: See profile
Technologies: I specialize in ECommerce integration with Stripe for SAAS / subscription services, Django, Python, ES6, Webpack, and Vue.js.
I've worked at Social Amp -> Merkle (acquired), Boostable (W14). I've created several successful open source projects and contributed to hundreds of others.
I dig startups and get stuff done. Always looking for a chill boss / place to work with, and do what I like: Code!
(just looking for consulting? https://git-pull.com/consulting/)
Location: Chicago (CST)
GitHub: https://github.com/tony
Website: https://git-pull.com
Consulting page: https://git-pull.com/consulting/
I do consulting at a flat rate starting at $5k. I specialize in ECommerce integration with Stripe for SAAS / subscription services, Django, Python, ES6, Webpack, and Vue.js.
I've worked at Social Amp -> Merkle (acquired), Boostable (W14). I've created several successful open source projects and contributed to hundreds of others. I dig startups and get stuff done. Always looking for a chill boss / place to work with, and to do what I like: Code!
Why would someone go the extra mile, to work late into the night, for someone who just viewed them as commodities at the lowest bidder? Were any successful startups you can think of built on Upwork? (I think Digg's MVP was on oDesk.)
Creating a sense of authenticity, [1] mindfulness of the product, aesthetic, value is hard to outsource. Unless you have someone sink their teeth in it.
It's just not the trend I've seen at startups.
> b) Are you sure someone didn't already make a lib for that?
As for the the library part. Just billing code alone is consuming my life right now. Sure, there's the stripe-python wrapper over the API, and djstripe. Which even goes all the way to create a database parity with Stripe's resources.
Can djstripe handle multiple subscriptions for a customer? Will it automatically propagate plans configured locally so they exist on Stripe's end? Can djstripe recover from inconsistencies between the customer ID in local storage and stripe's remote (a custom intervention would be required). Does it have a flow for handling stripe elements (the widget that accepts billing info), creating a user (if logged out) and accepting the source? I can list more.
Am I to expect an outsourced programmer is going to consider all these cases? Or do I have to wait for customers to drop off?
There are superb libraries, permissively licensed ones. But no one-size-fits-all to give a workflow that looks top notch. A great deal of the skill when programming isn't just data-in/data-out, but gluing and synthesizing the parts cohesively. In this sense, there's a great differentiation from a programmer with less skill, or giving less effort, and someone taking the time to make it fit in.
User's have an expectation of quality, typically based off the "craftsmanship" of other sites they visited. There are competitors, and having stuff like a good UX, somebody in your timezone, immediately accessible, "in the zone" on where your product is / its philosophy, that speaks english to debug things, all help.
[1] It doesn't have to be a household name.
Startups are a game of optimism. The mindset is: in it to win it.
It's totally OK to be visualizing the finish line and your equity turning into a Tesla, house, or yacht. And you're all sharing the success. It's a huge motivator.
> And, while I'm on that subject. DON'T leave your day job when you start your side project. Just keep your day job until you're making enough money with your side project before you leave!
You can't survive in this field on a 4 hour work week.
Let's be a bit more generous and assume we've built a savings with full time job first. What is the other founder bringing to the table while the programmer produces tangibles?
Billing code, dashboard, homepage, getting users, retaining users, design/ux, debugging, customer service/support. This takes months of grueling work.
You have to go all-in. And a co-founder that's less than 100% is a serious red flag. Why would I want to share ownership with someone who saw this as a side project, when I view it as center of my life?
Get what I mean?
A programmer doesn't have to wait.
Try to take it from a programmer's perspective:
We already have ideas. There's a huge supply of programmers. One's that'd be happy to write an MVP for that inventor/artist/etc in exchange for 20k. But I guarantee you there's zero programmers waiting around, saying to themselves, "If only I had a visionary come along to give me an idea"
Programmer's get used to it. But at least once per year many of us hear something like, "I have a vision", "I got this idea, psst", because you can guarantee 99% of the time, they're not willing to put any cash into it themselves. What I get is a person bossing me around, while I don't get paid, and I absorb all the risk of their idea.
> This applies equally to every start up entrepreneur, from artists to inventor.
If I take on a co-founder, co-hacker, inventor, what do I get?
What role do they play? The "ideas guy". My above post was based on the assumption they have a 50% split. But since they view themselves as the unique, creative force behind everything, they want 51%. Maybe more.
Now, this co-founder thing would make sense if we laid transparent ground rules up front: while all this comes into formation, am I getting paid while I'm crafting this "vision"?
Programmers are in a unique position when it comes to tech startups. They can bootstrap by themselves. The burden lies on the prospective co-founder to balance that contribution through something more than dictating and having ideas. That usually is them going out and raising a seed or self-funding.
If you have a co-founder or co-hacker that goes postal, off on their own, acting shady, behaving badly, for whatever reason, you're lost at sea. If you don't have a safety net or savings in place to catch you, you're going to be living on the street. Thanks to someone else.
You can't control other people. Your co-whatever could become a saboteur. The reasons why and how don't matter, it's about the ramification on your life and how deeply it reverberates.
If that's the only thing you have going - your life is wrecked. You're humiliated by being kicked out of what you created. You have to start over, with an added penalty to all your family you can't support, your networking in tatters, and so on. Make no mistake - have a co-founder - you're one person away from having collateral damage done to your life.
And they'll probably make the company tank afterwards. The main reason a co-founder was there was to keep each other's ideas/egos/visions/whatever in-check. Without that personality mechanism in place, the business is rudderless.
So consider me a skeptic to this whole idea of sharing when I coded everything without safeguards in place for myself. That's the exact opposite reason I run my own thing. This is the one thing where I get control.
If you got cash stashed away somehow, or other cash flow sources, you're in a safer spot to take your chances with a co-founder and bounce back should stuff hit the fan.
I converted from PHP -> Python a long long time ago. But it was my first programming language.
PHP and Laravel is excellent. In particular, Laravel developers come across as very intelligent to me. In the end though, Python has multi-spectrum dominance.
Post about Python's tools: https://news.ycombinator.com/item?id=15957273
Python has Django (https://www.djangoproject.com/). It's 90% as good as Laravel. Which means it's very, very good.
But the thing with Python is it owns PHP when you're doing non-website stuff. If you can be convinced to give up Laravel (it may be hard), Python is easily the best choice.
Python has PEP standards PEP8 (code style) and PEP257 (code docs) long before PHP PSR's became a thing.
Scraping. Normalizing data. Python can handle big data sets. Machine Learning/AI.
Has documentation via Sphinx. Here's an example of one of my projects: https://cihai.git-pull.com. Here's an example of generated API docs: https://cihai.git-pull.com/en/latest/api.html.
The nature of being "Pythonic" spreads into open source code, and later into teams, so the libraries you pull in have a familiar style.
OOP is implemented better in python. That rubs off onto the quality of the libraries and how enjoyable they are to implement.
In my opinion, once you get a hang of Python, it's much easier to read than PHP.
Work Remotely. Salary. Benefits. Software Stack. Chill Boss. That is what matters.
Just about anything else the startups have to offer is categorized as "meta". Not helping things ship.
Devs don't care about "culture". What does that mean? Mandatory stand-ups, weekly 2-hour meetings, signalling "values", and these group photos where everybody forces a smile? (You haven't exited. What is there to celebrate about?)
They don't want the politics. Colleagues trying to justify why they're there, instead of being in a conscience frame of mind to better the company. Anything else not helping the product to market (shipping), gaining users, and retaining them.
The requirement of "on-site", unless there's a legit reason, has become a red flag that invokes an image of a boss in a suit, reclining in their Aeron chair, that's an insecure, yapping, "expert beginner" micro manager who won't heed technical advice; a bozo.
So what makes a "Chill Boss" for programmers? A correlation worth testing is greater software development experience than employees. As opposed to just having a history going straight into management soon as possible.
I've gotten most of my work through incubators, people using my open source projects, and finally through HN.
In hindsight, the reason why incubators/coworking spaces were so effective is people can form a connection beforehand and know your personality. They can see that you're in front of a terminal happy getting stuff done, "in the zone" with your headphones, and not yapping about politics or meta stuff.
If you do python, django, or stripe, check my profile.
If they're interviewing people and giving them trivia questions, they fundamentally don't understand the job.
We keep docs open all day. That's what browser tabs are for. Even seemingly basic stuff. Too much to keep fresh in memory.
I don't remember libtmux's API (a library I created). How do you expect me to remember python standard libraries I never used?
It's futile to explain to the interviewer - no matter how gently - that it's not the way it's done. That's being a prima donna. That's upstaging them, and going to be taken as a slight.
Part of the reason I'm passive in interviews is they already googled me (even if they don't mention it). They know I can program. If they're throwing curve balls at me, I ask myself if this is someone I want as a colleague. Is this someone who would take my technical advice.
I leave the interview with a sense of relief I don't have to live through the hell of a nightmare boss or toxic environment. Like a MoBA game, this is the chance to dodge early.
Screening can works both ways.
There are also times where they are ecstatic at first, but something happens. I don't know - maybe someone's being a bad reference and I have to check on them, or I come off as ragged to them, who knows. Maybe I'm just so honest and candid I talk them out of hiring me.
Part of it is me. In job interviews, I make myself vulnerable, rather than assertive. They already Googled me (whether they admit it or not) and know what I can do. This is someone I'd work for, not an equal. Can I trust them to have integrity and be fair? Because that's what employment is, they have overwhelming power over your life.
Or maybe they move their line of thinking forward, "where are we going to put him?"
I've created open source applications from end-to-end. I have my own way of doing things. I'm enough of a force where people use my software on their machines, import my libraries, and use my documentation. That's a lot to process. Compare that to a fresh candidate on a clean slate that passed their technical screenings. On top of that, there's a couple of hundred to pick from.
Hiring me poses friction and risk. The applicant that passed all the tests conformed and regimented themselves to follow instruction? That's a worker, not a mover/shaker.
See what I mean? It's great to be a "somebody" in a technical field, but sometimes even founders realize their "quest for talent" isn't really so.
But based on this post, I think your issue is you're playing by their rules, doing their take homes and tests, to make it into the pool of "safe picks". Unrealized to many is that hundreds throw themselves at these tests, and they exist only to give the one flipping through resumes less eye strain.
It's not a dignifying experience.
These technical screenings are a sham. They protect entrenched streetwise careerists and lock out honest, reliable people who get stuff done. It promotes imposter syndrome, and wastes thousands of hours of time. This is one of the biggest problems in tech.
To repeat: the reason you don't hear more of this is people don't like to announce they're a failing at "getting a job". It's universal in most cultures being unemployed is being a failure. Understandably, people aren't going to publicly announce their struggle.
They think it's them. Sometimes it is. But if you've interviewed over years, or many many times, you've ruled out the quirks. You're now going to have to come to grips that you're not crazy, that there are systemic realities outside your control pushing you out. Probably ones which don't jive with the ideals of (fairness? merit? esteem?) of being a software developer.
What do you fill your time with, while you're job searching? I don't think you said.
I think that's what would be best for business.
So, back at a company called Buzzr, we had an opportunity to hire a very talented programmer known in the Drupal community. Many many accomplishments, it's safe to say if we took him on, it'd radically change our day to day operations (we needed to do something, in my opinion). He really did espouse the best of the concepts of Drupal, which was perfect, since we were a Drupal SAAS platform.
We didn't take him on. There wasn't much chat - but I was able to scoop up hearsay of why: He'd shake things up too much; too opinionated.
Here's the thing though: who would he be butting heads against? Nobody really had strong technical opinions. I was really junior at the time, and would be honored to work with him.
If you're somebody that has accomplishments and a track record, you're going to have opinions and a style. And for some reason, even startups where there is open room for delegation, decision makers lean toward protecting their turf. Even in situations where they couldn't do better themselves. Even when they're desperate for help.
We're making the mistake of viewing organizations being game theorists that make the most optimal decision - that's not always the case. Organizations don't hire, divisions and teams within them do. In practice, it's more nuanced and political.
It's safe to say, the decision maker's self-preservation overshadows the business making the best decisions.
Sometimes irking the decision maker's pride - disdaining something superior to them - is enough to end the process. It's less cognitive dissonance to just move to the other 999 applications in the pile, than worry how we're going to manage a generative, creative force. The narrative shifts to finding the most "appropriate" candidate based on the hiring manager's sense of safety.
That's my anecdote.
The culture today systematically lacks respect for seniority.
You don't give non-standardized technical screenings to candidates with a demonstrable track record. What are you trying to do by screening people? Are you saying that the applicant is potentially fraudulent?
Why isn't their technical screening standardized? What is it testing for? Is there confirmation by an independent body the screening represents the responsibilities of the role?
Some more factors:
- If it's a startup and you have 10 years of experience, you'd have more experience than most founders. Outshining the master is super-unemployable, unless they're willing to split equity and let you in as a co-founder. Then they're serious. Otherwise, you're just another programmer to them.
- The person interviewing you doesn't want to hire the person who replaces them. Then they'd be stuck job hunting like you. Unless they're retiring in the near future, being too good is probably going to get you a sham technical screening, or some excuse that flunks you early on.
- There is a reporting bias. Due to survivor guilt, you don't see people chiming in every time they get their time wasted.
I use pytest with parametrize: https://docs.pytest.org/en/latest/parametrize.html
Then responses for mocking network stuff from requests: https://github.com/getsentry/responses
Using fixtures and writing your own factory objects to simulate scenarios: https://docs.pytest.org/en/latest/fixture.html. Fixtures in pytest are like setup/teardown.
I keep the code live in production, and have sentry errors email me if someone hits a snag.
Decouple generic code into separate git repositories. Split up billing / generic django / ux stuff so you don't need to repeat it with every website.
I maintain a changelog https://devel.tech/site/updates. Helps to stay motivated while you build out your own IP.
At work, when a project flops, the code tends to go to waste. When you write your own code, unencumbered by any outside agreements/conflicts, it stays with you to reuse, improve, license to others, turn into a SAAS, use in a separate website, etc.
Even in that case, I'm not experiencing any temptation to go to Flask. Two django websites right now with pretty big codebases. One of them has huge backend non-django codebase (which I keep in a separate git repo). Since there's still a need for templates, authentication, rdbms, permission systems, and so on, I still use django and create apps to act as a front-end for the libraries.
> Since it don't try to be responsible for everything from ORM to HTTP, it actually is capable of serving as a thin web layer for existing non-web functionality. At least in theory.
Yep, that's what my intuition was, formerly. Then I realized I needed an ORM since the website needed auth (whether or not it was a legacy db, "unmanaged" in django parlance). Then those users only should have rights to view/update/create certain things - so that means permissions.
> Unfortunately, Flask's extension ecosystem seems to focus more on reinventing Django than supporting its unique strengths as a microframework.
What do you mean by this?
Inevitably most web development tasks will have the developer reinventing Django.
The issue is, at least in my experience, these libraries that just need a quick and dirty front-end, have never stayed that way, heh. Let's just use that slice as an example. Still, in the event that included web interface became non-trivial, the benefit of using Flask quickly turns to reinventing stuff that'd be done easily with Django.
My bigger issue is, the microframework dream hasn't worked for me in PHP or Python. Except once: When I was doing Facebook Page campaigns at Social Amp. Those campaigns were ephemeral, and since they were just designed to be thrown out after a month, a microframework worked quite well.
I view Flask as interesting from an architectural standpoint only. It helped me understand Python better. I liked its test suites, use of string imports, and code quality.
When I wanted to get work done, Django did everything. It had a great ORM system, form handling, views, and a template engine.
I can't think of any benefits Jinja2 (Flask's template library) has over Django templates. Maybe Jinja2 performs a bit faster.
SQLAlchemy, while it's awesome (and I do use it a la carte), isn't much better than Django's ORM in the big scheme of things. In fact, the use of the QuerySet object across Django and its third party package ecosystem makes playing with your data a lot easier.
I never had the dream of "microservices" pan out. Most applications I make end up being monolithic more or less, heh. Any non-trivial application I've dealt with outgrown Flask quickly. In fact, they outgrow Django. In a large application, I maintain a lot of code that does't touch the web framework at all.
In the end, I recommend Django for a web framework over Flask. More productivity, better extensions, less reinventing the wheel.
Also, I wrote another Django article recently on its usage of import strings: https://devel.tech/tips/n/djms3tTe/how-django-uses-deferred-...
1. Internalizing core objects, like the Customer, Card, Tokens, and Source. And Plans / Subscriptions. Card/Source can feel ambiguous, since the API lookups are similar.
2. Order for creating / pulling up some objects. Customer's can attach a source upon creation, but can also attach it later. But you can't just look up all cards - you retrieve a card by looking up the customer first.
This helps later on if your user wants to update their billing info. Think about it: You pull up the customer first. Then a customer has cards they can delete, update, or add.
Plans must be created before subscriptions. That's another huge favor. Because on your front end, you can have the user switch between plans and have a consistent selection site-wide. Rather than just declaring an arbitrary price.
3. Understanding the difference between stripe.createSource (a reusable billing object) and stripe.createToken (a temporary billing object) [1]
4. Getting effective coverage in billing systems. Requires a ton of mocks. In order to simulate the responses to create the mocks, you have to play with the test API to get the desired outputs. The docs don't give you that.
In fact, stripe-mock [2] doesn't give you all the possible scenarios. So there's going to be a lot of time spent "bullet proofing" a subscription system. Especially if it's self-service.
I'd estimate it took about 1.5 months to get it fully working when I did it at a startup. The second time around, it's taking more time since I want to be able reusable enough to use on other websites / clients. Maybe 2-2.5 months.
[1] https://stripe.com/docs/sources/cards#create-source [2] https://github.com/stripe/stripe-mock
I volunteer as a sysadmin for wengu (http://wengu.tartarie.com/wg/wengu.php). We cover some of the Chinese Classics.
In the coming years, I intend to redo wengu in sphinx-doc + reStructuredText and make them available in a updated website and generated PDF's. There may be some copyright issues with Wilhelm's Yi Jing translation, though. I think there's still a few years left.
I also am creating a spiritual successor to Christoph Burgmer's cjklib (https://github.com/cburgmer/cjklib). It's called cihai, you can find it at https://cihai.git-pull.com.
There is a ticket open for building an abstraction layer @ https://github.com/aseprite/aseprite/issues/139
In terms of Aseprite:
> > But what made it the choice over Allegro 5, SFML, and SDL2?
> through all these years I reached to the conclusion that you need full control of mouse and keyboard messages (and all window messages in particular, e.g. to give proper support to pen/stylus). [1]
[1] https://github.com/aseprite/aseprite/issues/139#issuecomment...
At Social Amp (2012), I was making cross domain single-page applications for sites like 1-800-Flowers, where we had to support back to IE6, but, since a tag was missing from the main website, we had to do some hacks to "shore up" IE6 so the padding would be there.
It's feasible to have some pretty sweet JS (backbone.js, easyxdm) on IE6. The limitation came from the engine's performance, stylesheet and js caps, and really strict rules on, dangling commas (memory is a bit fuzzy in which instances, but it'd crash our whole script). In some cases, there'd be no errors, and it'd just freeze it.
[1] https://en.wikipedia.org/wiki/Internet_Explorer_box_model_bu...