Feat/openapi docs

Replace the custom made api documentation generation method with OpenAPI-compatible schema generation from router JOI types

Looks good 👍
Currently on rest.ts we have:

Looks good 👍
On rest.ts we have:
if (config.COMMON_ENV !== 'prod') {
  restMiddlewares.push(apiDocRouter.middleware());
}

And on graphql.ts we have:
  introspection: ['local', 'dev', 'test'].includes(config.COMMON_ENV || ''),
  playground: ['local', 'dev', 'test'].includes(config.COMMON_ENV || '')

We should unify these. [ 'local' ] would be a safe default as this way you don't make docs/introspection and playground public by accident, but you need to intentionally enable them for each environment. Maybe we should have environment variables API_DOCS_ENABLED: true and API_PLAYGROUND_ENABLED: true; enabled on docker-compose.yaml by default, and on helm-dev.yaml like this:
full-stack:
  services:
    server:
      env:
        # Enable if API docs and playground required on dev.
        # API_DOCS_ENABLED: true
        # API_PLAYGROUND_ENABLED: true

Maybe we should have environment variables API_DOCS_ENABLED: true and API_PLAYGROUND_ENABLED: true; enabled on docker-compose.yaml by default, and on helm-dev.yaml like this:

I'd say that sounds wise. Will do


Fitting model/class for anisotropic diffusion in the x and y directions

Add a new fitting model/class that allows for anisotropic Gaussian-shaped diffusion along the x and y directions of the images. This is an extension of the GaussianFit where the x and y directions are uncoupled and fit separately with their own Gaussian functions (their own gamma values), and the overall signal is the product of these functions.

Added in PR https://github.com/NTBEL/diffusion-fit/pull/10


How to replace the docker-image resource when it is non-functioning?

I'm trying to install concourse using the binaries on ubuntu 16.04. It appears that on this version, both garden-linux and docker default to using overlayfs as their graph storage engine. Thus, the docker-image resource, running inside a garden container with an overlayfs root, tries to start the docker daemon with an overlayfs graph engine. This doesn't work - attempting to create a container errors with the following:
Step 1 : FROM docker.au.s522.net/centos-ruby
latest: Pulling from centos-ruby
(snip)
Digest: sha256:90e27d70f754556d6d2c0cc1f599a6ea7e0ae6a67d4e7abcb346bfa183ccb0a1
Status: Downloaded newer image for docker.au.s522.net/centos-ruby:latest
 ---> 42df1196e49a
Step 2 : WORKDIR /app
invalid argument
umount: can't unmount /var/lib/docker: Invalid argument

I guess this works on ubuntu 14.04 because it uses aufs instead of overlayfs. This is fine, because I don't really want to do this anyway - the performance of running two union filesystems inside each other is pretty horrific and makes my builds super slow.
What I actually want to do is mount a btrfs scratch volume inside the garden container, and start the docker daemon with that. It doesn't look like concourse exposes any way to bind directories from the worker host into the worker container (or does it? I'd love to be wrong), so you can't just bind-mount a btrfs directory via pipeline configuration.
Thankfully, garden-linux doesn't do a particularly great job at isolation, and seems to create containers without user namespace isolation, and with CAP_SYS_ADMIN enabled inside the container. I was able to hack up a version of the docker-image resource that basically did the following (in common.sh)
start_docker() {
  # <snip>
  # Mount the btrfs scratch volume from the host onto /var/lib/docker
  # This makes building containers f-a-s-t :)
  # First, break out of our jail by remounting devtmpfs and using that
  # to mount the underlying btrfs voluume
  mkdir /real_dev
  mkdir /scratch_volume
  mount -t devtmpfs devfmpfs /real_dev
  mount -t btrfs /real_dev/disk/by-label/scratch /scratch_volume
  # Make a unique name so we don't conflict with other dockers running
  # on the same host.
  # The mount namespace inode should do nicely :)
  NAMESPACE_INODE=$(readlink /proc/1/ns/mnt | sed 's/mnt://')
  mkdir "/scratch_volume/$NAMESPACE_INODE"
  # Bind it to /var/lib/docker
  mount --bind "/scratch_volume/$NAMESPACE_INODE" /var/lib/docker
  # and undo the damage
  umount /real_dev
  umount /scratch_volume

  server_args="${server_args} -s btrfs"
  docker daemon ${server_args} >/tmp/docker.log 2>&1 &
  # <snip>
}

This actually seemed to work (while I was hacking inside a fly hijack session). We remount the real /dev directory (which we can, because of CAP_SYS_ADMIN) and use it to get raw access to a block device to run the docker graph engine on. (By-the-by, I'd love to work out a way to expose the host docker socket inside the worker - it's not actually on the host root volume because /var/run is mounted as tmpfs. Any ideas?)
Unfortunately, I'm at my wits end on how to actually deploy this to my concourse server. All the documentation I've read deals with adding resource types using the docker-image resource, but of course, my docker-image resource is at the moment totally nonfunctional. I created a tarball with a /rootfs and metadata.json file and uploaded it to S3, thinking to do something like this:
resource_types:
  - name: docker-image
    type: s3
    source:
      access_key_id: <snip>
      secret_access_key: <snip>
      region_name: ap-southeast-2
      bucket: <snip>
      versioned_file: ci-docker-image-resource.tar

Whilst that downloads the tar file, it doesn't extract it to the output directory, so concourse just complains with "could not read file from tar" (presumably because concourse tarballed up the out directory of the s3 resource, which now contains a tarball, instead of a rootfs and metadata.json).
I'm completely out of ideas at this point. My next step is probably to start hacking at the worker code to try and use a resource off the host filesystem, but I'd really like to avoid that level of violence. I don't mind forking all the resources, but forking the ATC is probably a bit too far...
TL;DR: I have a tarball of the docker-image resource I want to use. How can I replace the existing docker-image resource, given that it is non-functional?

You could have the worker advertise a new resource type, just as it advertises the core set. But at some level resource_types just can't work if there's no resource it can use to provide new ones.
I'm betting this is resolved by now though since we don't even use garden-linux or overlayfs anymore.


fixing async tests

R: @jeffposnick
Fixes #484
Two of the async tests did not returned the promise back, which was failing the assertion.

The changes look okay—just to confirm, though, there are still some errors logged in the console when running the modified code. Are they to be expected/safe to ignore?

@jeffposnick most of them yes!
I've added dummy calls which does not even support Cross domain XHR. Although adding them immediately fires the call and causes some errors.
Ill revisit to minimize these, however its cool if they stay for a while


[Event Hubs & AMQP Python] Receive performance analysis

Link credit (prefetch):

300 (default) vs 5000 vs 20000 (extreme large value)

validate link credit is working first

Message:

large (e.g. over 100kb per message) vs small (100b per message)

Partition:

single vs all

Event Hub:

basic tier vs standard tier
through put unit 1 vs 40 allowed

Threading:

single vs multiple

Resource region:

vm/eh source in same region (e.g. both in US) vs in remote region (e.g. one in Europe and the other in US)

error when receiving messages of size 16:
EventProcessor instance 'c6ce75d5-4989-4a04-bb63-c404cf5cc7dd' of eventhub 'swathip-test-eventhub' partition '0' consumer group '$Default'. An error occurred while receiving. The exception is TypeError('isinstance() arg 2 must be a type or tuple of types',).
Traceback (most recent call last):
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_consumer.py", line 223, in receive
    max_batch_size=max_batch_size
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/client.py", line 635, in receive_message_batch
    receiving = self.do_work(batch=max_batch_size)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/client.py", line 283, in do_work
    return self._client_run(**kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/client.py", line 569, in _client_run
    self._connection.listen(wait=self._socket_timeout, **kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_connection.py", line 553, in listen
    new_frame = self._read_frame(wait=wait, **kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_connection.py", line 183, in _read_frame
    return self._transport.receive_frame(**kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_transport.py", line 410, in receive_frame
    header, channel, payload = self.read(**kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_transport.py", line 363, in read
    read_frame_buffer.write(read(8, buffer=frame_header, initial=True))
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_transport.py", line 535, in _read
    nbytes = self.sock.recv_into(view[length:])
  File "/usr/lib/python3.6/ssl.py", line 1012, in recv_into
    return self.read(nbytes, buffer)
  File "/usr/lib/python3.6/ssl.py", line 874, in read
    return self._sslobj.read(len, buffer)
  File "/usr/lib/python3.6/ssl.py", line 631, in read
    v = self._sslobj.read(len, buffer)
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_eventprocessor/event_processor.py", line 331, in _do_receive
    consumer.receive(self._batch, self._max_batch_size, self._max_wait_time)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_consumer.py", line 232, in receive
    isinstance(exception, errors.LinkErrorCondition.DetachForced)
TypeError: isinstance() arg 2 must be a type or tuple of types

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "sync_receive.py", line 97, in <module>
    test_receive_fixed_amount()
  File "sync_receive.py", line 83, in test_receive_fixed_amount
    starting_position="-1"
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_consumer_client.py", line 413, in receive
    self._receive(on_event, batch=False, max_batch_size=1, **kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_consumer_client.py", line 328, in _receive
    event_processor.start()
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_eventprocessor/event_processor.py", line 367, in start
    self._do_receive(partition_id, consumer)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_eventprocessor/event_processor.py", line 344, in _do_receive
    partition_id, consumer, CloseReason.OWNERSHIP_LOST
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_eventprocessor/event_processor.py", line 295, in _close_consumer
    consumer.close()
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_client_base.py", line 584, in close
    self._close_handler()
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/_client_base.py", line 530, in _close_handler
    self._handler.close()  # close the link (sharing connection) or connection (not sharing)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/client.py", line 231, in close
    self._link.detach(close=True)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/link.py", line 242, in detach
    self._outgoing_detach(close=close, error=error)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/link.py", line 206, in _outgoing_detach
    self._session._outgoing_detach(detach_frame)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/session.py", line 297, in _outgoing_detach
    self._connection._process_outgoing_frame(self.channel, frame)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_connection.py", line 479, in _process_outgoing_frame
    self._send_frame(channel, frame)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_connection.py", line 211, in _send_frame
    self._transport.send_frame(channel, frame, **kwargs)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_transport.py", line 428, in send_frame
    self.write(data)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_transport.py", line 400, in write
    self._write(s)
  File "/home/swathip/test-env36/lib/python3.6/site-packages/azure/eventhub/pyamqp/_transport.py", line 563, in _write
    n = write(s)
  File "/usr/lib/python3.6/ssl.py", line 944, in send
    return self._sslobj.write(data)
  File "/usr/lib/python3.6/ssl.py", line 642, in write
    return self._sslobj.write(data)
BrokenPipeError: [Errno 32] Broken pipe

https://microsoft.sharepoint.com/teams/AzureDeveloperExperience/_layouts/OneNote.aspx?id=%2Fteams%2FAzureDeveloperExperience%2FShared Documents%2FLanguage - Python%2FAzure SDK - Language - Python&wd=target(Services.one|7EDF4D8F-3CF7-4200-BCD2-567D6A7E429C%2FSync Receive - perf test|E3DFCB05-9B3B-4675-A0FF-008F133DC5BD%2F)
onenote:https://microsoft.sharepoint.com/teams/AzureDeveloperExperience/Shared Documents/Language - Python/Azure SDK - Language - Python/Services.one#Sync Receive - perf test&section-id={7EDF4D8F-3CF7-4200-BCD2-567D6A7E429C}&page-id={E3DFCB05-9B3B-4675-A0FF-008F133DC5BD}&end


Increase Test Coverage

This PR fixes broken tests and adds additional tests to increase coverage

Unsure how to test these:


Request for spefic use case documentation

I would like to setup PonyMail for my company infrastructure.
We have several mailing lists managed by Mailman 2.1 on Ubuntu 14.0.4 LTS; some of them have private archives, other are public.
Would it be possible to provide more detailed setup instructions for a use case as the one above?
I have attempted following the Ubuntu setup instructions and then the general instructions but could not figure out how to:

configure Mailman 2.1 (examples for Mailman 3 are provided)
index existing Mailman (public and private) archives

Thanks in advance, PonyMail rocks!

Quick update: importing via pipermail seems to work fine; got long output ending with
All done! 3765 records inserted/updated after 0 seconds. 0 records were bad and ignored

However, right after importing (but still without configuring the archiver yet), while accessing the ponymail site I receive a couple of errors:

404'ed: /api/pminfo.lua
404'ed: /api/preferences.lua?detailed=true

Any hint?
Thanks!

import-mbox and archiver both use the same ID generator, which generates a unique ID per email - that is to say, running it twice on the same email or mbox file will generate the same ID, so if you run import-mbox every 5 minutes or whatever, it'll just update what's already there, and not create duplicates (IOW, it's totally fine to do that, just remember to use --private where needed).
As for the 404, Pony Mail expects to be at the root of a (sub)domain - this is due to some non-javascript fallbacks that exist for older web clients (or lynx). Thus, http://foo.tld/api/[...].lua will work, but http://foo.tld/ponymail/[...].lua won't work currently because of this design choice.
I'll look into writing a workaround shortly, which will imply that you can't use the site unless you have JavaScript enabled. This will be an optional feature in config.js

580f1e82a018c3cc32e50f6d26e3866a39078b29 should address this - go to your config.js, and inside the pm_config hash, add: URLBase: '/yoursubdir' to it and it should work.

FWIW, I have a few lists that are imported "live" from pipermail, such as the bitcoin ML. I just have import-mbox running on a cron timer, and it works well. Another option is to subscribe a new mail address to the lists, and have that mail address feed to the archiver, which is what you'd normally do in many cases.

I'll also suggest maybe joining #ponymail on Freenode for some of the more menial debugging, as it's probably a better way of communicating about that.

Yep, thanks, I'm closing this issue and switching to IRC.


deprecation warning on start

fix «config.paths.app.controller API is deprecated» warning

Someone can accept the pull request please?

Hello guys. Sorry for interrupting.
I build gem, which based on yours, but integrate into it web and remove rails 2 support (and add some needed features for me). Here this gem - http://mongodb-logger.catware.org/
But what I want to tell for you. Such code return not file, but folder in rails 3.0.x:

((app_config.paths['log'] rescue nil) || app_config.paths.log.to_a).first
=> ".../test_rails/log"

And such thing rails exception, because rails try to write into dir "log". Here:
1.9.3p0 :004 > app_config.paths['log'].first
=> "/Users/leo/programs/projects/rails_cucumber/log"
1.9.3p0 :005 > app_config.paths.log.to_a.first
=> "/Users/leo/programs/projects/rails_cucumber/log/development.log"
I found now only one way to fix this:
https://github.com/le0pard/mongodb_logger/blob/master/lib/mongodb_logger/initializer_mixin.rb#L9
I found such things, because I cover my gem to test on all rails versions, and on such things tests fails (On CI I testing only major versions of rails - http://travis-ci.org/#!/le0pard/mongodb_logger). So you need improve this.
Best Regards, Alexey

@le0pard I will take a look. I am currently upgrading the gem to work with rails 3.1.3.


Verify-Links script should detect broken links on redirect

See https://github.com/Azure/azure-sdk-for-c/issues/1101. There was a page redirect that was broken. We should consider options to see if we can detect and report these as broken links.

Based on the testing, the Invoke-WebRequest actually returns us status code of 200. We have to parse html to get the redirect link. For the link-verification scripts, it is responsible to report the error status code. If the link is still able to redirect you to the right link with 200 status code. We treat it as valid case for now.
Closed the issue and feel free to reopen this if anything unaddressed.


[t8s-cluster] cannot delete compute plane

When deleting a compute-plane, the first time fails as the ClusterClass still requires the class to exist as the CAPI cluster still needs it before the t8s-engine-operator updates the CAPI cluster
The second reconciliation works tho.
So we kinda have to have static classes that are more CAPI-templated 🤮

This would most likely result in us needing to drop most of the individual settings, like nodeDrainTimeout and sshKeyName
But seeing as we want to move away from snowflake clusters, I'm in favour of this.
The rest of the individual settings would be the securityGroups, which can also be inlined and just applied to all compute / control plane nodes, and the flavor but that can be applied via a patch


Onboarding Request: PSA (new shiny version)

Active Development
Yes
Tool name
Productivity and Susceptibility Analysis
Tool abbreviation
PSA
Author(s)
Nathan Vaughan, Jason Cope
NOAA Internal
Yes
Maintainer Name
Nathan Vaughan
Maintainer Email
<EMAIL_ADDRESS>Background Text
Productivity-Susceptibility Analysis (PSA) is a semi-quantitative and rapid risk assessment approach described by Patrick et al (2009) that relies on the life history characteristics of a stock (i.e., productivity) and its susceptibility to the fishery in question to estimate its expected vulnerability to depletion. First used to classify differences in bycatch sustainability in the Australian prawn fishery in 2001, this assessment has a long history of use in evaluating fisheries and is recommended by several organizations and work groups as a reasonable approach for determining risk. The productivity and susceptibility of a stock is determined using scores ranging from 1 (low) to 3 (high) for a standardized set of attributes related to each index (productivity = 10; susceptibility = 12). When scoring these attributes, the original Patrick et al approach utilized a single score value, data quality rating, and relative weight for each attribute which were combined to calculate single productivity and susceptibility values for each species. Productivity and susceptibility are used to calculate a single vulnerability score for each stock (vulnerability=sqrt((3-productivity)^2 +(susceptibility-1)^2)). Stocks that receive a low productivity score and high susceptibility score are considered to be at a high risk of becoming depleted, while stocks with a high productivity score and low susceptibility score are considered to be at a low risk of becoming depleted. This tool is an R-Shiny application developed to perform a stochastic Productivity-Susceptability risk analysis. It extends the existing methodology of Patrick et al (2009) by providing the ability to assign a relative weight to each score for each attribute rather than a single value. Bootstrap resampling of scores based on their relative weights is used to define productivity, susceptibility, and vulnerability likelihood distributions. This alternate methodology and shiny application were developed by Dr Nathan Vaughan of Vaughan Analytics supporting NOAA's Southeast Fisheries Science Center in collaboration with Dr Jason Cope of NOAA's Northwest Fisheries Science Center.
Citation
https://github.com/nathanvaughan1/PSA
References
No response
Associated Tools
No response
User Organizations
No response
Online App Link
https://connect.fisheries.noaa.gov/connect/#/apps/b86f06f4-8ee6-43ea-82a6-c04a0de3a074/access
Executable Link
No response
Website Link
No response
Documentation Link
No response
Source Code Link
https://github.com/nathanvaughan1/PSA
PDF Download Link
No response
Software Badges
No response
Toolbox Drawers

[ ] Ecosystems
[x] Fish and Fisheries
[x] Human Dimensions
[ ] Protected Species
[ ] General Modeling and Productivity Tools

Keywords

[ ] ADMB
[ ] Age Structured Model
[ ] Bayesian Modeling
[ ] Bycatch
[ ] C++
[ ] Calculator
[ ] Data Exploration
[x] Data Limited Method
[ ] Data Visualization
[x] Decision Support Tool
[ ] Developer Utilities
[ ] Economics
[ ] Ecosystem
[ ] Ensemble Modeling
[ ] Fish Biology
[x] Fisheries
[ ] Gradient Solver
[ ] Guided User Interface
[ ] Individual Based Model
[ ] Legacy Tool
[ ] Length Structured Model
[ ] Management Strategy Evaluation
[ ] Marine Mammals
[ ] Maximum Likelihood Estimation
[ ] Model Builder
[ ] Model Comparision
[ ] Multispecies Model
[ ] Natural Mortality Model
[ ] NOAA Branding
[ ] North Pacific
[ ] Output Visualization
[ ] Projection Modeling
[ ] R Package
[ ] Reference Points Model
[x] Risk Assessment Tool
[ ] Salmon
[ ] Sampling Decision Tool
[x] Shiny
[ ] Simulation
[ ] Size Spectra Model
[ ] Size Structured Model
[ ] Socioeconomics
[ ] Spatial Model
[ ] Species Distribution Model
[ ] Standardized Reporting
[ ] Stock Assessment Model
[ ] Stock Assessment Projections
[ ] Stock Assessment Tool
[ ] Surplus Production Model
[ ] Tag Data Model
[ ] Teaching Tool
[ ] Time Series
[ ] TMB
[ ] User Utilities
[ ] Virtual Population Analysis
[ ] Visualization
[x] Web App

Uses Github Releases
Yes
Static version number
No response
Comments
I don't have a reference for the tool, I just added the github link to make the submit issue button happy.  I can do the Zenodo reference you mention if you show me how :)
Code of Conduct

[X] I agree to follow the FIT's Code of Conduct

Automatically generated JSON for the onboarding request:
{
  "active_development": true,
  "tool_name": "Productivity and Susceptibility Analysis",
  "tool_abbreviation": "PSA",
  "authors": "Nathan Vaughan, Jason Cope",
  "noaa_internal": true,
  "maintainer_name": "Nathan Vaughan",
  "maintainer_email"<EMAIL_ADDRESS>  "background_text": "Productivity-Susceptibility Analysis (PSA) is a semi-quantitative and rapid risk assessment approach described by Patrick et al (2009) that relies on the life history characteristics of a stock (i.e., productivity) and its susceptibility to the fishery in question to estimate its expected vulnerability to depletion. First used to classify differences in bycatch sustainability in the Australian prawn fishery in 2001, this assessment has a long history of use in evaluating fisheries and is recommended by several organizations and work groups as a reasonable approach for determining risk. The productivity and susceptibility of a stock is determined using scores ranging from 1 (low) to 3 (high) for a standardized set of attributes related to each index (productivity = 10; susceptibility = 12). When scoring these attributes, the original Patrick et al approach utilized a single score value, data quality rating, and relative weight for each attribute which were combined to calculate single productivity and susceptibility values for each species. Productivity and susceptibility are used to calculate a single vulnerability score for each stock (vulnerability=sqrt((3-productivity)^2 +(susceptibility-1)^2)). Stocks that receive a low productivity score and high susceptibility score are considered to be at a high risk of becoming depleted, while stocks with a high productivity score and low susceptibility score are considered to be at a low risk of becoming depleted. This tool is an R-Shiny application developed to perform a stochastic Productivity-Susceptability risk analysis. It extends the existing methodology of Patrick et al (2009) by providing the ability to assign a relative weight to each score for each attribute rather than a single value. Bootstrap resampling of scores based on their relative weights is used to define productivity, susceptibility, and vulnerability likelihood distributions. This alternate methodology and shiny application were developed by Dr Nathan Vaughan of Vaughan Analytics supporting NOAA's Southeast Fisheries Science Center in collaboration with Dr Jason Cope of NOAA's Northwest Fisheries Science Center. ",
  "citation": "https://github.com/nathanvaughan1/PSA",
  "online_app_link": "https://connect.fisheries.noaa.gov/connect/#/apps/b86f06f4-8ee6-43ea-82a6-c04a0de3a074/access",
  "source_code_link": "https://github.com/nathanvaughan1/PSA",
  "uses_github_releases": true
}

@nathanvaughan-NOAA, thanks! Could you check off any toolbox drawers or up to 5 keywords that are appropriate for the tool? I added a few, but I can remove them.
In the meantime, here is a preview of the page: https://noaa-fisheries-integrated-toolbox.github.io/fit-dev/PSA Let me know if you would like to change anything.

@shcaba feel free to provide feedback on the preview if you have time (no worries if not): https://noaa-fisheries-integrated-toolbox.github.io/fit-dev/PSA

@k-doering-NOAA  weird I checked a bunch of those when I created the issue but they have disappeared. I did get bumped to the Zendo page and then clicked back to the submission so maybe that erased them and I didn't notice.

Hmm, interesting! I can see them now, though, so I'll add them, thanks for rechecking.

@k-doering-NOAA also looks like it reset the GitHub releases option to yes which should have been a no.

Yep, I just reselected them.

Ok, fixed the github releases one - sorry for the hiccup with the form, it hasn't gotten a lot of use yet, so I'm open to suggestions if you found anything else to not be working.
The webpage should have the keywords now https://noaa-fisheries-integrated-toolbox.github.io/fit-dev/PSA
Let me know if it looks good or needs changes.

Thanks @k-doering-NOAA that looks good to me.

Thanks @k-doering-NOAA I knew that is what they were supposed to be like but I had forgotten how to make those links for the connect apps. Also, I don't think there was anything wrong with the issue form it was just me leaving the page and then using the browser back button. I assumed it would delete everything I had written but when it kept the text inputs I didn't look further and notice that the tabs and radio buttons had reset.

Ah, I see! Maybe I should put a note in the form.
Also, see this for the vanity URLS: https://docs.posit.co/connect/admin/content-management/#vanity-paths

Hi Kathryn-- the preview looks good to me. Thank you!


 I'm following the official example but now facing some issues with signout() method.

I'm successfully singing up with Google provider.

// pages/login.ts

const LoginPage = () => {
  const [session, loading] = useSession();
  return session ? (
    <button onClick={signout}>Sign out</button>
  ) : (
    <button onClick={() => signin('google')}>Sign in with Google</button>
  );
};

Then trying to sign out after redirecting to http://localhost:3000/api/auth/signout and submitting Sign Out button I'm getting the following error: Cannot POST /api/auth/signout:

My [...nextauth].ts file:
// pages/api/auth/[...nextauth].ts

import NextAuth from 'next-auth';
import Providers from 'next-auth/providers';

const options = {
  site: 'http://localhost:3000',
  providers: [
    Providers.Google({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
};

export default (req, res) => NextAuth(req, res, options);

Documentation feedback

[x] Found the documentation helpful
[x] Found documentation but was incomplete
[ ] Could not find relevant documentation
[x] Found the example project helpful
[ ] Did not find the example project helpful

I think this message may be coming from another service or a proxy - I sometimes run into something similar when I have left something else running I've forgotten about. This isn't a message that comes from NextAuth.js.
The only error that is similar in NextAuth.js is Error: HTTP POST is not supported.

@loonskai , It appears to be an error when the express server does not have a handler for processing your post request. Are you using expressjs ?
If yes, then check if your catch all route is like
server.all('*', (req, res) => {
return handle(req, res)
})
not like
server.get('', (req, res) => {
return handle(req, res)
})
You can also add handlers for http methods you want instead of adding it for all
like
server.get('', (req, res) => {
return handle(req, res)
})
server.post('*', (req, res) => {
return handle(req, res)
})

@ranjithvikram Cheers! I would have spent some time digging into the cause if you wouldn't post the reply.


@swc/plugin-styled-components: displayName not showing when importing from .js file in React

Description of problem
displayName is not displayed when importing styled-component from .js file in React, although there is no such problem when importing from .jsx.

I initially created an issue in the @swc/plugin-styled-components repository (https://github.com/swc-project/plugins/issues/335), but the author responded with the following:

I think this is a bug of vite-plugin-swc. SWC transforms has nothing to do with file extensions

Steps to reproduce

git clone https://github.com/rakleed/styled-test-swc
npm install && npm run dev
Open DevTools and look at div with text styled-test-swc

However, there is no such problem with babel-plugin-styled-components. To check this, you can comment out lines 1 and 7 and uncomment lines 2 and 8 in the vite.config.js file.
Screenshots
Screenshot with @swc/plugin-styled-components:

Screenshot with babel-plugin-styled-components:

Minimal reproduction
https://github.com/rakleed/styled-test-swc

This is by design: https://github.com/vitejs/vite-plugin-react-swc#:~:text=JS files are not transformed
We discouraged using JS extension for JSX. Here this is obviously a edge case because this is actually valid JS.
I think using .jsx for this case is fine, but my recommendation would be to move to .ts.
You can also use parserConfig option, but this is not recommended and you need to be sure to exclude node_modules


Consider supporting multiple communication protocols concurrently

This will require a protocol identifier at start of every message! I suggest a 4 byte binary id at the start of each message.

This is now part of #45!

Yes, support multiple communication protocols!
NO, don't build it in too deep! Let routers keep track of protocols and them match with available protocols for service..


impl<T: DerefMut<Target=U>, U: ?Sized + Future> Future for T?

There's already an impl<'a, F: ?Sized + Future> Future for &'a mut F.  This seems like a logical extension.

My concrete use case here is an OwningHandle<H: DerefMut<Target=Future>>.  The future performs a computation on data in the OwningHandle's owned object, but I want to be able to send it to the cpupool so it needs a static lifetime.  OwningHandle solves the lifetime problem but isn't directly usable as a Future.  A wrapper struct with the obvious Future implementation works around this but is rather ugly.

Thanks for the report! I haven't played around with this much, but historically having blanket impls like this tends to cause problems related to coherence in many other external crates. I'm not 100% sure though if this would cause problems?
I agree it'd be great to have a "smart pointers of futures are they themselves futures" be automatic though!

I didn't really understand your problem, can't you impl Future for OwningHandle<H>?
What you propose is to replace the impl for &mut F with a more a more general impl for DerefMut. Issues with that:

There can only be one impl that ends with for T of a trait, no matter the bounds. To add this it needs not only to be useful by itself but also needs to be more useful than any other impl that ends in for T.
It's a breaking change.

Point 1 means we may regret adding this instead of something else, point 2 means it's harder to add it later. The only contenders I can think of are AsMut and BorrowMut which are innapropriate. In conclusion I don't think we would regret adding this.

I didn't really understand your problem, can't you impl Future for OwningHandle?

I can't, though the OwningHandle crate author could.  In general it seems like since it implements DerefMut that should be good enough if at all possible.

What you propose is to replace the impl for &mut F with a more a more general impl for DerefMut.

Yes.

There can only be one impl that ends with for T of a trait, no matter the bounds. To add this it needs not only to be useful by itself but also needs to be more useful than any other impl that ends in for T.

There isn't one yet, afaict, and this seems like a pretty good candidate!

I haven't played around with this much, but historically having blanket impls like this tends to cause problems related to coherence in many other external crates. I'm not 100% sure though if this would cause problems?

I haven't done any significant amount of Rust API design but this seems pretty sane.  The Deref traits are already somewhat magical since the compiler will use them for coercion, so implementers should already be cautious here.  I have seen people abusing Deref for inheritance but that's already pretty crazy.

Ah, I thought you had defined OwningHandle. Another issue is that we can't impl Future for any std types after this. We implement future for Option<F : Future> so that's a conflict right there.

Indeed, that does fail.  AIUI that rule exists in general because if the ancestor crate's type were to grow trait implementations that satisfied the bounds in the future (no pun intended) then we would get a coherence violation.  In this particular case though, it's hard to see how Option would ever usefully implement DerefMut.  Sad that we can't have nice things.
Perhaps the fundamental (pun actually intended this time) problem here is that Box is #[fundamental] and OwningHandle is not, even though it almost certainly wants to be treated identically to Box here.  (See also rust-lang/rust#29635)

Interesting point about fundamental. We will only be able to do this if/when Future is moved to std, by then this issue will have completely lost context, I guess we may close this?

Well if fundamental is the real problem it's OwningHandle that needs to be modified, once it's possible for non-std types to be fundamental of course.

Unfortunately I believe this can't be done today:

er ...
   Compiling futures v0.1.14 (file:///home/alex/code/futures)
error[E0119]: conflicting implementations of trait `future::Future` for type `core::option::Option<_>`:
   --> src/future/mod.rs:910:1
    |
910 | / impl<T: ::std::ops::DerefMut<Target=U>, U: ?Sized + Future> Future for T {
911 | |     type Item = U::Item;
912 | |     type Error = U::Error;
913 | |
...   |
916 | |     }
917 | | }
    | |_^ conflicting implementation for `core::option::Option<_>`
    |
   ::: src/future/option.rs
    |
5   | / impl<F, T, E> Future for Option<F> where F: Future<Item=T, Error=E> {
6   | |     type Item = Option<T>;
7   | |     type Error = E;
8   | |
...   |
14  | |     }
15  | | }
    | |_- first implementation here

error[E0119]: conflicting implementations of trait `future::IntoFuture` for type `(_, _, _, _, _)`:
   --> src/future/mod.rs:944:1
    |
944 | / impl<F: Future> IntoFuture for F {
945 | |     type Future = F;
946 | |     type Item = F::Item;
947 | |     type Error = F::Error;
...   |
951 | |     }
952 | | }
    | |_^ conflicting implementation for `(_, _, _, _, _)`
    |
   ::: src/future/join.rs
    |
92  | /         impl<A, $($B),*> IntoFuture for (A, $($B),*)
93  | |             where A: IntoFuture,
94  | |         $(
95  | |             $B: IntoFuture<Error=A::Error>
...   |
111 | |             }
112 | |         }
    | |_________- first implementation here

error: aborting due to 2 previous errors

error: Could not compile `futures`.

To learn more, run the command again with --verbose.

As a result, I'm going to close this.


Adding env var support

Passing options in the Dockerfile only would require replication of work for multiple account/region deploys.

LGTM


Android APP automatically disconnected without reasons

Hello,
I have a problem with my app Android (I'm developing for SDK >= 26) .
I can connect correctly to my ble server and interact writing messages.
But only for a few seconds (like 2~3 seconds), after that app disconnects automatically and I don't know why.
This is what console receives:
JS: 'Connecting to peripheral with UUID: D0:CF:5E:FC:38:C9'
JS: '------- _MyGattCallback.onConnectionStateChange, status: 0, new state: 2'
JS: '---- discovering services..'
JS: '------- _MyGattCallback.onServicesDiscovered, status (0=success): 0'
JS: 'connected'
JS: '------- _MyGattCallback.onConnectionStateChange, status: 8, new state: 0'
JS: '----- invoking disc cb'
JS: 'Peripheral disconnected with UUID: D0:CF:5E:FC:38:C9'

What I'm doing wrong?
Thank you

After some investigation I can say disconnections is caused by my android device. In particolar I'm using an Ulefone Armor X.
Testing with another Android device there're no issue.
Follow some log from NRF. Any ideas?
V	22:35:50.794	Connecting to D0:CF:5E:FC:38:C9...
D	22:35:50.794	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D	22:35:51.130	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D	22:35:51.130	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I	22:35:51.130	Connected to D0:CF:5E:FC:38:C9
V	22:35:51.151	Discovering services...
D	22:35:51.151	gatt.discoverServices()
I	22:35:51.621	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D	22:35:51.870	[Callback] Services discovered with status: 0
I	22:35:51.870	Services discovered
V	22:35:51.895	Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
 Client Characteristic Configuration (0x2902)
Generic Access (0x1800)
- Device Name [R W] (0x2A00)
- Appearance [R] (0x2A01)
Device Information (0x180A)
- Manufacturer Name String [R] (0x2A29)
- Model Number String [R] (0x2A24)
- System ID [R] (0x2A23)
Unknown Service (4880c12c-fdcb-4077-8920-a450d7f9b907)
- Unknown Characteristic [N WNR] (fec26ec4-6d71-4442-9f81-55bc21d658d6)
 Client Characteristic Configuration (0x2902)
Unknown Service (1d14d6ee-fd63-4fa1-bfa4-8f47b42119f0)
- Unknown Characteristic [W] (f7bf3564-fb6d-4e53-88a4-5e37e0326063)
D	22:35:51.895	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D	22:35:51.897	gatt.setCharacteristicNotification(fec26ec4-6d71-4442-9f81-55bc21d658d6, true)
I	22:35:51.925	Connection parameters updated (interval: 37.5ms, latency: 0, timeout: 100ms)
D	22:35:52.107	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E	22:35:52.107	Error 8 (0x8): GATT CONN TIMEOUT
I	22:35:52.107	Disconnected
D	22:35:52.183	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED

Ok. solved. There was a misconfiguration on bluetooth peripheral.


Add pronunciation note for IIFE

Beginners won't be sure how to pronounce "IIFE." It's helpful to provide pronunciation information in situations like this.
Checklist:

[X] I have read freeCodeCamp's contribution guidelines.
[X] My pull request has a descriptive title (not a vague title like Update index.md)
[X] My pull request targets the master branch of freeCodeCamp.
[X] All the files I changed are in the same world language, for example: only English changes, or only Chinese changes, etc.

Closes #XXXXX

Whilst I find the name humorous to say, I do not think IIFE is supposed to be pronounced, as much as spelled-out. The only reference to iffy I can find is a blog post from a Wikipedia article.
If others are fine with the inclusion of this, then sure (it will make some chuckle), but I do not see it bringing any clarity/useful information to the lesson.

It really is irrelevant how it is pronounced.  What is important, is what it does and the existing wording already takes care of that.  I think this PR should be closed, but will see what other mods think.

I'm in favour of closing this as well. (Also, I've always read it as an acronym, not "iffy").

Thank you for opening this pull request.
This is a standard message notifying you that we’ve reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.
Thank you and happy coding.


Fix typo in config.js

fasle -> false

Thanks for that. I've fixed this is 2.48.1. Please note that I won't be supporting this package any longer.

@gandm sorry if I'm bothering right here (there's nowhere else), but what do you think about suggest in README that this package needs a new maintainer?
I mean, I don't know what happened for this, but this package is awesome. React package has some good specific features, but sadly its highlighting is far from what language-babel does.


Installing requests[security] is failing

We have been using requests for a while in our app, and now recently found some situations where error messages were getting logged due to not having the correct environment for SSL.  So we started using requests[security].  Deploys started failing after that with the following message:
INFO:piapp.cli.commands.deploy:command git push heroku-dev development:master
Counting objects: 872, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (688/688), done.
Writing objects: 100% (705/705), 119.89 KiB, done.
Total 705 (delta 548), reused 18 (delta 14)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching custom git buildpack... done
remote: -----> Python app detected
remote: -----> Installing dependencies with pip
remote:        Obtaining file:///app (from -r requirements.txt (line 44))
remote:        Obtaining python-firebase from git+https://github.com/ozgur/python-firebase.git#egg=python-firebase (from -r requirements.txt (line 42))
remote:          Updating ./.heroku/src/python-firebase clone
remote:        Obtaining apns from git+https://github.com/djacobs/PyAPNs.git@d66f45e997cce916d3cf9cb8e0b9754a61e9fd15#egg=apns (from -r requirements.txt (line 43))
remote:          Updating ./.heroku/src/apns clone (to d66f45e997cce916d3cf9cb8e0b9754a61e9fd15)
remote:   Could not find a tag or branch 'd66f45e997cce916d3cf9cb8e0b9754a61e9fd15', assuming commit.
remote:        Collecting pyOpenSSL (from requests[security]->-r requirements.txt (line 27))
remote:          Downloading pyOpenSSL-0.15.1-py2.py3-none-any.whl (102kB)
remote:        Collecting ndg-httpsclient (from requests[security]->-r requirements.txt (line 27))
remote:          Downloading ndg_httpsclient-0.4.0.tar.gz
remote:        Collecting pyasn1 (from requests[security]->-r requirements.txt (line 27))
remote:          Downloading pyasn1-0.1.7.tar.gz (68kB)
remote:        Collecting cryptography>=0.7 (from pyOpenSSL->requests[security]->-r requirements.txt (line 27))
remote:          Downloading cryptography-0.9.tar.gz (302kB)
remote:        Collecting idna (from cryptography>=0.7->pyOpenSSL->requests[security]->-r requirements.txt (line 27))
remote:          Downloading idna-2.0-py2.py3-none-any.whl (61kB)
remote:        Collecting enum34 (from cryptography>=0.7->pyOpenSSL->requests[security]->-r requirements.txt (line 27))
remote:          Downloading enum34-1.0.4.tar.gz
remote:        Collecting ipaddress (from cryptography>=0.7->pyOpenSSL->requests[security]->-r requirements.txt (line 27))
remote:          Downloading ipaddress-1.0.7-py27-none-any.whl
remote:        Collecting cffi>=0.8 (from cryptography>=0.7->pyOpenSSL->requests[security]->-r requirements.txt (line 27))
remote:          Downloading cffi-1.1.0.tar.gz (323kB)
remote:        Collecting pycparser (from cffi>=0.8->cryptography>=0.7->pyOpenSSL->requests[security]->-r requirements.txt (line 27))
remote:          Downloading pycparser-2.13.tar.gz (299kB)
remote:        Installing collected packages: python-firebase, apns, piapp, idna, pyasn1, enum34, ipaddress, pycparser, cffi, cryptography, pyOpenSSL, ndg-httpsclient
remote:          Running setup.py develop for python-firebase
remote:          Running setup.py develop for apns
remote:          Running setup.py develop for piapp
remote:          Running setup.py install for pyasn1
remote:          Running setup.py install for enum34
remote:          Running setup.py install for pycparser
remote:          Running setup.py install for cffi
remote:            Complete output from command /app/.heroku/python/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-Nk2QCp/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-ESDL2z-record/install-record.txt --single-version-externally-managed --compile:
remote:            Package libffi was not found in the pkg-config search path.
remote:            Perhaps you should add the directory containing `libffi.pc'
remote:            to the PKG_CONFIG_PATH environment variable
remote:            No package 'libffi' found
remote:            Package libffi was not found in the pkg-config search path.
remote:            Perhaps you should add the directory containing `libffi.pc'
remote:            to the PKG_CONFIG_PATH environment variable
remote:            No package 'libffi' found
remote:            Package libffi was not found in the pkg-config search path.
remote:            Perhaps you should add the directory containing `libffi.pc'
remote:            to the PKG_CONFIG_PATH environment variable
remote:            No package 'libffi' found
remote:            Package libffi was not found in the pkg-config search path.
remote:            Perhaps you should add the directory containing `libffi.pc'
remote:            to the PKG_CONFIG_PATH environment variable
remote:            No package 'libffi' found
remote:            Package libffi was not found in the pkg-config search path.
remote:            Perhaps you should add the directory containing `libffi.pc'
remote:            to the PKG_CONFIG_PATH environment variable
remote:            No package 'libffi' found
remote:            running install
remote:            running build
remote:            running build_py
remote:            creating build
remote:            creating build/lib.linux-x86_64-2.7
remote:            creating build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/gc_weakref.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/vengine_gen.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/api.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/model.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/lock.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/__init__.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/ffiplatform.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/commontypes.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/recompiler.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/verifier.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/cparser.py -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/_cffi_include.h -> build/lib.linux-x86_64-2.7/cffi
remote:            copying cffi/parse_c_type.h -> build/lib.linux-x86_64-2.7/cffi
remote:            running build_ext
remote:            building '_cffi_backend' extension
remote:            creating build/temp.linux-x86_64-2.7
remote:            creating build/temp.linux-x86_64-2.7/c
remote:            gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/app/.heroku/python/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-x86_64-2.7/c/_cffi_backend.o
remote:            c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory
remote:             #include <ffi.h>
remote:                             ^
remote:            compilation terminated.
remote:            error: command 'gcc' failed with exit status 1
remote:
remote:            ----------------------------------------
remote: Command "/app/.heroku/python/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-Nk2QCp/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-ESDL2z-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-Nk2QCp/cffi
remote:
remote:  !     Push rejected, failed to compile Python app
remote:
remote: Verifying deploy....
remote:
remote: !	Push rejected to piapp-web-dev.
remote:
To git@heroku.com:piapp-web-dev.git
 ! [remote rejected] development -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:app.git'

After finding this PR https://github.com/heroku/heroku-buildpack-python/pull/172/files, I added cffi to our requirements.txt which fixed it.  Just thought I would bring this up, maybe add requests[security] to the list of whitelisted dependencies that need cffi.

Hello,
In order to use requests[security], you also have to have "cryptography" or "libffi" in your requirements.txt file.

FWIW, this doesn't solve my problem when using the heroku-docker plugin.
$ grep cffi requirements.txt
cffi==1.5.2               # via cryptography
pycparser==2.14           # via cffi

$ docker-compose up web
…
  Running setup.py bdist_wheel for cffi: started
  Running setup.py bdist_wheel for cffi: finished with status 'error'
  Complete output from command /app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-FW74VY/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /tmp/tmpvioEa9pip-wheel- --python-tag cp27:
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-2.7
  creating build/lib.linux-x86_64-2.7/cffi
  copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/cparser.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/gc_weakref.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/__init__.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/verifier.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/recompiler.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/api.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/model.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/ffiplatform.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/vengine_gen.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/lock.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/commontypes.py -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/_cffi_include.h -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/parse_c_type.h -> build/lib.linux-x86_64-2.7/cffi
  copying cffi/_embedding.h -> build/lib.linux-x86_64-2.7/cffi
  running build_ext
  building '_cffi_backend' extension
  creating build/temp.linux-x86_64-2.7
  creating build/temp.linux-x86_64-2.7/c
  gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/app/.heroku/python/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-x86_64-2.7/c/_cffi_backend.o
  c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
   #include <ffi.h>
                   ^
  compilation terminated.
  error: command 'gcc' failed with exit status 1

  ----------------------------------------
  Running setup.py clean for cffi
  Failed building wheel for cffi
  Running setup.py bdist_wheel for cryptography: started
  Running setup.py bdist_wheel for cryptography: finished with status 'error'
  Complete output from command /app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-FW74VY/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /tmp/tmpwY_Pmgpip-wheel- --python-tag cp27:
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
   #include <ffi.h>
                   ^
  compilation terminated.
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-build-FW74VY/cryptography/setup.py", line 335, in <module>
      **keywords_with_side_effects(sys.argv)
    File "/app/.heroku/python/lib/python2.7/distutils/core.py", line 111, in setup
      _setup_distribution = dist = klass(attrs)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/dist.py", line 269, in __init__
      self.fetch_build_eggs(attrs['setup_requires'])
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/dist.py", line 313, in fetch_build_eggs
      replace_conflicting=True,
    File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources/__init__.py", line 828, in resolve
      dist = best[req.key] = env.best_match(req, ws, installer)
    File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1073, in best_match
      return self.obtain(req, installer)
    File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1085, in obtain
      return installer(requirement)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/dist.py", line 380, in fetch_build_egg
      return cmd.easy_install(req)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 640, in easy_install
      return self.install_item(spec, dist.location, tmpdir, deps)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 670, in install_item
      dists = self.install_eggs(spec, download, tmpdir)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 853, in install_eggs
      return self.build_and_install(setup_script, setup_base)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1081, in build_and_install
      self.run_setup(setup_script, setup_base, args)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1069, in run_setup
      raise DistutilsError("Setup script exited with %s" % (v.args[0],))
  distutils.errors.DistutilsError: Setup script exited with error: command 'gcc' failed with exit status 1

  ----------------------------------------
  Running setup.py clean for cryptography
  Failed building wheel for cryptography
  Complete output from command /app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-FW74VY/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" clean --all:
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  Package libffi was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libffi.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libffi' found
  c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
   #include <ffi.h>
                   ^
  compilation terminated.
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-build-FW74VY/cryptography/setup.py", line 335, in <module>
      **keywords_with_side_effects(sys.argv)
    File "/app/.heroku/python/lib/python2.7/distutils/core.py", line 111, in setup
      _setup_distribution = dist = klass(attrs)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/dist.py", line 269, in __init__
      self.fetch_build_eggs(attrs['setup_requires'])
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/dist.py", line 313, in fetch_build_eggs
      replace_conflicting=True,
    File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources/__init__.py", line 828, in resolve
      dist = best[req.key] = env.best_match(req, ws, installer)
    File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1073, in best_match
      return self.obtain(req, installer)
    File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1085, in obtain
      return installer(requirement)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/dist.py", line 380, in fetch_build_egg
      return cmd.easy_install(req)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 640, in easy_install
      return self.install_item(spec, dist.location, tmpdir, deps)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 670, in install_item
      dists = self.install_eggs(spec, download, tmpdir)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 853, in install_eggs
      return self.build_and_install(setup_script, setup_base)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1081, in build_and_install
      self.run_setup(setup_script, setup_base, args)
    File "/app/.heroku/python/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1069, in run_setup
      raise DistutilsError("Setup script exited with %s" % (v.args[0],))
  distutils.errors.DistutilsError: Setup script exited with error: command 'gcc' failed with exit status 1

  ----------------------------------------
  Failed cleaning build dir for cryptography
  Running setup.py bdist_wheel for dj-database-url: started
  Running setup.py bdist_wheel for dj-database-url: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/5f/a6/6b/28940943d7e38eca4f576bdca45ac02b1f15c3dba3e150bc17
  Running setup.py bdist_wheel for django-jsonfield: started
  Running setup.py bdist_wheel for django-jsonfield: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/16/29/23/d84c7e8dd321270e324bb89c07c8bb48824f1c182c58167ca8
  Running setup.py bdist_wheel for django-localflavor: started
  Running setup.py bdist_wheel for django-localflavor: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/58/9c/06/0ffd68b0f784cca6570353ff4386b1ad0a38b4e81cff2f34c6
  Running setup.py bdist_wheel for django-model-utils: started
  Running setup.py bdist_wheel for django-model-utils: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/70/dd/fc/18224bdad6ca2838f8dbf63f8647e91169e67c776ab7abdd1e
  Running setup.py bdist_wheel for django-redis: started
  Running setup.py bdist_wheel for django-redis: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/28/1c/41/8c24b4240d28189c7f6bdc241263f28e5eb7f7672f67cfd900
  Running setup.py bdist_wheel for django-smsish: started
  Running setup.py bdist_wheel for django-smsish: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/5a/51/c9/42b9961b60140d92df517d7f097f90ab8f09fb74a7952fd3d5
  Running setup.py bdist_wheel for django-sslify: started
  Running setup.py bdist_wheel for django-sslify: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/20/17/ee/aeaf8a70524e19f8a9abc86778544c4a0927a2e6b39f9fb790
  Running setup.py bdist_wheel for django-sslserver: started
  Running setup.py bdist_wheel for django-sslserver: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/7c/79/45/1bd17abf593834571739cbfb31e2ba923d567c174c53c93199
  Running setup.py bdist_wheel for flower: started
  Running setup.py bdist_wheel for flower: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/12/8f/aa/331a018614655aeddd08814939aee437c0247c83aa0c204bb3
  Running setup.py bdist_wheel for gnureadline: started
  Running setup.py bdist_wheel for gnureadline: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/62/bb/66/0fa9b68ab2150dd04b8bb7084b173776cbf62fb8f819feb876
  Running setup.py bdist_wheel for httplib2: started
  Running setup.py bdist_wheel for httplib2: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/e1/a3/05/e66aad1380335ee0a823c8f1b9006efa577236a24b3cb1eade
  Running setup.py bdist_wheel for ipdb: started
  Running setup.py bdist_wheel for ipdb: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/23/47/8c/fd62cc4019964ccc5d9e379c2e65a70855970113637ee69bc2
  Running setup.py bdist_wheel for Markdown: started
  Running setup.py bdist_wheel for Markdown: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/f3/f7/c7/930d6aac7c31f441a5da8db82b311624f3f33dd6614a9aec3e
  Running setup.py bdist_wheel for MarkupSafe: started
  Running setup.py bdist_wheel for MarkupSafe: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/94/a7/79/f79a998b64c1281cb99fa9bbd33cfc9b8b5775f438218d17a7
  Running setup.py bdist_wheel for newrelic: started
  Running setup.py bdist_wheel for newrelic: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/fd/a0/eb/1cd3ee0b6f50f099c73d6d6543e289d3743a5cc6ccaccda333
  Running setup.py bdist_wheel for pexpect: started
  Running setup.py bdist_wheel for pexpect: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/ea/5b/53/4b65a279e1390ae81febe74f660ce01ef4655c9c1ec9acd9bf
  Running setup.py bdist_wheel for phonenumbers: started
  Running setup.py bdist_wheel for phonenumbers: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/bb/0c/7b/1243872dd52a2f8fa6458b7d688cef61ce3d02b414c73d90bc
  Running setup.py bdist_wheel for psycopg2: started
  Running setup.py bdist_wheel for psycopg2: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/e2/9a/5e/7b620848bbc7cfb9084aafea077be11618c2b5067bd532f329
  Running setup.py bdist_wheel for pycparser: started
  Running setup.py bdist_wheel for pycparser: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/c7/28/31/bac6d0b118c0bdcbf57f9219afdf2e624379c07efa6c769dbc
  Running setup.py bdist_wheel for pysocks: started
  Running setup.py bdist_wheel for pysocks: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/ac/d5/94/b2dc9f65b1f80bd302a22fc8637780677b32366ebe5355897b
  Running setup.py bdist_wheel for PyYAML: started
  Running setup.py bdist_wheel for PyYAML: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/fa/db/f6/dee55793d344f1706dc4a5a693298f0115241d1085cc212364
  Running setup.py bdist_wheel for pyzmq: started
  Running setup.py bdist_wheel for pyzmq: still running...
  Running setup.py bdist_wheel for pyzmq: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/30/a1/9e/35bfffbc9aa6a9d96e8c9ecd436182c8c23ab64985be6c43f3
  Running setup.py bdist_wheel for simplegeneric: started
  Running setup.py bdist_wheel for simplegeneric: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/51/3c/13/2b621669f3ba74b01380aefcc0af0f643bb42360e7248496ed
  Running setup.py bdist_wheel for slackclient: started
  Running setup.py bdist_wheel for slackclient: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/e3/8d/08/1fbfc0e3265fcc1001dc037a85784ed17c861b94fb0583954d
  Running setup.py bdist_wheel for sqlparse: started
  Running setup.py bdist_wheel for sqlparse: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/7b/d4/72/6011bb100dd5fc213164e4bbee13d4e03261dd54ce6a5de6b8
  Running setup.py bdist_wheel for terminado: started
  Running setup.py bdist_wheel for terminado: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/02/4d/5d/5fa953b88bf14feb10f4688b3150bb4f50e2e7655018e889b6
  Running setup.py bdist_wheel for tornado: started
  Running setup.py bdist_wheel for tornado: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/bd/20/c8/6bec1ed7ad88e2fb58333301e8d1f05610231441dcf4740cb5
  Running setup.py bdist_wheel for twilio: started
  Running setup.py bdist_wheel for twilio: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/06/6c/98/9fa0e5af0f3a8c106fa4c42fe54061064a5964ade04673f6a6
  Running setup.py bdist_wheel for websocket-client: started
  Running setup.py bdist_wheel for websocket-client: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/56/d3/af/529917d2f31df813fb0c5445ff88abcd8ee6e450c192b2ed21
  Running setup.py bdist_wheel for enum34: started
  Running setup.py bdist_wheel for enum34: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/1a/4e/a5/bc564dd03d9abe991425c88d88aa8c5c99ad9a733551b69b4e
  Running setup.py bdist_wheel for functools32: started
  Running setup.py bdist_wheel for functools32: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/38/c6/c7/ee17acd621120c302e25c2fa8b3a8b235d5d1137c6ab4c9728
  Running setup.py bdist_wheel for backports.ssl-match-hostname: started
  Running setup.py bdist_wheel for backports.ssl-match-hostname: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/ca/e4/ff/d57f7b2052ddfcf76644f59ad355808f8584d79d4d922601e1
Successfully built anyjson billiard dj-database-url django-jsonfield django-localflavor django-model-utils django-redis django-smsish django-sslify django-sslserver flower gnureadline httplib2 ipdb Markdown MarkupSafe newrelic pexpect phonenumbers psycopg2 pycparser pysocks PyYAML pyzmq simplegeneric slackclient sqlparse terminado tornado twilio websocket-client enum34 functools32 backports.ssl-match-hostname
Failed to build cffi cryptography
Installing collected packages: amqp, anyjson, appnope, pytz, babel, billiard, boto, kombu, celery, pycparser, cffi, idna, pyasn1, six, enum34, ipaddress, cryptography, decorator, dj-database-url, sqlparse, Django, django-debug-toolbar, django-extensions, django-hstore, django-jsonfield, django-localflavor, django-model-utils, redis, django-redis, PyYAML, djangorestframework, django-rest-swagger, django-smsish, django-sslify, django-sslserver, PyJWT, djangorestframework-jwt, mccabe, pep8, pyflakes, flake8, backports.ssl-match-hostname, certifi, tornado, futures, flower, gnureadline, gunicorn, httplib2, ipython-genutils, traitlets, path.py, pickleshare, simplegeneric, ptyprocess, pexpect, ipython, ipdb, jupyter-core, pyzmq, jupyter-client, ipykernel, functools32, jsonschema, nbformat, pygments, mistune, MarkupSafe, jinja2, nbconvert, terminado, notebook, ipywidgets, jupyter-console, qtconsole, jupyter, Markdown, newrelic, phonenumbers, psycopg2, pyOpenSSL, pysocks, requests, websocket-client, slackclient, stripe, twilio, whitenoise
  Running setup.py install for cffi: started
    Running setup.py install for cffi: finished with status 'error'
    Complete output from command /app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-FW74VY/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-EUmSPJ-record/install-record.txt --single-version-externally-managed --compile:
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    Package libffi was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libffi.pc'
    to the PKG_CONFIG_PATH environment variable
    No package 'libffi' found
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-2.7
    creating build/lib.linux-x86_64-2.7/cffi
    copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/cparser.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/gc_weakref.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/__init__.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/verifier.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/recompiler.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/api.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/model.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/ffiplatform.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/vengine_gen.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/lock.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/commontypes.py -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/_cffi_include.h -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/parse_c_type.h -> build/lib.linux-x86_64-2.7/cffi
    copying cffi/_embedding.h -> build/lib.linux-x86_64-2.7/cffi
    running build_ext
    building '_cffi_backend' extension
    creating build/temp.linux-x86_64-2.7
    creating build/temp.linux-x86_64-2.7/c
    gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DUSE__THREAD -I/usr/include/ffi -I/usr/include/libffi -I/app/.heroku/python/include/python2.7 -c c/_cffi_backend.c -o build/temp.linux-x86_64-2.7/c/_cffi_backend.o
    c/_cffi_backend.c:15:17: fatal error: ffi.h: No such file or directory
     #include <ffi.h>
                     ^
    compilation terminated.
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
Command "/app/.heroku/python/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-FW74VY/cffi/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-EUmSPJ-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-FW74VY/cffi
You are using pip version 8.0.2, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
ERROR: Service 'web' failed to build: The command '/bin/sh -c /app/.heroku/python/bin/pip install -r requirements.txt' returned a non-zero code: 1

@RyanBalfanz this buildpack is not used in the heroku-docker plugin workflow, at this time.

@kennethreitz, thanks for the reply. I was able to get heroku/python-getting-started working with heroku-docker anyway, which is nice.
Any idea when this buildpack will officially be supported? Or if it is even on the roadmap at all?

@RyanBalfanz at this time, the heroku-docker plugin and accompanying Docker image are entirely separate projects from this one.
At one point in time, during the first iteration, I did have the Python Docker image simply download and utilize this buildpack during it's build. This worked well, and is certianly an option (you can look in the git history of the repository for an example Dockerfile to accomplish this). However — simply running effectively the entire build as a single step in Docker takes away from many of the benefits of using Docker in the first place — so, we decided as a team to build each Dockerfile minimally and from scratch.
At this point in time, I personally assume (haven't looked at any numbers) that the Python Docker image isn't receiving any widespread usage, as it's still a fairly early-stage project. In the future, as Heroku's Docker story evolves, I'm sure much if not all of the above story will change.
Bonus: support for Python 3 was added into the Python Docker Image just a few weeks ago — because a user (finally) requested it.

@kennethreitz Got it, thanks!


Break out clinics all the way

We have some grouped ones -- PPMW is one entity in the app, and that represents a few diff clinics. @NerdyGirl537 pointed out that we will probably need to break this out so that we can find the correct fax number.
Let's either break out the environment variable more, or start writing clinic yaml.

@lwaldsc and I think that we definitely need to break up the clinics, especially PPMW and other affiliates. We could do it similarly to how it used to be in Crypto where you picked the clinic and then the location in a separate field - for most clinics, this would auto-populate/only be one option, but for PP and some other clinics, you would have several options to choose from. (And eventually we'd need this to be broken out anyway for the pledge form, which ask for both clinic name and location.) @NerdyGirl537 @colinxfleming @mebates @eheintzelman

Prioritize for sprint 11

As @mebates noted in another thread, clinic validation is a priority for second release. We should handle this as part of #203 .

Resolved by #975 . @vtmeghan please make separate clinics be separate entries.


Bump puppeteer-core from 5.5.0

We can't upgrade puppeteer-core because its types are broken: https://github.com/puppeteer/puppeteer/issues/7100
I think we should try to find a solution, since the puppeteer is a core library in our project. Please see the attached issue in puppeteer to see potential solutions.

Is this still a relevant issue? It seems like puppeteer has reached version 20.1.2, which seems like a rather large jump from the current 5.5.0.
If this bump is still wanted I can try tackling it.

Yes, it is still relevant. Upgrading packages is sometimes hard in our project, but we have to do that!
There are some issues that I think we shouldn't try to solve before upgrading their packages.
Thank you!

Hey, just wanted to give an update, due to some personal circumstances I have been unable to start work on this.
I'm posting this here because as much as I would love to come back to it when I can, in the meantime I don't want to block it, so if anyone wants to work on this, feel free!
I'll give another update here if \ when I am able to continue work on this.


Timed Out with Pixelmon and RFTools

Every time I warp to a dimension my server timed out for ages(never saw the end of the timed out... I reboot it after five minutes.). I isolate the error at pixelmon because if i uninstall it the dimension work fine, but once I put it back on the problem come back. I can't give a crash log because the sever doesn't crash... We are just unable to connect back...

Hmm, hard to say what's wrong. Can you test if this is also the case with mystcraft?

Already tested and it's the same =/

I would report this to the pixelmon guys then because it appears to be a problem on their end.


Added note for disabling external traffic

Addresses #65.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


unidecode and GPL?

Hi folks, thank for the nice library! I think I've found a GPL issue in the code that I wanted to check with you:
basis_set_exchange/writers/molcas_library.py imports unidecode on line 6. Sadly, the unidecode library is only available under the GPL license (assuming it's this library). Because the basis_set_exchange library is not licensed under the GPL, afaik you cannot use the unidecode library.
As an alternative, text-unidecode looks like it does a similar job and is available under a more permissive license, it might work as a drop-in replacement.
Apologies if this has already been brought up and resolved elsewhere.

This is a tricky issue. As far as I am aware, the question of whether or not importing a library constitutes a "derived work" (and therefore triggers GPL's requirements) is not settled law. There is no court case that I have been able to find that states one way or the other, but plenty of opinions on both sides.
Either way, unidecode is used in so few places, it may make sense to see if we can remove it entirely. It seems to be used in printing some output for molcas, which means molcas may only support ASCII.
Something in the python standard library might work: https://docs.python.org/3/library/unicodedata.html#unicodedata.normalize

Yeah that's a good point. From my somewhat limited reading it was my understanding that any type of dynamic library linking constitutes a "derived work" in the eyes of the GNU, which I suppose is all that matters from a moral standpoint (even if whether that's defendable legally remains to be seen).
Either way, the easiest thing is to probably replace the library to be safe, as you say.
Also possibly of interest to anyone else that comes across this, the conda-forge build of basis_set_exchange v0.9 doesn't seem to include unidecode as a dependency (even though the import in molcas_library.py remains). Downgrading from 0.10 to 0.9 is a useful way of installing only the exchange without unidecode (although presumably the molcas_library.py module will not function).


QChat's chathud breaks on lua refresh

After doing lua refresh for the gamemode, the text rendering breaks and requires rejoin.

Got an error maybe?

No errors or anything which is the problem...


Adoption cache should use WeakValueDictionary.

We use a cache to preserve sharing-by-reference relationships when "adopting" outside modules into a new top-level functional module context (adoption occurs frequently when using advanced config systems like gin or fiddle, or during interactive development).
Previously we were careful not to hold references to Scope objects by having the cache itself be a WeakKeyDictionary, however the scope-keyed entries were just classic dicts, and this was leading to leaks of tracers and arrays ultimately due to long-lived references to submodule objects from the cache.  By using a WeakValueDictionary to refer to these we avoid these lifetime issues.

Fixes #2493

Codecov Report

Merging #2495 (53a4862) into main (ef67f1c) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main    #2495   +/-   ##
=======================================
  Coverage   78.87%   78.88%
=======================================
  Files          48       48
  Lines        5118     5120    +2
=======================================
+ Hits         4037     4039    +2
  Misses       1081     1081

Impacted Files
Coverage Δ

flax/linen/module.py
92.80% <100.00%> (+0.02%)
:arrow_up:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Fix RCC_PLLCFGR register fixup for F4s

Call rcc::fix_2 on those F4 processors which have the RCC PLLCFGR field splitout by bit for the PLLM, PLLN, PLLP, and PLLQ fields.

Thanks for your contribution!


Failure to install Xcode or invoke xcodebuild on mac bots

I'm seeing a number of different builders fail during Xcode install steps or in steps that invoke xcodebuild. https://chromium-swarm.appspot.com/bot?id=build847-m9 is one such bot which is failing quite frequently on these steps.

I'm seeing this a lot more on both pre and post submit. One example is here: https://ci.chromium.org/ui/p/flutter/builders/prod/Mac Production Engine Drone/501292/overview. I think we will see this blocking the MQ a lot if we do the repo merge before it is fixed.

FYI @jtmcdole


Plio usecase

Please ignore the StudentSelect.vue file. I did try to not include it in the commit but it came up anyway. Changes to the code and renaming variables brought about a shift in behaviour in the dropdown. I have to anyway nix the dummy file and load real data so I tried to not put effort into that right now as the plio use case is time-sensitive.

Sometimes I added multi-line comments to communicate the logic. Once we have a documentation process ready, I think we can transfer these comments and reduce them to single-line.

Reiterating, for the plio use case, multiple SRN entries are disabled. Because plio has a singular unique ID param. This could be temporary once we figure out the plio backend of accepting multiple ID's but producing a single link.

The way I have tested it is by manually adding the params to the url.

Sometimes I added multi-line comments to communicate the logic. Once we have a documentation process ready, I think we can transfer these comments and reduce them to single-line.

This is good! There is a purpose for comments in code, and a different purpose for documentation outside it :)

Hello @sudheshna-donthineni! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file src/services/firebase.py:

Line 6:80: E501 line too long (87 > 79 characters)
Line 11:40: W292 no newline at end of file


Decide and test behavior of setting a tablet hosting goal for offline table

A new API for setting tablet hosting goals was added in the elasticity branch.  Need to decide how this new API should behave with offline tables and test this behavior.
Also should update this table with the behavior.

Need to update or remove https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=247828052

@keith-turner @ctubbsii - I think this issue pre-dates the change regarding online/offline vs enabled/disabled for table states. So my question, should a user be able to alter a table that is disabled? If not, then we can close this (and probably open an issue to enforce this).

@keith-turner @ctubbsii - I think this issue pre-dates the change regarding online/offline vs enabled/disabled for table states. So my question, should a user be able to alter a table that is disabled? If not, then we can close this (and probably open an issue to enforce this).
Edit: This comment implies that it might be useful to change the state when disabled.

For a disabled table, I think the critical part is that the structure of the table can't be changed... you can't add or delete data, or merge tablets, or add split points, or change its files, etc. Also, we won't make it available for reads or other operations that require resources to be actively put to use, like creating a scanner. You should still be able to do non-destructive backup-type operations, like export table and clone. For metadata/config operations, I'm not so sure. I think there's value, for surgical/administrative/repair purposes, in being able to alter configuration and doing certain surgical operations to tablet state in the metadata, but I'm not sure if we want to open that floodgate to any of those types of operations, because if we do, then we might want to start allowing metadata-only operations like adding splits and merges, and there's good reasons to not allow that.
Perhaps we could restrict these metadata/config alterations to only surgical use with an admin/surgery tool, but they are disallowed via the public API? I'm not sure. You can already do these kinds of surgical operations manually by editing the metadata table and ZK directly... so, I think this is really a question of what the permission checks are for doing it through the public API or if we provide any particular tooling for it (which is really two separate questions).


fix cast from void* to Gluint

gcc complained
OsvrRenderingPlugin.cpp:788:44: error: cast from 'void*' to 'GLuint {aka unsigned int}' loses precision [-fpermissive]

Thanks. OpenGL path is not working, so this code is going to change soon anyway. Unity casts it this way in their example plugin:
GLuint glTex = (GLuint)(size_t)s_leftEyeTexturePtr;


Custom Scrollbar to Enhance User Experience

This PR ;
solves the issue with ticket #473

adds a custom scrollbar to enhance users experience.

Let me know if you would want a change of colors in the scrollbar

Summary by CodeRabbit

Style

Updated scrollbar appearance for improved user experience.

There's a horizontal scrollbar appearing on the screen which is not required. Also a persistent vertical scrollbar is also not preferred, it should hide and show when required

@anur4ag By persitent vertical scrollbar, you mean the scrollbar should only be visible when a user hovers that area...or only available when there's an overflow ?..
For the horizontal scrollbar, there's a seperate issue for that.. currently trying to figure it out.. thinking it may have to do with the react-fast-marquee. I should sort that in that issue

@anur4ag By persitent vertical scrollbar, you mean the scrollbar should only be visible when a user hovers that area...or only available when there's an overflow ?.. For the horizontal scrollbar, there's a seperate issue for that.. currently trying to figure it out.. thinking it may have to do with the react-fast-marquee. I should sort that in that issue

ohk yes I do mean that when I pointed out the issue about vertical scrollbar

please give a fixed height to the error page content, currently the footer is bigger than the content itself.


Failed to sign transaction by quorum of validator

Impossible to make a transactions
error from Sui wallet while trying to send Sui to another wallet : "Failed to sign transaction by a quorum of validators because of locked objects. Retried a conflicting transaction None, success: None"
Any help how ot solve this ?

@stefan-mysten  hey any help please

@Degen-Player will need a bit more context. Are you trying to send SUI from your wallet to an address? Is this under a Typescript project, or directly from the Chrome browser extension?

@Degen-Player will need a bit more context. Are you trying to send SUI from your wallet to an address? Is this under a Typescript project, or directly from the Chrome browser extension?

i'am actually using https://chromewebstore.google.com/detail/sui-wallet/opcgpfmipidbgpenhmajoajpbobppdil in my wallet i have x Sui which i would like to transfer to another address but failled to do this due to the error in first message

Are you staking your SUI that you're trying to send?

Are you staking your SUI that you're trying to send? Are you trying to do this on mainnet or on other networks?

no i'm not staking them, yes from mainnet

@Degen-Player many users seem to have hit this issue. On TG @sblackshear wrote that "This means there was equivocation on an owned object included in the transaction. Typically (but not always), this is because two concurrent transactions are trying to use the same gas object"
So if an object is locked, the lock lasts for an epoch and it will be unblocked at the next epoch.

@Degen-Player many users seem to have hit this issue. On TG @sblackshear wrote that "This means there was equivocation on an owned object included in the transaction. Typically (but not always), this is because two concurrent transactions are trying to use the same gas object" So if an object is locked, the lock lasts for an epoch and it will be unblocked at the next epoch.

i don't know what object means here, same for epoch..
What i'am supposed to do please? (:

look like object are main thing in sui transaction, ref : https://docs.sui.io/concepts/object-model

okay so i would wait expiration of the transaction to use back my wallet ? https://docs.sui.io/concepts/transactions
based on this "Expiration: An epoch reference that sets a deadline after which validators will no longer consider the transaction valid. The optional expiration epoch reference enables users to define transactions that either execute and commit by a set time (current epoch less than or equal to expiration epoch), or never execute after the deadline passes. By default, there is no deadline for when a transaction must execute."

Either you can wait until the next epoch change, or create a new address, add Sui to it, and then try again to mint.