# ANN: FemtoCleaner, our newest robot intern

**URL:** https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340
**Category:** Community
**Tags:** announcement, femtocleaner
**Created:** [August 11, 2017, 11:10pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340 "2017-08-11T23:10:30Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)
#### Post date: [August 11, 2017, 11:10pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/1 "2017-08-11T23:10:30Z")

</div>

All,

please welcome [femtocleaner[bot]](https://github.com/JuliaComputing/FemtoCleaner.jl), the Julia community’s newest robot intern, joining the ranks of attobot and nanosoldier. Over the past two weeks it’s learned a lot about how to upgrade julia code from old versions to newer ones. Some examples:

- [JuliaStats/Distributions.jl](https://github.com/JuliaStats/Distributions.jl/pull/649)
- [JuliaComputing/IndexedTables.jl](https://github.com/JuliaComputing/IndexedTables.jl/pull/73)
- [JuliaComputing/JuliaDB.jl](https://github.com/JuliaComputing/JuliaDB.jl/pull/73)

Some highlights of the kinds of things it knows how to do:

- Remove `@compat` from syntax that no longer requires it
- Fix code for the parametric type change `f{T}(x::T)` → `f(x::T) where T`
- Remove obsolete `VERSION` checks

It’ll read your package’s REQUIRE file to figure out which changes it’s allowed to do. That’ll happen the first time you install it and then every time you update `REQUIRE`. The full user manual is available on the bot’s [GitHub page](https://github.com/JuliaComputing/FemtoCleaner.jl).

Please pay particular attention to the `bad bot` command, which you can use to report any instances of incorrect behavior. While we’ve done some alpha testing, you should still consider this beta-quality software, so there may be bugs. If you do encounter a bug, just report it and leave the pull request open. Once the bug has been addressed, the bot will push a new commit with the (hopefully) correct changes and leave a comment to let you know it did that.

The installation flow for the bot will be familiar to all those who have used attobot before. To get started, simply go to [https://github.com/apps/femtocleaner](https://github.com/apps/femtocleaner). I should note that the majority of the functionality in femtocleaner is designed to help with the `0.5->0.6` or later transition, so if your REQUIRE still claims support for a pre-0.6 version of julia (e.g. `0.5` or `0.6-`), you will not get the full range of changes.

Lastly, I have some acknowledgements to make:

1. First, the Sloan foundation whose [recent grant to Julia Computing](https://juliacomputing.com/press/2017/06/26/sloan-grant.html) funded this work.
2. Julia Computing for hosting the publicly available instance
3. @ararslan For testing the alpha version of this and reporting a large number of issues
4. @ZacLN for his work on CSTParser, which I leverage heavily in this work
5. @jrevels for reviewing all my PRs to GitHub.jl

I hope you will find this useful.

---

<div class="post-metadata">

### Author: ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)
#### Post date: [August 12, 2017, 7:51am UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/2 "2017-08-12T07:51:05Z")

</div>

Great stuff!

Is there some kind of status page or queue somewhere? Sometimes it’s good to keep an eye on our robot underling’s activities, e.g. whether your job’s been accepted or delayed, or if github went down and it didn’t restart, etc…

---

<div class="post-metadata">

### Author: ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)
#### Post date: [August 12, 2017, 4:14pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/3 "2017-08-12T16:14:18Z")

</div>

I have a GitHub-provided status page to get a general overview, but it’s not suitable for general consumption, because it may include authentication secrets, etc. I’ll think about hooking something up here. That said, something broke last night and GitHub stopped accepting the bot’s requests. I’ll look into it, but if you submitted a request in the past 10 or so hours, it got stuck and will be re-delivered soon.

---

<div class="post-metadata">

### Author: ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)
#### Post date: [August 12, 2017, 6:34pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/4 "2017-08-12T18:34:33Z")

</div>

I think I’ve worked through the queue and everyone who wanted the bot has gotten it now. If you think the bot should have stopped by your repo, but didn’t, please let me know.

---

<div class="post-metadata">

### Author: ![essenciary](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/essenciary/32/210469_2.png) [@essenciary](https://discourse.julialang.org/u/essenciary)
#### Post date: [August 13, 2017, 11:57am UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/5 "2017-08-13T11:57:31Z")

</div>

@Keno Any plans for the Upgrade-Bot-Fairy to visit [https://github.com/Keno/AbstractTrees.jl](https://github.com/Keno/AbstractTrees.jl) ? 😝

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [August 13, 2017, 12:20pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/6 "2017-08-13T12:20:29Z")

</div>

I think it is enough for the tag troll to visit that one.

---

<div class="post-metadata">

### Author: ![viralbshah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/viralbshah/32/54_2.png) [@viralbshah](https://discourse.julialang.org/u/viralbshah)
#### Post date: [August 14, 2017, 7:25pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/7 "2017-08-14T19:25:24Z")

</div>



---

<div class="post-metadata">

### Author: ![leethargo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leethargo/32/6004_2.png) [@leethargo](https://discourse.julialang.org/u/leethargo)
#### Post date: [August 15, 2017, 3:08pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/8 "2017-08-15T15:08:39Z")

</div>

Is there a way to trigger FemtoCleaner to run again within the same pull request?

For example, I configured FemtoCleaner on a clone of SIUnits.jl and it created a [PR with only minimal changes](https://github.com/leethargo/SIUnits.jl/pull/1). Then I pushed some changes to `REQUIRE` on that same branch, hoping that FemtoCleaner would run again, but it seems like it only watches the `REQUIRE` file on `master`?

EDIT: actually, it seems like FemtoCleaner _does_ get triggered but then just pushes the same first commit on the branch, removing my commit.

---

<div class="post-metadata">

### Author: ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)
#### Post date: [August 18, 2017, 9:29pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/9 "2017-08-18T21:29:30Z")

</div>

I wrote a blogpost about this, which has some additional data and results:  
[https://juliacomputing.com/blog/2017/08/17/femtocleaner.html](https://juliacomputing.com/blog/2017/08/17/femtocleaner.html)

---

<div class="post-metadata">

### Author: ![viralbshah](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/viralbshah/32/54_2.png) [@viralbshah](https://discourse.julialang.org/u/viralbshah)
#### Post date: [August 22, 2017, 12:49pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/10 "2017-08-22T12:49:43Z")

</div>



---

<div class="post-metadata">

### Author: ![Diego\_Javier\_Zea](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diego_javier_zea/32/1858_2.png) [@Diego\_Javier\_Zea](https://discourse.julialang.org/u/Diego_Javier_Zea)
#### Post date: [October 7, 2017, 12:58am UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/11 "2017-10-07T00:58:51Z")

</div>

Is femtocleaner working?  
I successfully used it a couple of days ago in a package: [https://github.com/diegozea/PairwiseListMatrices.jl/pull/8](https://github.com/diegozea/PairwiseListMatrices.jl/pull/8).  
But It’s not working right now on this one: [https://github.com/diegozea/MIToS.jl/issues/36](https://github.com/diegozea/MIToS.jl/issues/36)

---

<div class="post-metadata">

### Author: ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)
#### Post date: [October 8, 2017, 12:21am UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/12 "2017-10-08T00:21:36Z")

</div>

Sorry about that. After some time of operation, it seems to start complaining about lack of entropy for TLS operations. Will have to investigate that. I’ve restarted it for now.

---

<div class="post-metadata">

### Author: ![Diego\_Javier\_Zea](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diego_javier_zea/32/1858_2.png) [@Diego\_Javier\_Zea](https://discourse.julialang.org/u/Diego_Javier_Zea)
#### Post date: [October 8, 2017, 2:59pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/13 "2017-10-08T14:59:07Z")

</div>

Thanks! It has worked well on my package [https://github.com/diegozea/MIToS.jl/pull/37](https://github.com/diegozea/MIToS.jl/pull/37)

---

<div class="post-metadata">

### Author: ![klowrey](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/klowrey/32/2266_2.png) [@klowrey](https://discourse.julialang.org/u/klowrey)
#### Post date: [October 25, 2017, 5:52pm UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/14 "2017-10-25T17:52:54Z")

</div>

I seem to be missing something as I can’t trigger FemtoCleaner to run: I tried making a release as well as a “Run femtocleaner” issue. There isn’t a reason for me to change the REQUIRE, so is there another way to trigger it? This is my repository: [GitHub - klowrey/MuJoCo.jl: Julia wrapper for the MuJoCo Physics Engine](https://github.com/klowrey/MuJoCo.jl)

---

<div class="post-metadata">

### Author: ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)
#### Post date: [October 26, 2017, 2:50am UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/15 "2017-10-26T02:50:18Z")

</div>

Femtocleaner has been having some trouble recently (first it kept running out of entropy, and then it hit a bug on some packages that caused it to fix deprecations in an infinite loop). @kristoffer.carlsson is looking into out. Sorry for the inconvenience.

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [October 26, 2017, 3:43am UTC](https://discourse.julialang.org/t/ann-femtocleaner-our-newest-robot-intern/5340/16 "2017-10-26T03:43:13Z")

</div>

There is a bug in the version of CSTParser that FemtoCleaner uses which causes it to hang in certain situations. It is fixed in a new version of CSTParser, however, since CSTParser does not have an official API, upgrading FemtoCleaner is proving quite challenging since many assumptions about the internals of CSTParser are no longer true.

A quick fix that I will try to do tomorrow is to backport the fix to CSTParser to the version Femtocleaner supports.  
Hopefully, this should make it run again.
