Problems view reporting incorrect errors, Mac

Issue Type: Bug
A recurring issue with this extension is hundreds of false errors appearing in the Problems view making it unusable. These are errors not reported when building from the dotnet cli. This is on a MacBook Pro, Mojave. There doesn't seem to be any consistent pattern of error being raised, but at the moment it is a "The type or namespace name XYZ could not be found (are you missing a using directive or an assembly reference?)". There are other errors at other times (ambiguous member names in classes for example).
Reloading Omnisharp seems to resolve it temporarily, but the view is useless for spotting real errors.
It may be worth mentioning that this is repo has a large number of assembly projects (100+), most of them .NET Core 3.1.
Extension version: 1.21.18
VS Code version: Code 1.44.2 (ff915844119ce9485abfe8aa9076ec76b5300ddd, 2020-04-16T17:07:18.473Z)
OS version: Darwin x64 18.7.0

System Info

Item
Value

CPUs
Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz (8 x 2900)

GPU Status
2d_canvas: enabledflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmetal: disabled_offmultiple_raster_threads: enabled_onoop_rasterization: disabled_offprotected_video_decode: unavailable_offrasterization: enabledskia_renderer: disabled_off_okvideo_decode: enabledviz_display_compositor: enabled_onviz_hit_test_surface_layer: disabled_off_okwebgl: enabledwebgl2: enabled

Load (avg)
3, 3, 4

Memory (System)
16.00GB (0.79GB free)

Process Argv
.

Screen Reader
no

VM
0%

@mark-feeney-sage Can you share the Omnisharp Log for the Output pane the next time you get into this state. It would help us identify why you are seeing these errors.

Sorry, yet to catch the logs around the point of it happening. That is, before restarting Omnisharp which has to be done frequently. What seems to be happening is that, when refactoring project names and namespace names extensively, the Problems pane is not refreshing correctly in line with actual changes and builds. So dotnet build is showing success while Omnisharp still lists namespace-not-found errors.

Hi @JoeRobich , is there a private channel I can post my logs to? I have some now. I see a lot of info in them that I don't want accessible up here.

I am also experiencing this issue:
Mojave 10.14.6
Omnisharp logs show the standard logs even when it is effectively in a useless state

Experiencing this issue as well under VSCode on Win 10 while using the Remote WSL extension. I doubt the problem is platform-specific, however. Project is a solution with two basic .NET core library projects and an ASP.NET Core 5.0 project.
It seems that using VS Code's inbuilt refactoring features (e.g. rename a class, class member, file, etc) seem to trigger it, but I also get it at other times. It forces me to restart OmniSharp frequently, which is frustrating and takes a while. If there was a viable alternative to OmniSharp at this stage I'd likely use that.

Experiencing this issue as well under VSCode on Win 10 while using the Remote WSL extension. I doubt the problem is platform-specific, however. Project is a solution with two basic .NET core library projects and an ASP.NET Core 5.0 project.
It seems that using VS Code's inbuilt refactoring features (e.g. rename a class, class member, file, etc) seem to trigger it, but I also get it at other times. It forces me to restart OmniSharp frequently, which is frustrating and takes a while. If there was a viable alternative to OmniSharp at this stage I'd likely use that.


Stops functioning properly after some time

Hey there? I was wondering why the bot stops functioning after some time. Like it only do half of the rolls in my case it rolls 6 rolls only when i have 14 in total. Also it stops logging the characters rolled or wishes spawned and kakera reactions in the console. Could you help me w that. One more thing is that the bot takes a while to react to my wished characters ( it clicks the button way after someone has already reacted even though i have claim delay set to 0.2 ) or characters the list in the config file.

Read #1 and #5


Wy/wakeup actions lambda

This adds some functionality to get all the workflows for an organization, and to filter for the ones disabled by inactivity
It also starts to separate logic for retrieving arguments used by KeepAlive so that in the future it will be easy to add support for multiple platforms

closes #2

closes #2

This PR doesn't completely close #2 as we still want functionality for non-organizational repos to be re-enabled.

I seem to have re-enabled all our timed out workflows with a PAT that doesn't have permissions to do that, so I'm not sure how we'll verify this now 🤔
Also the auth parameter on requests.put doesn't accept PATs on their own but we can add headers={'Authorization': f"Bearer {login_or_token}" as an argument instead

I seem to have re-enabled all our timed out workflows with a PAT that doesn't have permissions to do that, so I'm not sure how we'll verify this now 🤔
Also the auth parameter on requests.put doesn't accept PATs on their own but we can add headers={'Authorization': f"Bearer {login_or_token}" as an argument instead

What were the PAT permissions? And for who were they generated?

I seem to have re-enabled all our timed out workflows with a PAT that doesn't have permissions to do that, so I'm not sure how we'll verify this now 🤔
Also the auth parameter on requests.put doesn't accept PATs on their own but we can add headers={'Authorization': f"Bearer {login_or_token}" as an argument instead

What were the PAT permissions? And for who were they generated?

Here are the permissions on the token I'm using:


Sign-Up Tile

below screengrabs may nopt be complete, check Figma for all color variations
https://www.figma.com/file/oSetT4LbatRmXlcB2A7V8Z/Content-Hubs-2024?type=design&node-id=1661-91846&mode=design&t=VWyIlxICkvP13Nl3-4

[x] Import
[ ] Block implementation

@benpeter we have that in the news L3 content already. I suggest we pull that one up. Either only default version or maybe all since there are mostly color variants.


Navigation bar size .

I cannot increase the size of the navigation bar. I tried to do it as in the example, but I didn't know how to do it because the code had changed.

Yes, it's true that things have changed a lot. I'll try to make something more accessible directly in the options for the next update.
Actually it's at line 56: const navBarSize = "1.0em";
change the 1.0 with the size you want. Personally i use 1.2em.

I didn't know you simplified the value part, I should have looked more carefully.
❤❤
Of course, it would be better if it comes to the settings section.


Rails 4.1 - Issue updating STI column

I've run into this weird issue running Rails 4.1.4 and paper_trail 3.0.3. Ill try and simplify my code to explain what is happening.
class Page < ActiveRecord::Base
  class Draft < ActiveRecord::Base
    include PaperTrail
    has_paper_trail
  end
end

class MainPage < Page
  class Draft < Page::Draft; end
end

class SubPage < MainPage
  class Draft < MainPage::Draft; end
end

The page and page_drafts table both have the 'type' inheritance column. There are some instances where I need to change the type. Previously, I was able to do something like this:
my_page = MainPage::Draft.create
my_page.update type: 'SubPage::Draft'

The update call would then update the type and updated_at columns. When upgrading to Rails 4.1.4, the update call is only updating the updated_at field. I noticed that when removing paper_trail from the Page::Draft class, it works as expected.
The weird thing is that it seems to work as expected if my_page is an instance of the Page::Draft class where has_paper_trail is called. If my_page is an instance of a subclass of Page::Draft, thats when I notice this issue.
I apologize if this is hard to follow. I've been trying to use the template at https://github.com/rails/rails/blob/master/guides/bug_report_templates/active_record_master.rb to create a failing test, but I am having issues getting PaperTrail included.
I originally thought this was an issue with Rails 4.1 until I discovered that removing PaperTrail fixed my issue. Reverting to Rails 4.0.8 and leaving in PaperTrail also fixes the issue. Any idea what could be going on?

Having the same issue with 3.0.6

I'm also having this issue with 3.0.1.
Really basic STI though.
class Prompt < ActiveRecord::Base
  has_paper_trail
end

class TextField < Prompt
end

class RadioButton < Prompt
end

Simply trying to do TextField.first.update_attributes type: "RadioButton" does not change the type.

Sorry for the delayed response here but can one of you try running your tests against PaperTrail version 4.0.0.beta2..  It seems like the issue is solved on PaperTrail 4.x.  Here is a template based off @rdubya's submission from this thread that works fine for me locally:
gem 'activerecord', '~> 4.1.1'
gem 'sqlite3'
gem 'paper_trail', '4.0.0.beta2'

require 'active_record'
require 'paper_trail'
require 'minitest/autorun'
require 'logger'

# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Base.logger = Logger.new(STDOUT)

ActiveRecord::Schema.define do
  create_table :posts do |t|
    t.string :type
    t.string :title
    t.string :author
  end

  create_table :versions do |t|
    t.string :item_type, :null => false
    t.integer :item_id, :null => false
    t.string :event, :null => false
    t.integer :whodunnit
    t.text :object
    t.text :object_changes
    t.datetime :created_at
  end
end

# Papertrail nested classes
class Post < ActiveRecord::Base
  has_paper_trail
end

class NewsPost < Post; end
class BlogPost < Post; end

class BugTest < Minitest::Test
  def test_changing_type_with_inner_class
    post = NewsPost.create!
    post.update(type: 'BlogPost')
    updated_post = Post.find(post.id)
    assert_instance_of BlogPost, updated_post
  end
end

Not 100% certain but I'm guessing that this may have been fixed by the move for the update version recording callbacks from before_ to after_ (#375/#374).  Unless someone can reproduce this consistently then I believe this bug can be closed.

Looks like this was actually fixed as a byproduct of the fix for #428. I am going to backport this change to PaperTrail `3.x

Looks like this was actually fixed as a byproduct of the fix for #428 (contained in the master / PaperTrail 4.x branch). I am going to backport this fix to PaperTrail 3.x, and cut a 3.0.7 release containing the fix too.

Just wanted to follow up and confirm 4.x has fixed this issue!


Proposed schema changes (new schema version v3)

With the recent feedback from @tommysitu in ticket https://github.com/SpectoLabs/hoverfly/issues/563, I believe we need to make a change to the current simulation schema.
Currently, request queries are stored as strings. An example value for a request query could be "?queryOne=true". This could be a problem when using multiple query parameters. For example, if your request contains two query parameters, your HTTP client could send these in either order.
...
    "request": {
        "query": {
            "exactMatch": "?queryOne=true&queryTwo=false"
        }
    }
...
    "request": {
        "query": {
            "exactMatch": "?queryTwo=false&queryOne=true"
        }
    }

Instead, what we I believe we should do is change the request query option to behave like request headers. This means converting the query string into a key value map.
Before making this change, I think we need to also change headers. Right now, headers in the v2 simulation are fairly basic and follow how headers were recorded from v1. When the new matching options were added, we did not introduce the new matchers to headers.
My proposed change to requests will look like this
{
    "data": {
        "pairs": [
            {
                "request": {
                    "destination": {
                        "exactMatch": "hoverfly.io"
                    },
                    "query": {
                        "queryOne": {
                            "exactMatch": "true"
                        },
                        "queryTwo": {
                            "globMatch": "*"
                        },
                    },
                    "headers": {
                        "Content-Type": {
                            "globMatch": "*application/json*"
                        }
                    },
                }
            }
        ],
        "globalActions": {
            "delays": []
        }
    },
    "meta": {
        "schemaVersion": "v3",
        "hoverflyVersion": "v0.11.4",
        "timeExported": "2017-05-30T14:23:44+01:00"
    }
}

In conversation with @tommysitu, he reminded me of multiple values.
For example when using Hoverfly in capture mode.
curl --proxy localhost:8500 http://hoverfly.io -H "customHeader:one,two"

"headers": {
    "customHeader": [
        "one,two"
    ],
}

curl --proxy localhost:8500 http://hoverfly.io -H "customHeader:one" -H "customerHeader:two"

"headers": {
    "customHeader": [
        "one",
        "two"
    ],
}

curl --proxy localhost:8500 http://hoverfly.io?customQuery=one,two

"query": {
    "exactMatch": "customQuery=one,two"
}

curl --proxy localhost:8500 http://hoverfly.io?customQuery=one&customQuery=two

"query": {
    "exactMatch": "customQuery=one&customQuery=two"
}

With this schema change, I am proposing that when dealing with duplicate query paramaters or headers on inbound requests, we always combined the multiple values into a combined, comma separated value. This schema would introduce a more consist way of dealing with this.
"headers": {
    "customHeader": {
        "exactMatch": "one,two"
    },
}

"query": {
    "customQuery": {
        "exactMatch": "one,two"
    },
}

The main disadvantage with this would be that the order of query parameter values would matter when using exactMatch recordings of requests using duplicate query parameter keys. Right now, I feel that this is okay because this problem already exists with headers and should be addressed separately at another point.

We could have a new type of matcher for multi-values field in the future:
"query": {
    "customQuery": {
        "elementsMatch": ["one", "two"]
    },
}

@benjih The convention for query parameters is to repeat them, not have a comma separated list. Like this:
www.service.com?foo=1&foo=2&bar=1&foo=3
Which I would translate to something like:
"query": {
    "foo": [
        {
          "exactMatch": "1"
        },
        {
          "globMatch", "*"
        }
     ],
     "bar": {
        {
          "exactMatch": "3"
        }
     }
}

I'm not actually sure how it would work - an "at least once" strategy would be easiest, where it doesn't care about using the same field for each matcher. For example:
?foo=1&bar=3 is matched by both the exactMatch and globMatch for foo and bar is matched also. The problem with this though is it has no way of saying how many times the parameter needs to appear.

@mogronalol, with an array of matchers for the same field, it is ambiguous for how the matching will be done. Is it one matcher per value, or checking each value with all the matchers?
With your example, "exactMatch" : "1" will match foo=1, but not the others, so it is a match or not? what if I want to match all of them foo=1&foo=2&foo=3, do I need to define three exact matchers?
If the field has multiple values, then it is just an array. To match on array, we use array matcher, just like assertJ library in Java, we can match on:

contains any elements
contains exact elements
contains some elements
contains elements with certain patterns
ects.

@tommysitu That's what I was getting at by "at least once" where it doesn't care about using the same parameter multiple times. The problem, if you do otherwise, is that the ordering of the list should be ignored, in which case which case how do you know what element applies to each matcher?

So
foo=one&foo=two&foo=3
With a list of matchers for foo:
exactMatch=two,globmatch=*,exactMatch=3
How does it know what field belongs to each matcher?

Could you clarify what you mean @mogronalol?
Regarding your proposal, this is clearly a move towards defining multiple matchers an individual field, or in this situation, multiple matchers each field key.
If we are to go down this route, I think it would make the most sense to update the rest of the request object so that usage of matchers is consistent across fields. This would obviously increase the scope of work for this change.
I see the value in having multiple matchers across each of the fields. An area this would be most useful would be with the body field, opening up the opportunity for people to apply multiple JSONPath and XPath statements.
With the example you provided, I have to agree with @tommysitu. This is confusing. My first assumption was that the foo query had to 1 as its the only value that matches both "exactMatch": "1" and "globMatch", "*".
I think this would get even more confusing if we were to implement multiple matchers across a whole request. If we were to have multiple XPath matchers on the body, in that case, we are expecting them all to match. This is different behaviour for what you have suggested for the query.

If there is a list of values for a single query parameter, and you want a matcher for each one, then how will it work if the ordering of the list changes? There's no way of knowing which matcher applies to which element.

I think that complicates things too far. What we are proposing is that the matcher applies to the entire value of the query key. The value may be a single value, may be a comma separated list if multiple values are passed in.
The ordering is an issue when using multiple value, but I think its worth thinking about that in more detail while also considering multiple matchers elsewhere. Right now, the ordering issue is already present when using the current version of Hoverfly but the order effects both keys and values. This changes tries to mitigate and reduce the ordering issue only to requests that have multiple query values.


[BUG]: Cert-CSI Documentation missing requirement for OpenShift

Bug Description
as per: https://github.com/dell/csm/issues/1488
In OCP environment for ephemeral suite to pass it is mandatory for you to set this label in CSIDriver :
oc label csidriver csi-powerstore.dellemc.com security.openshift.io/csi-ephemeral-volume-profile=restricted
This information is missing from the Cert-CSI documentation here:
https://dell.github.io/csm-docs/docs/support/cert-csi/#ephemeral-volumes
Logs
n/a
Screenshots
No response
Additional Environment Information
No response
Steps to Reproduce
run the cert-csi test with powerstore on OpenShift 4.14 without the label
I believe this issue applies for OpenShift 4.13+
Expected Behavior
n/a
CSM Driver(s)
CSM 1.10, csi-powerstore 2.10.1
Installation Type
CSM-Operator 1.5.1
Container Storage Modules Enabled
No response
Container Orchestrator
OpenShift 4.14.8
Operating System
OpenShift 4.14.8

@dancohen21 This label will be applied to the CSIDriver resource in 1.12. I'll close this issue.

@atye Is this label something that should be applied in general, all the time, or only to run/pass the cert-csi validation script?

@dancohen21 It should be applied all the time. If the user wants to use inline volumes in a production setting outside of cert-csi, the label needs to be there.


Add Rs(108,106) code

Ensure that the code is generated for the Rs(108,106) decoder and that all tests pass. Add CI/CD for the decoder.

Decoder was added.


keyboard shortcut not working

running mac osx 10.10.5, app ver 0.5.2
i set the shortcut to view current song but can't use the shortcut outside of the spotify-notifications app. Don't know if it's a known issue, couldn't find a related issue. Thanks.

Same here, except I'm running OS X 10.11.4
It did work for me in the past.

I just figured out that it's working again when I set "Show only current song" to disabled.

@J0HAN85 Any idea as to why? What does "Show only current song" do, actually? What other song would notification show?

@rgbink Nope, I have no idea what is does or means.

I had the same issue on MacOS Sierra Version 10.12 (16A323).
Disabling "Show only current song" also worked for me.

This issue has been fixed in #56.


Upgrade versions

what

Upgrade versions to the latest

Migration Notes for Security Group v2.0
Key changes in v2.0

create_before_destory default changed from false to true
preserve_security_group_id added, defaults to false
Terraform version 1.0.0 or later required

why

The module fails when used with the latest https://github.com/cloudposse/terraform-aws-components

references

https://github.com/cloudposse/terraform-aws-components/pull/602

/test all

@johncblandii please run these commands and commit the changes
make init
make github/init
make readme

Done

/test all

/test all


[Question] How to check if a renewable subscription is active?

Hello, I am using the InAppBilling plugin to purchase different renewable subscriptions. First i want to set it up for iOS. It works good, but now I have to check if the subscription is active or canceled. I tried it with this code snippet:
var purchases = await CrossInAppBilling.Current.GetPurchasesAsync(ItemType.Subscription);
if(purchases == null)
{
    return false;
}
else
{
    foreach(var subscription in purchases)
    {
        Console.WriteLine(subscription);
    }
    return true;
}

The problem is, that this returns any purchase, including the canceled ones. The output for every purchase looks like this:
ProductId:com.myapp.subscription1 | AutoRenewing:False | State:Purchased | Id:myProductId
I am using the latest stable version of the plugin (2.0.0). I also asked a question on the Xamarin community forums, but no answer yet.
Maybe someone can help me, thanks in advance.

Hallo,
do you have any updates on this issue ? I tried V4.0.0.beta, but there is also this issue

Hi @ChristianGeiger2,
I think the only solution is to check if the subscription is still auto renewing. If it is auto renewing the user gets access to those features and if not, we need to get the date when it was purchased. Then we can check if the month/year/etc. is expired or not.. . A problem which I am noticed is, that the auto renewing boolean is always false, but I think this is a bug in apple sandbox..

Hallo @WorldOfBasti
i was debugging and i found a workaround. It is not pretty but currently it is working for IOS.

get the actual code from github
replace the nuget with the Plugin.InAppBilling prj. code (unfortunally in the the 4.0.0.beta the token is still missing)
load the purchases and verify the token -> expire-date (requires plist-cil )

  private bool IsPurchaseValid([CanBeNull] InAppBillingPurchase purchase)
       {
           if (Device.RuntimePlatform == Device.Android)
           {
               return purchase != null;
           }

           if (Device.RuntimePlatform == Device.iOS)
           {
               if (purchase == null) return false;

               var token = purchase.PurchaseToken;
               if (string.IsNullOrEmpty(token)) return false;

               var data1 = System.Convert.FromBase64String(token);
               if (!data1.Any()) return false;

               var receiptDic = (NSDictionary)PropertyListParser.Parse(data1);
               if (receiptDic == null) return false;

               var purchaseInfoContent = receiptDic.ObjectForKey("purchase-info").ToString();
               if (string.IsNullOrEmpty(purchaseInfoContent)) return false;

               byte[] data2 = System.Convert.FromBase64String(purchaseInfoContent);
               var purchaseInfoDic = (NSDictionary)PropertyListParser.Parse(data2);
               if (purchaseInfoDic == null) return false;

               var msStr = purchaseInfoDic.ObjectForKey("expires-date").ToString();
               if (string.IsNullOrEmpty(msStr)) return false;

               // Etc/GMT
               var expireDate = new DateTime(1970, 1, 1).AddMilliseconds(Convert.ToInt64(msStr));

               return DateTime.Now.ToUniversalTime() < expireDate;
           }
           return false;
       }

Just a workaround but i hope this helps.

According to this: Handling Subscriptions Billing
...
**There are two types of subscriptions you can offer in your app: non-renewing and auto-renewable. Non-renewing subscriptions differ from auto-renewable subscriptions in a few key ways. These differences give your app the flexibility to implement the correct behavior for a non-renewing subscription, as follows:
Your app is responsible for calculating the time period that the subscription is active and determining what content needs to be made available to the user.
Your app is responsible for detecting that a non-renewing subscription is approaching its expiration date and prompting the user to renew the subscription by purchasing the same product again.
Your app is responsible for making purchased subscriptions available across all the user’s devices and for letting users restore past purchases. For example, most subscriptions are provided by a server; your server would need some mechanism to identify users and associate subscription purchases with the user who purchased them.**

Thank you @ChristianGeiger2 very much, this works really good.
I came across the next problem: If the user starts the app another time, we need to check if any subscription is active/canceled/etc. so the user get access to those features.. Is there any solution?

to get this information you need to validate the receipt against the apple Server.
If you do this you will get something like this apple responsebody
I have not tested this lib, but it looks good!
--> AppleReceiptVerifier
--> response class

Hello @HolzetheKid, thank you for the explanation and the library. I tried to install this library, but I got following error while building:
Error MT2002: Failed to resolve assembly: 'AppleReceiptVerifier, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null' (MT2002) (myApp.iOS)

Hello @HolzetheKid ,
Thanks for sharing this workaround. Will it work after auto-renewable subscription whent it updates for next week/month/year? E.g. if we have monthly subscription, then will IsPurchaseValid method has updated 'expires-date' field to compare?

@nrcpp as soon as i know it should work.
--When an apple subscription is expired and auto renew is on, you will get an new InAppBillingPurchase purchase from apple.
This is a difference between to google and apple. apple always sends you every purchase you made in the past including the active one, where google sends you only the current one.
I am also pretty new to this stuff, so please test.

Hello everyone, I tested the subscriptions in the last few days. Again thanks to @ChristianGeiger2 and @HolzetheKid for the great code snippets and libraries.
I got it work on android but on iOS, I noticed some strange bugs. If I purchase a product after restoring, the purchase popup is not displayed and a purchase with state = restored is returned immediately. Does somebody has any idea?
Here is my code for Purchasing a subscription:
var billing = CrossInAppBilling.Current;
try
{
    var connected = await billing.ConnectAsync();
    if (!connected) return false;

    var purchase = await billing.PurchaseAsync(productIds[0], ItemType.Subscription);
    if (purchase == null) return false;
    else return true;
}
catch (InAppBillingPurchaseException purchaseEx) { Console.WriteLine(purchaseEx.ToString()); return false; }
catch (Exception ex) { Console.WriteLine(ex.ToString()); return false; }
finally
{
    await billing.DisconnectAsync();
}

and here is my code for Restoring subscriptions:
var billing = CrossInAppBilling.Current;
try
{
    var connected = await billing.ConnectAsync();
    if (!connected) return false;

    var purchases = await billing.GetPurchasesAsync(ItemType.Subscription);
    if (purchases == null) return false;
    else
    {
        foreach (var purchase in purchases)
        {
            if (IsPurchaseValid(purchase)) return true;
            else continue;
        }
    }
}
catch (InAppBillingPurchaseException purchaseEx) { Console.WriteLine(purchaseEx.ToString()); return false; }
catch (Exception ex) { Console.WriteLine(ex.ToString()); return false; }
finally
{
    await billing.DisconnectAsync();
}

The IsPurchaseValid Method is from @ChristianGeiger2, which is in his post above.

Hello all, seems like I'm not the only one seeing these issues re: auto-renewing subscriptions.
@ChristianGeiger2 - you quoted this from the Apple docs- "Your app is responsible for detecting that a non-renewing subscription is approaching its expiration date and prompting the user to renew the subscription by purchasing the same product again."
I have only 1 IAP in the app store and it is a monthly auto-renewing subscription and set as such in the item in the store.
The AutoRenewing flag is ALWAYS false in the purchase object returned from GetPurchasesAsync() or PurchaseAsync();
I assume that must be a bug in data coming from the App Store OR the InAppBilling plugin isn't interpreting the data correctly.
Also, I'm using a sandbox account so that also might be affecting what is returned. (...just THINKING...)
QUESTION - If the User has cancelled AutoRenewing but that flag is always returned as FALSE, how do we detect that that subscription IS actually cancelled. OR even continuing for that matter...
QUESTION - does anyone know if the AutoRenewing flag (with the CORRECT value) is contained in the PurchaseToken?
Any further advice/suggestion in handling auto-renewing subscriptions would be most welcome!
@jamesmontemagno?
IAP is so fundamental to building apps and Xamarin is such a great framework to do so, this functionality should really be cleaned up and made far more robust and PROBABLY SHOULD be part of the Xamarin.Essentials plugin. This should not be so difficult to make work! Even the IsPurchaseValid() method like the one posted above to parse up the PurchaseToken should be part of this framework. Just my opinion really.

Hello @blmiles,
I also noticed these strange bugs. I think this is a bug from apple sandbox and won't be there in production as well.
To answer your first question:
As I understood it, apple sends you always a new purchase if the current running time has expired (and the subscription wasn't cancelled). This means you only need to check if the subscription is active by the method from @ChristianGeiger2..
If I understand anything wrong please correct me!

@WorldOfBasti thanks for reply.
So, in your experience, you're seeing the AutoRenewing flag set appropriately in Production?
ie: in my case I'd expect that to be returned as TRUE unless the use has cancelled the subscription. In that case I'd provide the user access from the transactionDate to the transactionDate + 30 days. Being a monthly subscription.
And yes, I'm implementing @ChristianGeiger2 IsPurchaseValid method.
Also, if the purchase is renewable, the purchase.Id remains the same I believe, ie: it is the same purchase but renewed with a new PurchaseToken. Right?  :)
Handling the life-cycle of these auto-renewing subscription purchases seems quite a juggle.
Maybe I should hold off trying to deal with Promo items  :)

Hallo ,
i cannot test right know, but it seems that you need to get the 'pending_renewal_info' link from apple.
With the code above, you see that 'latest_receipt_info' link is stored in the Token. Maybe the complete 'unified_receipt' link is stored there! I am not able to thest this right now.
Hopfully this information helps!

@HolzetheKid, good idea but I THINK that if the AutoRenew is returned as false, there shouldn't be 'pending_renewal_info' available.
Part of the issue is AutoRenewing is ALWAYS false. Even on an auto-renewing subscription... :(
However, a very good suggestion, will see what I can extract!

Hello,
After running a purchase object through @ChristianGeiger2 IsPurchaseValid method, I get these named data items returned:
[0:] 0: original-purchase-date-pst
[0:] 1: quantity
[0:] 2: subscription-group-identifier
[0:] 3: unique-vendor-identifier
[0:] 4: original-purchase-date-ms
[0:] 5: expires-date-formatted
[0:] 6: is-in-intro-offer-period
[0:] 7: purchase-date-ms
[0:] 8: expires-date-formatted-pst
[0:] 9: is-trial-period
[0:] 10: item-id
[0:] 11: unique-identifier
[0:] 12: original-transaction-id
[0:] 13: expires-date
[0:] 14: transaction-id
[0:] 15: bvrs
[0:] 16: web-order-line-item-id
[0:] 17: bid
[0:] 18: product-id
[0:] 19: purchase-date
[0:] 20: purchase-date-pst
[0:] 21: original-purchase-date
[0:] 0: 2020-11-27 14:17:19 America/Los_Angeles
[0:] 1: 1
[0:] 2: 20712060
[0:] 3: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[0:] 4:<PHONE_NUMBER>000
[0:] 5: 2020-11-27 22:22:18 Etc/GMT
[0:] 6: false
[0:] 7:<PHONE_NUMBER>000
[0:] 8: 2020-11-27 14:22:18 America/Los_Angeles
[0:] 9: false
[0:] 10:<PHONE_NUMBER>
[0:] 11: 00008020-0012596A0CE8402E
[0:] 12:<PHONE_NUMBER>513385
[0:] 13:<PHONE_NUMBER>000
[0:] 14:<PHONE_NUMBER>794642
[0:] 15: 1.0
[0:] 16:<PHONE_NUMBER>810340
[0:] 17: com.xxxxxxxxxx.xxxxxxxxxxxx
[0:] 18: MyProdId001
[0:] 19: 2020-11-27 22:17:18 Etc/GMT
[0:] 20: 2020-11-27 14:17:18 America/Los_Angeles
[0:] 21: 2020-11-27 22:17:19 Etc/GMT
Looking at the 'purchase-date', 'expires-date', one can see the differences (5 min diff in sandbox).
My in-app-purchase item IS a monthly auto-renewable item and the correct 'product-id' is being returned.
NOTE: There is NO reference to an AutoRenewable subscription, NO reference to any Grace Period or any field related to the Pending_renewal_info data.
QUESTION, by making this call:
var purchase = await billing.PurchaseAsync(productId, ItemType.Subscription, verify);
How does one get 'Pending_renewal_info' data?
Is this an InAppBilling issue/error or is this errant data coming from the App Store and testing Sandbox mode?
@HolzetheKid
@ChristianGeiger2 ?
@jamesmontemagno ?
Anyone else?

Looking at the 'purchase-date', 'expires-date', one can see the differences (5 min diff in sandbox). The Sandbox has different times than the "real life" where 5 min means 1 month in real life link
For the other problem i cannot help you. I don't know what apple is sending you there and how the data is usable.

At least the date/time of purchase and expires date/time are being set.
It is other subscription and auto-renewal data that is not being returned properly.
You had cited the 'Pending_renewal_info' data.
Have you been able to get that out of a Purchase object?
Like the fields listed in the LINK you posted?
I'm going to go with the understanding I know my item in the App Store is an Auto-Renewable monthly subscription.
Also, the 'Grace Period' is also ON for my IAP in the store.
I guess I just need to continue with those two details as assumed known constants and complete my code accordingly without this futile battle to find crap that just isn't forthcoming.
And I haven't even looked at handling Promotion items or 'intro-offer-period' yet ... heaven forbid, LOL.
Maybe I'll post my code when I'm satisfied with it as I'm sure many others are fighting a similar battle.

Hallo @WorldOfBasti
i was debugging and i found a workaround. It is not pretty but currently it is working for IOS.

get the actual code from github
replace the nuget with the Plugin.InAppBilling prj. code (unfortunally in the the 4.0.0.beta the token is still missing)
load the purchases and verify the token -> expire-date (requires plist-cil )

  private bool IsPurchaseValid([CanBeNull] InAppBillingPurchase purchase)
       {
           if (Device.RuntimePlatform == Device.Android)
           {
               return purchase != null;
           }

           if (Device.RuntimePlatform == Device.iOS)
           {
               if (purchase == null) return false;

               var token = purchase.PurchaseToken;
               if (string.IsNullOrEmpty(token)) return false;

               var data1 = System.Convert.FromBase64String(token);
               if (!data1.Any()) return false;

               var receiptDic = (NSDictionary)PropertyListParser.Parse(data1);
               if (receiptDic == null) return false;

               var purchaseInfoContent = receiptDic.ObjectForKey("purchase-info").ToString();
               if (string.IsNullOrEmpty(purchaseInfoContent)) return false;

               byte[] data2 = System.Convert.FromBase64String(purchaseInfoContent);
               var purchaseInfoDic = (NSDictionary)PropertyListParser.Parse(data2);
               if (purchaseInfoDic == null) return false;

               var msStr = purchaseInfoDic.ObjectForKey("expires-date").ToString();
               if (string.IsNullOrEmpty(msStr)) return false;

               // Etc/GMT
               var expireDate = new DateTime(1970, 1, 1).AddMilliseconds(Convert.ToInt64(msStr));

               return DateTime.Now.ToUniversalTime() < expireDate;
           }
           return false;
       }

Just a workaround but i hope this helps.

@ChristianGeiger2
Have you done something similar with Android purchase tokens?
I cannot seem to find a reference to what is in that token from the Play Store.
Also finding it difficult to implement/test/debug as we can only hit the Play Store from a signed release-mode app.
Any help/advice would be great!
Works great dealing with iOS purchases!

For my tests I can say, that you don't need something similar for android. Google sends you only a purchase if the subscription is active, so you only need to check if the purchases are null.
Here an example which you can find in the InAppBilling docs:
        //check for null just incase
        if(purchases?.Any(p => p.ProductId == productId) ?? false)
        {
            //Purchase restored
            return true;
        }
        else
        {
            //no purchases found
            return false;
        }

It works fine for me..

Thanks @WorldOfBasti, I'll give it a try.
I don't particularly like it but if that's what Google does then I guess we've gotta go with it...
It'd still be good to parse up the purchase token though so I can store certain parts of the data.
Also REALLY annoying that IAPs cannot be tested in debug mode, at least not that I've been able to figure out.
Thx

@Blmiles
Do you have any idea how the results below work in a production environment? Have you had a chance to test it?
I am particularly curious about the AutoRenewing and IsAcknowledged result.
Thanks in advance.
"Id": "xxxxxxxxxxxxxxxx",
"TransactionDateUtc": "2021-03-29T20:21:54Z",
"ProductId": "xxx",
"AutoRenewing": false,
"PurchaseToken": "xxxxxxxxxxxxxxxxxxx",
"State": 0,
"ConsumptionState": 0,
"IsAcknowledged": false,
"Payload": null

I don't use subscriptions, but I would assume on iOS you just loop through all of your purchases, find the newest, and calculate if it is valid for the current time span.

https://montemagno.com/ios-android-subscription-implemenation-strategies/

Hi @jamesmontemagno ,
I've just dropped you a msg on this issue on another comments board and then came across this board where the issue is discussed in more depth. I've read through your subscription strategies blog above but the issue the commenters raise above is not covered and the problem remains: i.e. the AutoRenewing flag is always set to false in sandbox testing, even when a brand new Auto-Renewable Subscription has been purchased. I've gone through your InAppBilling code and could be wrong, but can't see where this value is being assigned.
Is there anyway we can get this value through the plugin?
This is needed not necessarily to calculate whether a subscription is still active, as that can be done via transaction dates, but more to give the user meaningful feedback through the app UI, of the status of their subscription.


MatTable: Fix broken paginator when infinite items selected

The calculation for TotalPages now uses Math.Max(1,...) to avoid a broken paginator when "*"/-1 is selected.
For the future, I think calculating/setting the TotalPages and other Properties concerning pagination could be refactored because there is a lot of code copies.
@SamProf You can open up a issue if you want to discuss it.
Closes #170

Thank you so much for your contribution!


Add Why StaffSync, Modify full width code, padding

Describe your changes
Refer to title

Issue ticket number and link
Builds on #154
Checklist before requesting a review

[x] I have performed a self-review of my code.
[x] If it is a core feature, I have added thorough tests.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
see 1 file with indirect coverage changes


[e2e]: delegator-lowperms create main default slsa3

Repo: https://github.com/slsa-framework/example-package/tree/v46.0.13
Run: https://github.com/slsa-framework/example-package/actions/runs/5692320936
Workflow file: https://github.com/slsa-framework/example-package/tree/main/.github/workflows/e2e.delegator-lowperms.create.main.default.slsa3.yml
Workflow runs: https://github.com/slsa-framework/example-package/actions/workflows/e2e.delegator-lowperms.create.main.default.slsa3.yml
Trigger: create
Branch: v46.0.13
Date: Fri Jul 28 13:12:45 UTC 2023

Repo: https://github.com/slsa-framework/example-package/tree/v46.0.14
Run: https://github.com/slsa-framework/example-package/actions/runs/5700584412
Workflow file: https://github.com/slsa-framework/example-package/tree/main/.github/workflows/e2e.delegator-lowperms.create.main.default.slsa3.yml
Workflow runs: https://github.com/slsa-framework/example-package/actions/workflows/e2e.delegator-lowperms.create.main.default.slsa3.yml
Trigger: create
Branch: v46.0.14
Date: Sat Jul 29 13:10:07 UTC 2023
Tests are passing now. Closing this issue.


Move source code directory from src to src/cybergaer_m5

To avoid conflicts with include files, modify the directory structure of the library.

The following modifications will be implemented.

[ ] move source code from src to src/cybergear_m5
[ ] add namespace cybergear_m5 to avoid class name avoidance


Enable Matomo to collect privacy friendly information about app usage

Use Matomo to collect privacy friendly information / events about specifically Winden.app usage, which could help us understand users experience, product usage and help make decisions for future improvements.

[ ] how many Users come to Winden.app but not started sending files
Note: Partly covered with web access_log statistics, collect total amount of sessions;
[ ] how many Users come to Winden.app and initiated send files
Note: Mailbox will show only total connection amount for specific agent, but we don't know if it is sent or recieved
[ ] how many Users successfully sent files in Winden.app
[ ] how many Users successfully received files in Winden.app
[ ] how many Users canceled sending files in Winden.app
[ ] how many Users failed to receive files in Winden.app
[ ] What file sizes are sent via Winden.app
Note: Relay statistics cover only general traffic, cannot separate per agency
[ ] how many Users visited other statics pages: Feedback/ Faq/ Privacy / Terms / For Business
Note: Access_log will not show any internal SPA usage
[ ] Do users try upload large files, which not yet supported
[ ] What file types Users are sending via Winden.app
[x] What regions/ countries Users are coming from
Note: Covered by access_log statistics
[ ] How devices users are accessing to Winden.app to send files and receive files separately
Note: Covered only general statistics by access_log statistics. We cannot separate from what device to which we are sending.
[ ] Do users get any errors while using Winden.app and what kind of errors
Note: Access_logs doesn't cover this

Note: Initial list to discuss what should be and should not be collected. Some information is already collected in Magic-Wormhole backend, but it is common for any clients, who use it and doesn't allow fully separate Winden information and behaviour.

A lot of these do not require Matomo (i.e. we have the statistics already).
I don't love the idea of collecting metrics and although Matomo says "privacy friendly" on the label, it's only really "more private than Google Analytics".
So, can we at least separate the list above into stats we already have versus those that we can only get via client-side javascript profiling?

Currently we have three source of data:

access_logs, which covers only data related with GET/POST request and doesn't provide internal insides of our SPA application behavior. We can get total amount of visitors, there geo location country/region, bots/robots data
Mailbox db - only covers if to pairs connected or not, but doesn't say anything about transfer if it was successful or not. Even if mailbox logs today agent, however we cannot group by agent and identify how many connections per specific agent we had
Relay db - only covers connections via relay, but lacks of agent identification and doesn't say anything about transfer success or failure itself, where there interruption, did client click cancel or it was other reasons.

Some questions we can try to answer indirectly and with assumptions, for example if we had 300 successful mailbox connections, we assume there was 300 successful transfers and if there are 100 relays connections, then 200 connection where P2P.
However if we look from Winden.app usage perspective, not much we can answers.
Another thing, we we move away from WebHosting and we could get rid of access_log at all and have only specific events collections for analytic

There are never p2p connections from Winden.
I don't understand what the sentence about "move away from WebHosting" means.
You can correlate relay traffic to specific mailboxes via IP addresses.
"What file types": why does this even matter?

None of this says what we hope to learn.
With a handful of users and barely any operational experience, why does it matter who clicked "cancel"? What decision will that drive? What is a high-level question we're trying to answer here that requires the collection of any of these data at all (let alone the ones that can only be done via client-side, invasive tracking like Matomo)?

Please file a ticket describing "Why" before we can possibly approach or evaluate any implementation detail such as "Matomo", or server-side statistics, or anything else.


Mailbox adding - server error 500

Hi,
I am trying to create a new mailbox in the below format.
imap+ssl://youremailaddress%40gmail.com:1234@imap.gmail.com?archive=Archived
but its getting a server error 500 . How can i resolve this.

Assuming you're running Docker containers, can you check the logs of the Nginx and Cyphon containers to see if you can find more info on the error? You can try these commands from the cyphondock working directory:
docker-compose logs -f nginx
docker-compose logs -f cyphon

Thanks for your reply.
docker-compose logs -f cyphon
cyphon_1         | SyntaxError: invalid syntax
cyphon_1         | [2017-10-17 07:51:39 +0000] [26] [ERROR] Exception in worker process
cyphon_1         | Traceback (most recent call last):
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
cyphon_1         |     self.wsgi = self.app.wsgi()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
cyphon_1         |     self.callable = self.load()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
cyphon_1         |     return self.load_wsgiapp()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
cyphon_1         |     return util.import_app(self.app_uri)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
cyphon_1         |     import(module)
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/init.py", line 21, in
cyphon_1         |     from .celeryapp import app as celery_app
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/celeryapp.py", line 33, in
cyphon_1         |     app = Celery('cyphon', broker=settings.BROKER_URL, include=['cyphon.tasks'])
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 56, in getattr
cyphon_1         |     self._setup(name)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 41, in _setup
cyphon_1         |     self._wrapped = Settings(settings_module)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 110, in init
cyphon_1         |     mod = importlib.import_module(self.SETTINGS_MODULE)
cyphon_1         |   File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
cyphon_1         |     return _bootstrap._gcd_import(name[level:], package, level)
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/settings/prod.py", line 21, in
cyphon_1         |     from .base import *
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/settings/base.py", line 23, in
cyphon_1         |     from .conf import *
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/settings/conf.py", line 19
cyphon_1         |     'ALLOWED_HOSTS': [],
cyphon_1         |                        ^
cyphon_1         | SyntaxError: invalid syntax
cyphon_1         |
cyphon_1         | During handling of the above exception, another exception occurred:
cyphon_1         |
cyphon_1         | Traceback (most recent call last):
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
cyphon_1         |     worker.init_process()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
cyphon_1         |     self.load_wsgi()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 148, in load_wsgi
cyphon_1         |     self.reloader.add_extra_file(exc_val.filename)
cyphon_1         | AttributeError: 'NoneType' object has no attribute 'add_extra_file'
cyphon_1         | Traceback (most recent call last):
cyphon_1         |   File "manage.py", line 26, in
cyphon_1         |     execute_from_command_line(sys.argv)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 364, in execute_from_command_line
cyphon_1         |     utility.execute()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 308, in execute
cyphon_1         |     settings.INSTALLED_APPS
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 56, in getattr
cyphon_1         |     self._setup(name)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 41, in _setup
cyphon_1         |     self._wrapped = Settings(settings_module)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 110, in init
cyphon_1         |     mod = importlib.import_module(self.SETTINGS_MODULE)
cyphon_1         |   File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
cyphon_1         |     return _bootstrap._gcd_import(name[level:], package, level)
cyphon_1         |   File "", line 994, in _gcd_import
cyphon_1         |   File "", line 971, in _find_and_load
cyphon_1         |   File "", line 941, in _find_and_load_unlocked
cyphon_1         |   File "", line 219, in _call_with_frames_removed
cyphon_1         |   File "", line 994, in _gcd_import
cyphon_1         |   File "", line 971, in _find_and_load
cyphon_1         |   File "", line 941, in _find_and_load_unlocked
cyphon_1         |   File "", line 219, in _call_with_frames_removed
cyphon_1         |   File "", line 994, in _gcd_import
cyphon_1         |   File "", line 971, in _find_and_load
cyphon_1         |   File "", line 955, in _find_and_load_unlocked
cyphon_1         |   File "", line 665, in _load_unlocked
cyphon_1         |   File "", line 678, in exec_module
cyphon_1         |   File "", line 219, in _call_with_frames_removed
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/init.py", line 21, in
cyphon_1         |     from .celeryapp import app as celery_app
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/celeryapp.py", line 33, in
cyphon_1         |     app = Celery('cyphon', broker=settings.BROKER_URL, include=['cyphon.tasks'])
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 56, in getattr
cyphon_1         |     self._setup(name)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 41, in _setup
cyphon_1         |     self._wrapped = Settings(settings_module)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 110, in init
cyphon_1         |     mod = importlib.import_module(self.SETTINGS_MODULE)
cyphon_1         |   File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
cyphon_1         |     return _bootstrap._gcd_import(name[level:], package, level)
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/settings/prod.py", line 21, in
cyphon_1         |     from .base import *
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/settings/base.py", line 23, in
cyphon_1         |     from .conf import *
cyphon_1         |   File "/usr/src/app/cyphon/cyphon/settings/conf.py", line 19
cyphon_1         |     'ALLOWED_HOSTS': [],
cyphon_1         |                        ^
cyphon_1         | SyntaxError: invalid syntax
cyphon_1         | Traceback (most recent call last):
cyphon_1         |   File "manage.py", line 26, in
cyphon_1         |     execute_from_command_line(sys.argv)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 364, in execute_from_command_line
cyphon_1         |     utility.execute()
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 308, in execute
cyphon_1         |     settings.INSTALLED_APPS
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 56, in getattr
cyphon_1         |     self._setup(name)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 41, in _setup
cyphon_1         |     self._wrapped = Settings(settings_module)
cyphon_1         |   File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 110, in init
cyphon_1         |     mod = importlib.import_module(self.SETTINGS_MODULE)
cyphon_1         |   File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module
cyphon_1         |     return _bootstrap._gcd_import(name[level:], package, level)
cyphon_1         |   File "", line 994, in _gcd_import
cyphon_1         |   File "", line 971, in _find_and_load
cyphon_1         |   File "", line 941, in _find_and_load_unlocked
cyphon_1         |   File "", line 219, in _call_with_frames_removed
cyphon_1         |   File "", line 994, in _gcd_import
cyphon_1         |   File "", line 971, in _find_and_load
cyphon_1         |   File "", line 941, in _find_and_load_unlocked
cyphon_1         | Error grabbing logs: invalid character 'l' after object key:value pair
^A
docker-compose logs -f nginx
ko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:35:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:36:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:37:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:38:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:39:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:40:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:41:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:42:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:43:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:44:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:45:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:46:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:47:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:48:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:49:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:50:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:51:30 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:52:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:53:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:54:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:55:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:56:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:57:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:58:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:16:59:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:00:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:01:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:02:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:03:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:04:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:05:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:06:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:07:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:08:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:09:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:10:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:11:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:12:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:13:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:14:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:15:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | <IP_ADDRESS> - - [16/Oct/2017:17:16:31 +0000] "GET /api/v1/monitors/enabled/ HTTP/1.1" 200 749 "http://localhost/app/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"
nginx_1          | Error grabbing logs: invalid character 'l' after object key:value pair
Errors details are given below. Can you please help me to solve this.

inginx error log from other ec2 instance where cyphondocke installed.
azonaws.com, request: "GET / HTTP/1.0", upstream: "http://<IP_ADDRESS>:8000/"
nginx_1          | 2017/10/23 23:31:48 [warn] 8#8: *119 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.0", upstream: "http://<IP_ADDRESS>:8000/"
nginx_1          | <IP_ADDRESS> - - [23/Oct/2017:23:31:48 +0000] "GET / HTTP/1.0" 502 173 "-" "Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Firefox/31.0"
nginx_1          | 2017/10/24 00:01:03 [error] 8#8: *122 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.0", upstream: "http://<IP_ADDRESS>:8000/"
nginx_1          | 2017/10/24 00:01:03 [warn] 8#8: *122 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.0", upstream: "http://<IP_ADDRESS>:8000/"
nginx_1          | 2017/10/24 00:01:03 [error] 8#8: *122 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.0", upstream: "http://<IP_ADDRESS>:8000/"
nginx_1          | 2017/10/24 00:01:03 [warn] 8#8: *122 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.0", upstream: "http://<IP_ADDRESS>:8000/"
nginx_1          | <IP_ADDRESS> - - [24/Oct/2017:00:01:03 +0000] "GET / HTTP/1.0" 502 173 "-" "sysscan/1.0 (https://github.com/robertdavidgraham/sysscan)"
nginx_1          | 2017/10/24 06:21:57 [error] 8#8: *125 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "<IP_ADDRESS>"
nginx_1          | 2017/10/24 06:21:57 [warn] 8#8: *125 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "<IP_ADDRESS>"
nginx_1          | 2017/10/24 06:21:57 [error] 8#8: *125 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "<IP_ADDRESS>"
nginx_1          | 2017/10/24 06:21:57 [warn] 8#8: *125 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "<IP_ADDRESS>"
nginx_1          | <IP_ADDRESS> - - [24/Oct/2017:06:21:57 +0000] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
nginx_1          | 2017/10/24 08:35:17 [error] 8#8: *128 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "ec2-52-91-99-166.compute-1.amazonaws.com"
nginx_1          | 2017/10/24 08:35:17 [warn] 8#8: *128 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "ec2-52-91-99-166.compute-1.amazonaws.com"
nginx_1          | 2017/10/24 08:35:17 [error] 8#8: *128 connect() failed (111: Connection refused) while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "ec2-52-91-99-166.compute-1.amazonaws.com"
nginx_1          | 2017/10/24 08:35:17 [warn] 8#8: *128 upstream server temporarily disabled while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://<IP_ADDRESS>:8000/", host: "ec2-52-91-99-166.compute-1.amazonaws.com"
nginx_1          | <IP_ADDRESS> - - [24/Oct/2017:08:35:17 +0000] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
nginx_1          | 2017/10/24 08:35:18 [error] 8#8: *128 no live upstreams while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://localhost/favicon.ico", host: "ec2-52-91-99-166.compute-1.amazonaws.com", referrer: "http://ec2-52-91-99-166.compute-1.amazonaws.com/"
nginx_1          | <IP_ADDRESS> - - [24/Oct/2017:08:35:18 +0000] "GET /favicon.ico HTTP/1.1" 502 575 "http://ec2-52-91-99-166.compute-1.amazonaws.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
nginx_1          | 2017/10/24 08:35:20 [error] 8#8: *128 no live upstreams while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://localhost/", host: "ec2-52-91-99-166.compute-1.amazonaws.com"
nginx_1          | <IP_ADDRESS> - - [24/Oct/2017:08:35:20 +0000] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
nginx_1          | 2017/10/24 08:35:20 [error] 8#8: *128 no live upstreams while connecting to upstream, client: <IP_ADDRESS>, server: ec2-52-91-99-166.compute-1.amazonaws.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://localhost/favicon.ico", host: "ec2-52-91-99-166.compute-1.amazonaws.com", referrer: "http://ec2-52-91-99-166.compute-1.amazonaws.com/"
nginx_1          | <IP_ADDRESS> - - [24/Oct/2017:08:35:20 +0000] "GET /favicon.ico HTTP/1.1" 502 575 "http://ec2-52-91-99-166.compute-1.amazonaws.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

Thanks! Can you double check your conf.py file for a syntax error?:
cyphon_1 | from .conf import *
cyphon_1 | File "/usr/src/app/cyphon/cyphon/settings/conf.py", line 19
cyphon_1 | 'ALLOWED_HOSTS': [],
cyphon_1 | ^
cyphon_1 | SyntaxError: invalid syntax

Resolved through https://github.com/dunbarcyber/cyphondock/issues/38.


the version in npm is too older

it's updated index.d.ts and .podspec in the master
but the package is ancient version.
please update it, it's will be great

please @yorkie can you publish the current version on npm?

Released 1.9.11 already :)


Remove the num_enum dependency

This improves compile times by ~30% by removing a transitive dependency on proc-macro-crate, thiserror and toml. While this duplicates a bit of code, I think it is worth the significant compile time improvement.
Before

After

Cargo.lock diff
diff --git a/Cargo.lock b/Cargo.lock
index b9b2300..1fb576e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -140,7 +140,6 @@ dependencies = [
  "ctor",
  "env_logger",
  "log",
- "num_enum",
  "scopeguard",
  "serde",
  "serde_json",
@@ -263,43 +262,12 @@ dependencies = [
  "version_check",
 ]

-[[package]]
-name = "num_enum"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "720d3ea1055e4e4574c0c0b0f8c3fd4f24c4cdaf465948206dea090b57b526ad"
-dependencies = [
- "num_enum_derive",
-]
-
-[[package]]
-name = "num_enum_derive"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21"
-dependencies = [
- "proc-macro-crate",
- "proc-macro2",
- "quote",
- "syn",
-]
-
 [[package]]
 name = "peeking_take_while"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"

-[[package]]
-name = "proc-macro-crate"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83"
-dependencies = [
- "thiserror",
- "toml",
-]
-
 [[package]]
 name = "proc-macro-error"
 version = "1.0.4"
@@ -505,35 +473,6 @@ dependencies = [
  "unicode-width",
 ]

-[[package]]
-name = "thiserror"
-version = "1.0.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
-dependencies = [
- "thiserror-impl",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.30"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "toml"
-version = "0.5.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
-dependencies = [
- "serde",
-]
-
 [[package]]
 name = "unicode-segmentation"
 version = "1.8.0"

Thanks for the feedback! I've merged your PR.


Text raw tag editor / Copy-paste tags

This change adds ability to toggle between the list view and a text view of tags, so that people can make faster tag edits or copy/paste tags.
closes #6185
closes #839

It works like this ✨

Does iD have code already that is able to resize the height of an textarea based on its content? (Like https://css-tricks.com/textarea-tricks/#article-header-id-6) I would not add it just for this element (it's quite a bit of JS just for this**), but if it only needs to be "activated" for this textarea, it would be nice for the last bit of the GIF where the text area has a scrollbar.

**) The <div contenteditable> approach from the article above might be a less-code solution that works in this case; also maybe for the autocorrect issue?

Wow, happy to see any progress for (bulk) copy/paste function :-)
Yes, maybe the window height could increased a litte bit same time while when pasting the new lines? At that moment:

This is good enough to merge now..
Please try it out in http://preview.ideditor.com/master/ and open any followup issues that you find!

Some folks add new line characters in the description: https://www.openstreetmap.org/way/463013906
Would this work as is?

Some folks add new line characters in the description: https://www.openstreetmap.org/way/463013906
Would this work as is?

Yep, that's handled in 16ec25753
I'm using JSON.stringify to escape newlines and other unprintable characters.

ok, looks good, newline got replaced by an \n
I found one issue with two rows having the same key: one of them gets discarded silently when I switch back to the list.
sport=soccer
sport=rugby

I found one issue with two rows having the same key: one of them gets silently discarded when I switch back to the list.

I think the preferred behavior would be to overwrite the old value, if any.

I think the preferred behavior would be to overwrite the old value, if any.

It just keeps whichever is the last one in the list.  I'm ok with this, since I'd expect people to paste their new values at the end of the list.

Maybe change the blue and grey colour:

(blue for clickable items, like "zoom to this" / "All fields" / "All tags")?

Maybe change the blue and grey colour:
(blue for clickable items, like "zoom to this" / "All fields" / "All tags")?

Oh yeah, I was thinking about this too.  I do like using a consistent blue for links. Maybe I could make it look more like these toggles we use elsewhere:

yes.
Or just one blue button, with remaining blue colour, but changing list icon <=> cursor icon? I'm not sure...


[API] Use Gin insted of mux

Use gin insted of mux. for Panic-recovering and better JSON handling, etc.
(URI should be same with mux if possible)
https://github.com/FlowingSPDG/get5-web-go/tree/gin

https://github.com/FlowingSPDG/get5-web-go/pull/133

https://github.com/FlowingSPDG/get5-web-go/commit/93a480ac4e4ff7def2538779b37c5844cfcd9326


i have create vue3 compotents

i have write some compotents in packages and i will build it to a file of js

i have writer a script for complie it to js . but i want define the outfile the path and the name,but it can work

i use command  node index.js
the correct file will create in path web and name wike-ui.esm.js but now the script create the filepaht in dist/_assert.

Pass assetsDir with ''.  Note :  Also pass emitIndex with falseto disable index.html generation.


FORMULA ADDRESS has some error

show the code
the func need col,row but address transmits col,col

Thanks for your feedback. Would you like to create a pull request to fix it? or I'll fix it recently.

OK, I am willing to do that

OK, I am willing to do that


HitQueuing Disabled/enabled state support

Add the ability for HitQueueing to be put in a disabled and enabled state. When the queue is disabled it will ignore all incoming queued hits.

@nporter-adbe do we still need this enhancement?

@nporter-adbe do we still need this enhancement?

@shalehaha I don't think we need this. Feel free to re-open if you think otherwise.

@shalehaha I don't think we need this. Feel free to re-open if you think otherwise.


run specifics tests

script test allow arguments passed after --, to the process (karma), example
npm test -- --grep=mn-input
where --grep is a argument passed to karma
greep is to filter tests, and run only matched
but for any reason dont work, we need resolve this
maybe be a problem in karma, or karma-mocha, I do know, need a investigation

It's a great behavior run in specifics arguments!
Any news I'll let you know.


Add include_in_every_saturn

Based on https://github.com/saturncloud/decision-records/pull/33, we are going to be adding this field to Saturn proper. I think this can be done in isolation, but I'll let integration tests prove me right or wrong :)

Integration tests run: https://github.com/saturncloud/release-images/actions/runs/770970573

Ooh yeah, good thinking.

The integration tests ran fine, they didn't quite pass, but that's due to flakiness not this change.


Added missing no_branch_lines method from CodeUnit to FileReporter

The child class, CodeUnit, implements a method called no_branch_lines which is used when branch=True. This method was missing from the parent class, FileReporter, and has now been added.

Thanks, I've added this to the bitbucket repo: https://bitbucket.org/ned/coveragepy/commits/7e7e6b97f138fd51a6d1af911ef58b7be631f669


Expenses Redesign

For https://github.com/OpenCollective/OpenCollective/issues/165

Donations has also been affected by the redesign

Related:
https://github.com/OpenCollective/OpenCollective/issues/174

How does it scale on phone screens?

Tested it on mobile - looks great. Can you add a link "Submit another expense" after the expense is submitted.

When the user is logged, it's not pre-filling any of the fields. It should prefill email (and not let you edit it). Everything else is fine to let you edit.


Use a commit message linter in CI

It'd be great to have a commit message linter to check for common formatting errors; this would save a good amount of time reviewing code.  In practice, for Zulip, the common errors I see, in rough order of frequency:

Not using a "." at the end of sentences
Using a different tense than action-verb.  E.g. "Fix foo" is correct style for Zulip, not "Fixed foo" or "Fixing foo".
Too long lines in commit messages
No blank line between the subject and body of the commit message.

There are few technical challenges here:

Need to figure out how to access commit history from Travis CI (this may be difficult, so seems like the first thing to check).  If we can do that, it'd be trivial to at least code some of these manually.
Pick a tool to use.  I've looked into a few:

https://jorisroovers.github.io/gitlint/ is a Python tool missing some key functionality )
https://github.com/jorisroovers/gitlint/issues/14#issuecomment-228698842)
https://github.com/marionebl/conventional-changelog-lint has a broader featureset, but seemed buggy when I played with it (was hard to override defaults that didn't match what we want). It's "tense" feature sounds valuable though.

Configure it and profit!

Need to figure out how to access commit history from Travis CI (this may be difficult, so seems like the first thing to check). If we can do that, it'd be trivial to at least code some of these manually.

What do you think about using the github api for this? Travis CI exposes a TRAVIS_PULL_REQUEST Environment Variable, which could be used to form urls like https://api.github.com/repos/zulip/zulip/pulls/1115/commits that contain commit messages and shas for all the commits in a PR.

Yeah, that probably works.  Also worst case we can just clone the relevant PR in the check if we have the commit ID.

@timabbott : what if we use something like pre commit hook. Mozilla Fjord has a very nice implementation of this. I can take this up.

Users can run tools/lint-all as a pre-commit hook if they like already (one can set this up using tools/setup-git-repo), and I'd like the check to run in CI, so I'd rather do this via adding something to tools/lint-all than trying to do a pre-commit hook.

@zulipbot claim

https://github.com/jorisroovers/gitlint/pull/21 is nearly getting merged.

@tommyip have you had a chance to work on the pre-commit hook issue yet?  It'd be great to get this resolved, since I think it'd save me a ton of time :)


Type Error : Object is being assigned to a read-only property

any idea why this occurs? the code used is
const ChangesComponent = (data) => {

    const [diff, setDiff] = useState(null)

    setDiff(differ.diff(data?.old, data?.new))

    const differ = new Differ({
        detectCircular: true,
        maxDepth: Infinity,
        showModifications: true,
        arrayDiffMethod: 'lcs',
    })

    return(
        <Viewer
            diff={diff}
            indent={2}
            lineNumbers={true}
            highlightInlineDiff={false}
            inlineDiffOptions={{
                mode: 'word',
                wordSeparator: ' ',
            }}
        />
    )
}

This only happens on the second render. Not on first. Also noticed that theres no error if the newValue is just ``. when both old value and new value is added, it crashes.

It seems the result (which should be a normal array) is somehow frozen, but there's no such thing as Object.freeze or Object.defineProperty used in both the source code and build result of json-diff-kit.
I guess there may be a bundler plugin or browser extension that can auto-freeze some values, but I'm not confident about it, could you provide a minimal reproducible repo so that I can dig further?


Syntax Error in dlio_benchmark.py

Hello again.
finally i installed dlio_benchmark and run it. but i got syntaxkError.
SyntaxError: Non-ASCII character '\xc2' in file ./src/dlio_benchmark.py on line 3, but no encodign declared;
how can i resolve this error. Thanks.

@zhenghh04
working on unbuntu 20.04.

@zhenghh04
Works Well!!!! THANKS!!!


[Shows] When at a fair, use 'booth' instead of 'show'.

See https://github.com/artsy/eigen/issues/1138#issuecomment-217852442

Oops, this was already done.


Quest disconnects 2-5 seconds after I enter SteamVR

Please follow the general troubleshooting steps first:

[x] I ran "add_firewall_rules.bat" as adimistrator and checked that the ports are open in the firewall
[x] I read the ALVR Wikis here and here

If your issue is about games not working, please open an issue for every game and list the game in the title.
Bug reports:
Everything looks good and connects, but 2-5 seconds after I connect the quest headset disconnects but I can hear the controllers still sending an input (press B and steamvr makes a noise)
I've tried several versions of ALVR and all have same result. Tried 5 different network configurations as well. All ports forwarded.
I think the update to 17 maybe to blame?
Environement
What hardware do you have: 9750h, 1660ti, Audio
What version of ALVR and SteamVR have you tried. v10, v9, v5, v3
Do you have the latest Windows updates? Run "winver" in Windows 10 to get the version number - yes
Features:
Please note by far the quickest way to get a new feature is to file a Pull Request.
We will consider your request but it may be closed if it's something we're not actively planning to work on.

did you deactivate the "smartconnect" (maybe other name) function in your router?
otherwise it will switch between 5G and 2.4G Wifi with short disconnects... make sure the quest is connected all the time to 5G WIFI (recommendation: 80 MHz bandwith)


Hello rails backend

Create a new Rails API app called 'hello-rails-back-end'.
Initialize your project with Git.
Make sure that your project has a Postgres database set up.
Create a table for storing your messages and create 5 different greetings.
Create an API endpoint that selects a random greeting from your table (you will need a controller with an action and rails route).

Hello @fatmahussein could  you check your slack?


Consolidate user options in different commands

We have several commands that allow to input user information but not all provide the same parameters:
If we look at teams channel member add we use a userId and userDisplayName. If we look at aad user get we provide id, userName, email and for yammer group list we only support userId.

[ ] We should investigate what commands require user imput
[ ] We should provide a helper method to get a userid based on email so we can re-use that in all commands
[ ] We should upgrade all commands to provide support for userId, userDisplayName and email

Follows discussion on #3899

We should provide a helper method to get a userid based on email so we can re-use that in all commands

This helper would differ between AAD and Yammer I assume. Also, not sure if Yammer supports user resolution via email. We should check it out.

We should upgrade all commands to provide support for userId, userDisplayName and email

Here we need to pay attention to naming, because for aad user commands, user is inferred from the context, so we don't need to prepend the option name with user.

Totally right; lets gather all commands first and then group them into logical buckets so we can determine the right option per group!
I am not into the yammer api but would assume that even there we could do reverse lookups for ID's based on an e-mail 🤔 but again let's gather a list of all commands first


Improve statsd metrics

We need to improve the metrics that airflow is reporting out via statsd. Let's get a quick PR in to Airflow that adds counters for success and failed dag_runs, tracking at least dag_id and execution_date. We should take a pass through the existing metrics and make sure they all work the way they should. I think at least one of the metrics may be a little off.

While we're using celery it might be nice to have an airflow_worker_heartbeat similar to airflow_scheduler_heartbeat.

We tested this with 0 DAGs, 1 DAGs, and many DAGs today.  We're seeing a temporary off-by-one error in DAG bag count size some of the time that appears to resolve itself over time, but haven't quite figured out how to reproduce it consistently yet.  It doesn't seem to always happen depending on the size of the DAG bag.

Any idea how multiple airflows affect the count?

Haven't tried that yet but we can test it.

@rhwang10 how is it calculating dagbag size? If I recall, something may have broken when they switched the way the scheduler processed the dag files. They spawn a new process for each file now right?

Yep, it gets the len(self.dags), which is a dictionary of {dag_id : dag object}, but I think since they started using the multiprocessing library, that dictionary will never contain more than one DAG

@rhwang10 how are you guys running this setup now? Were you able to get a locally editable version of airflow pointing to the metrics stack?

It is a locally editable version of airflow- in the docker-compose, we added a line each to the volumes of the worker, webserver, and scheduler to point to incubator-airflow

We weren't able to figure out why the non-dockerized local virtual env Airflow and the dockerized metrics stack couldn't talk to each other, but also didn't want to burn anymore time on troubleshooting that.
I was able to get running local incubator-airflow mounted into the relevant containers in the airflow-enterprise docker compose example so we can make changes quickly and just docker-compose up / down (basically like pip install -e).  Then we set that up on Rob's machine too, and it's working well for us so far with a fast dev cycle.
https://github.com/astronomerio/astronomer/compare/docker-volume-incubator-airflow

dag_bag size appears to be accurate if we query the database using the connection opened by the heartbeat method, filtering by whether the dag is active or not

update: trying to run multiple EE locally on different ports, but running into some issues with postgres when trying to spin both airflows up

Shifted priority from specific statsD metrics to kube-state metrics, but improving monitoring is still under active dev


Push enhancements

What's changed

The polling operation will terminate after the wait time specified in argument --wait (default 180 seconds)
Created a --noPolling flag so user can skip polling operation altogether

Looks good to me! Good job :)

Just one comment, the rest looks fine. :-)


[Feature] Support 2FA

A question is whether the 2FA field should be should be shown by default, hidden behind a toggle, or only shown after MD responds that one is needed (the site's current behavior).

Question if i enable 2FA on account can i disable later?  i might be able to test some options when i have some time.

Yeah

added to 1.0.4


Proguard

Supported obfuscated apks?

No, this program doesn't support obfuscated APK files.
But in future can add into this program feature that allows providing working directory parameter -d --directory.  If you decompiled some APK already.


Update live with current master

Have you seen @BillWagner’s email? We’re not merging docs tonight.

No. But I need this in before tomorrow at 11 for user testing...


harfbuzz: 7.2.0 -> 7.3.0

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/harfbuzz/harfbuzz/releases.
meta.description for harfbuzz is: An OpenType text shaping engine
meta.homepage for harfbuzz is: https://harfbuzz.github.io/
meta.changelog for harfbuzz is: https://github.com/harfbuzz/harfbuzz/raw/7.3.0/NEWS
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
Warning: a test defined in passthru.tests did not pass
found 7.3.0 with grep in /nix/store/x6piksvxgbvs47iabdx6zh82cqn5ymrl-harfbuzz-7.3.0
found 7.3.0 in filename of file in /nix/store/x6piksvxgbvs47iabdx6zh82cqn5ymrl-harfbuzz-7.3.0

Rebuild report (if merged into master) (click to expand)

17711 total rebuild path(s)

17711 package rebuild(s)

First fifty rebuilds by attrpath

AusweisApp2
CHOWTapeModel
ChowCentaur
ChowKick
ChowPhaser
CuboCore.coreaction
CuboCore.corearchiver
CuboCore.corefm
CuboCore.coregarage
CuboCore.corehunt
CuboCore.coreimage
CuboCore.coreinfo
CuboCore.corekeyboard
CuboCore.corepad
CuboCore.corepaint
CuboCore.corepdf
CuboCore.corepins
CuboCore.corerenamer
CuboCore.coreshot
CuboCore.corestats
CuboCore.corestuff
CuboCore.coreterminal
CuboCore.coretime
CuboCore.coretoppings
CuboCore.coreuniverse
CuboCore.libcprime
CuboCore.libcsys
DisnixWebService
EmptyEpsilon
Fabric
HentaiAtHome
LibreArp
LibreArp-lv2
MIDIVisualizer
MMA
OSCAR
PageEdit
R
SDL
SDL2
SDL2_gfx
SDL2_image
SDL2_image_2_0_5
SDL2_mixer
SDL2_mixer_2_0
SDL2_net
SDL2_sound
SDL2_ttf
SDL2_ttf_2_0_15

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/x6piksvxgbvs47iabdx6zh82cqn5ymrl-harfbuzz-7.3.0 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A harfbuzz https://github.com/r-ryantm/nixpkgs/archive/37bb0dc70d30ae3fd60070140b24791db6797b6d.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/x6piksvxgbvs47iabdx6zh82cqn5ymrl-harfbuzz-7.3.0
ls -la /nix/store/x6piksvxgbvs47iabdx6zh82cqn5ymrl-harfbuzz-7.3.0/bin

Pre-merge build results
NixPkgs review skipped

Maintainer pings
cc @edolstra for testing.

@GrahamcOfBorg eval


Update to StableLM code

As part of Transformers 4.38.0 https://github.com/huggingface/transformers/pull/28810
StableLM is now part of Transformers without the need for trust_remote_code. It is now stablelm_epoch -> stablelm
Also update config to match the latest.

Thanks! Would you mind making the change here as well: https://github.com/ml-explore/mlx-examples/blob/main/llms/mlx_lm/tuner/utils.py#L32
That should cover everything.

Thanks! Would you mind making the change here as well: https://github.com/ml-explore/mlx-examples/blob/main/llms/mlx_lm/tuner/utils.py#L32
That should cover everything.

done in eb40948


vscode-extensions.mshr-h.veriloghdl: init at 1.13.0

Description of changes

Add: https://marketplace.visualstudio.com/items?itemName=mshr-h.VerilogHDL
Repo: https://github.com/mshr-h/vscode-verilog-hdl-support
Things done

Built on platform(s)

[x] x86_64-linux
[x] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Priorities
Add a :+1: reaction to pull requests you find important.

Please, update to 1.13.2.


signUp creates an account but throws an exception

If you call signUp with supabase_flutter 1.0.0-dev.3 and email verification required, it creates the account but throws an error:
await supabase.auth.signUp(email, password);

GoTrueException(message: An error occurred on sign up., statusCode: null)
      #0      GoTrueClient.signUp (package:gotrue/src/gotrue_client.dart:76:7)
      <asynchronous suspension>
      #1      AuthManager.createUser.<anonymous closure> (package:cast_me_app/business_logic/clients/auth_manager.dart:69:9)
      <asynchronous suspension>
      #2      _authActionWrapper.<anonymous closure> (package:cast_me_app/business_logic/clients/auth_manager.dart:218:5)
      <asynchronous suspension>

It looks like the client assumes a response with null data means an error when the server is sending null on success:
if (response.data == null) {
  throw GoTrueException('An error occurred on sign up.');
}

iirc returning null is expected behavior for sign up if email verification is required because the server can't sign you in until after you've verified your email?

Related comment:
the current auth flow is as follows:

create account -> still not signed in
verify email -> still not signed in
call signIn -> finally signed in

It's not a big deal, but I'd dramatically prefer it if the flow were as follows:

create account -> signed in, but user session is in a demoted state
verify email -> signed in, user session is promoted to standard level

The following is much preferred because:

I don't have to make the extra server call to sign in the user
If the user exits and reopens without having completed email verification, I can have them click sign up without sign up throwing an exception, I can simply catch that the user session isn't fully promoted
I can easily provide partial access to app features for accounts that haven't completed email verification to make the sign up experience lower friction (eg you can view content, but can't post)

Happy to file a separate issue for this if that'd be helpful

I think the issue is that we require a session after signup, but a session is not returned when verify email is turned on. https://github.com/supabase-community/gotrue-dart/blob/02f0b3d1411eff5c190081e94946d2be291421ff/lib/src/gotrue_client.dart#L75
@dshukertjr
I'm unsure what the exact flow should be with email verification. When no session is returned we don't fire an sign in event, right? https://github.com/supabase-community/gotrue-dart/blob/02f0b3d1411eff5c190081e94946d2be291421ff/lib/src/gotrue_client.dart#L80

I see now it's a duplicate of #173. I'm closing the other one since here is more info.

@Vinzent03
Sorry for the late response here.

I'm unsure what the exact flow should be with email verification. When no session is returned we don't fire an sign in event, right?

Yup, that should be correct!

In addition, shouldn't the session parameter be called session instead of data?

Great call! Right now is the time to introduce these breaking changes, so let's get it in as well!

I'm curious if you all have any thoughts on my proposed restructuring of auth flow where signUp with email verification enabled signs the user in but in a probationary state?