text:
Wrong suburb

9C5M9MRX+JJ should not have "Northside" in the address - none of this area is the Northside as it is not a suburb or Townland in any of Dublin. The address on the North Road suburb is "Finglas East, Dublin 11".

Closing as duplicate of #381.

Nothing has been done to fix this issue. my address has now been incorrectly copied to every website when i enter my Eircode!! it comes up that i live in "Northside". what are ye lads doing? this is an absolute joke. you have no right to incorrectly put in my personal address on every website possible. why does every other area in dublin have the correct suburb! i will take you to court if you dont fix this today.

Nothing has been done to fix this issue.ive raised this in google maps numerous times and its ignored. my address has now been incorrectly copied to every website when i enter my Eircode!! it comes up that i live in "Northside". what are ye lads doing? this is an absolute joke. you have no right to incorrectly put in my personal address on every website possible. why does every other area in dublin have the correct suburb! i will take you to court if you dont fix this today.

Nothing has been done to fix this issue.ive raised this in google maps numerous times and its ignored. my address has now been incorrectly copied to every website when i enter my Eircode D11Y1E2!! it comes up that i live in "Northside". what are ye lads doing? this is an absolute joke. you have no right to incorrectly put in my personal address on every website possible. why does every other area in dublin have the correct suburb! i will take you to court if you dont fix this today.

authors: drinckes magneticimpulse

repo: google/open-location-code


text:
Automated Updates: only append dependencies with property to original requirements

Maven original requirements are used to look up if the original requirement contains a property or not, so we don't need all original requirements but only the ones with properties.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 59.20%. Comparing base (2e1704d) to head (61317ca).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #823      +/-   ##
==========================================
- Coverage   59.49%   59.20%   -0.29%
==========================================
  Files         136      136
  Lines       11156    11162       +6
==========================================
- Hits         6637     6609      -28
- Misses       4094     4124      +30
- Partials      425      429       +4

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

source: gharchive/pull-request

authors: codecov-commenter cuixq

repo: google/osv-scanner

license_type: permissive

license_source: bigquery


text:
sysfs-gpio: support ATSAM CPUs unconventional gpio naming

What kind of new feature are you looking for?

Hardware: ATSAMA5Dxx

Do you plan to:

contribute an initial driver in experimental: Yes
do all the work needed to get the driver promoted to _stable_¹: hopefully some day

Hi, I'm trying to get periph.io working on the ATSAMA5D27. The gpio naming for this cpu is somewhat non-standard in that in /sys/class/gpio it uses names like "PA3", "PD25" instead of "gpio121". This causes the host/sysfs/gpio driver not to find any of the GPIO.
So, I forked the host/sysfs/gpio driver to host/atsam/gpio and got it to work. Currently the code is very rough (but at least WaitForEdge is working).
Does anyone have any thoughts how support for this chip should be implemented? Could sysfs/gpio be made more general, or is simply forking the sysfs/gpio code the right path?
My experimental code is here:
https://github.com/cbrake/periph/tree/master/host/atsam
(needs a lot of cleanup)
Thanks!

It's been four years, so the code should simply switch to /sys/bus/gpiochipN.
Tracked as https://github.com/periph/host/issues/39

source: gharchive/issue

authors: cbrake maruel

repo: google/periph

license_source: github-api


text:
Implement --plugin-path.

Testing for this is a little funky since Gradle doesn't really want us
to be using a JAR dependency as a file. A Gradle task is used to copy
the test plugin into the test classpath so that it can be loaded, but
that means that the IntelliJ JUnit test runner (which is faster) isn't
able to run this test successfully without manually configuring the
test working directory and manually executing the :cli:copyTestJars
task first.
Fixes https://github.com/google/prefab/issues/22
/gcbrun

Simplified by just loading off the classpath rather than from a command line argument. We can always add --plugin-path later if it's needed, but this simplifies the implementation and testing.
/gcbrun

repo: google/prefab


text:
'NSInvalidArgumentException', reason: '-[FBLPromise HTTPBody]: unrecognized selector sent to instance

I'm stuck integrating firebase with bazel - I have made some progress
https://github.com/firebase/firebase-ios-sdk/issues/6115
but when I run the build - the xcframework that's built with firebase analytics - doesn't have this method - HTTPBody

I'm using this BUILD file inside FirebaseAnalytics directory

load("@build_bazel_rules_apple//apple:apple.bzl",
    "apple_dynamic_xcframework_import","apple_static_xcframework_import"
)

objc_library(
    name = "FirebaseAnalytics",
    deps = ["FirebaseAnalyticsXCFramework"],
    enable_modules = True,
    module_name = "FirebaseAnalytics",
    visibility = ["//visibility:public"],

)

objc_library(
    name = "FBLPromises",
    deps = ["FBLPromisesXCFramework"],
    enable_modules = True,
    module_name = "FBLPromises",
    visibility = ["//visibility:public"],

)

apple_static_xcframework_import(
    name = "FirebaseAnalyticsXCFramework",
    xcframework_imports = glob(["FirebaseAnalytics.xcframework/**"] ),
    library_identifiers = {
        "ios_device": "ios-arm64_armv7",
        "ios_simulator": "ios-arm64_i386_x86_64-simulator",
    },
    deps = ["FBLPromisesXCFramework",
    "FirebaseAnalyticsSwiftXCFramework",
    "FirebaseCoreXCFramework"
    ,"FirebaseCoreDiagnosticsXCFramework",
    "FirebaseCoreInternalXCFramework",
    "FirebaseInstallationsXCFramework",
    "GoogleAppMeasurementXCFramework",
    "GoogleAppMeasurementIdentitySupportXCFramework",
    "GoogleUtilitiesXCFramework",
    "GoogleDataTransportXCFramework",
    "nanopbXCFramework",
    ],
    visibility = ["//visibility:public"],
)

apple_dynamic_xcframework_import(
    name = "FBLPromisesXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["FBLPromises.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "FirebaseAnalyticsSwiftXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["FirebaseAnalyticsSwift.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "FirebaseCoreXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["FirebaseCore.xcframework/**"] ),
      visibility = ["//visibility:public"],
)

apple_dynamic_xcframework_import(
    name = "FirebaseCoreDiagnosticsXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["FirebaseCoreDiagnostics.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "FirebaseCoreInternalXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["FirebaseCoreInternal.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "FirebaseInstallationsXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["FirebaseInstallations.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "GoogleAppMeasurementXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64_armv7",
        "ios_simulator": "ios-arm64_i386_x86_64-simulator",
    },
    xcframework_imports = glob(["GoogleAppMeasurement.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "GoogleAppMeasurementIdentitySupportXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64_armv7",
        "ios_simulator": "ios-arm64_i386_x86_64-simulator",
    },
    xcframework_imports = glob(["GoogleAppMeasurementIdentitySupport.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "GoogleDataTransportXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["GoogleDataTransport.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "GoogleUtilitiesXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["GoogleUtilities.xcframework/**"] ),
)

apple_dynamic_xcframework_import(
    name = "nanopbXCFramework",
    library_identifiers = {
        "ios_device": "ios-arm64",
        "ios_simulator": "ios-arm64_x86_64-simulator",
    },
    xcframework_imports = glob(["nanopb.xcframework/**"] ),
)

someone suggested on stackoverflow to patch it - but I'm new to bazel - and it is not straightforward.
BUILD

objc_library(
    name = "FBLPromises",
    module_name = "FBLPromises",
    enable_modules = True,
    srcs = glob([
        "Sources/*.m",
        "Sources/*.h",
    ]),
    hdrs = glob([
        "PublicHeaders/*.h",
    ]),
    includes = [
       "PublicHeaders",
    ],
    sdk_frameworks = [
        "Foundation",
        "UIKit",
    ],
    visibility = [
        "//visibility:public",
    ],
)

//  FBLPromise+Extension.h
#if __has_include(<FBLPromises/FBLPromises.h>)
#import <FBLPromises/FBLPromises.h>
#else
#import "FBLPromises.h"
#endif
#import <Foundation/Foundation.h>

@interface FBLPromise (Extension)

@property(nonatomic, readonly) NSHTTPURLResponse *HTTPResponse;
@property(nonatomic, readonly) NSData *HTTPBody;

- (instancetype)initWithResponse:(NSHTTPURLResponse *)response HTTPBody:(NSData *)body;

@end

//  FBLPromise+Extension.m
#import "FBLPromises.h"
#import <Foundation/Foundation.h>

@implementation FBLPromise (Extension)
+ (NSData *)HTTPBody {
    return nil;
}

- (NSData *)HTTPBody {
    return nil;
}

+ (void)setHTTPBody:(NSData *)data {
}

- (void)setHTTPBody:(NSData *)data {
}

+ (NSHTTPURLResponse *)HTTPResponse {
    return nil;
}

- (NSHTTPURLResponse *)HTTPResponse {
    return nil;
}

+ (void)setHTTPResponse:(NSHTTPURLResponse *)data {
}

- (void)setHTTPResponse:(NSHTTPURLResponse *)data {
}

+ (instancetype)initWithResponse:(NSHTTPURLResponse *)response HTTPBody:(nullable NSData *)body {
    return nil;
}

- (instancetype)initWithResponse:(NSHTTPURLResponse *)response HTTPBody:(nullable NSData *)body {
    return nil;
}
@end

should this be necessary? does this method exist in this code? is it straightforward to spit out an xcframework for this project? I had a go with carthage and it was ok.

related https://github.com/google/promises/issues/189

this approached doesn't have same problem
demo app
https://github.com/vikage/DemoBazel/blob/firebase/Thirdparty/Firebase/BUILD

repo: google/promises


text:
Recaptcha v3 scores iPad Pro iPadOS 14 webview as 0.3 always

We use WebView on iOS apps for user sign in.  The sign in form has reCaptcha v3 integrated and always scores the WebView on iPad Pro iPadOS 14 with a 0.3 score. iPad Pro on older iPadOS versions gets a better score of 0.7 or higher.

I had this happening as well. Got 0.3 always on iOS and not on other devices. Generating new key/secret seems to have fixed this, not sure why though..

Repo is just for PHP client issues. This is about the reCAPTCHA service.

authors: cyrilthomas jelleklaver rowan-m

repo: google/recaptcha


text:
[Pygen] Issue with imm value and shift operation

Immediate values are not properly generated because of the issue with shift operation in extend_imm() function of riscv_instr.py.

As I am considering self.imm = vsc.rand_uint32_t() type for randomizing the imm value.
Facing compatibility issue while doing or operation with self.imm_mask and self.imm
If I declared self.imm_mask as PyVSC data type then it is difficult to assign its value default to 0xffffffff
To solve the above issue. I have declared the imm_mask value directly in the constructor function. The imm_mask size increases after the shift operation to more than 32 bits. So to limit its size to 32 bits I did the bitwise & operation with 0xffffffff while shifting.
I believe there must be some other way to solve this issue.
Need some suggestion on this.

Hi @aneels3
I might miss something here, but if you declare self.imm_mask as a non-random PyVSC data type (say vsc.uint32_t or vsc.bit_t(32) ), what's the problem with assigning it a default value of 0xffffffff? I believe that you can do so either by passing the default value while you define it (self.imm_mask = vsc.uint32_t(the_default_value)) or later on using set_val() method.

Hi @hodjat91
Thanks for the suggestion, I completely miss out the default assignment part that you have suggested (self.imm_mask = vsc.uint32_t(the_default_value))
It works for me now.
feel free to close this issue upon the successful merging of the #628

Hi @aneels3
Sounds great!

repo: google/riscv-dv


text:
MP4 Playback Question

In Shaka 1.x there was an HTTP Video Source you could load instead of a Dash Video Source. My understanding is that was there for testing and dev purposes only so it has been dropped from v2. So I am now looking to modify our library so we can continue to support MP4 playback. To do this I can rely pretty much on just attaching the mp4 url to the <video> source. I am just looking for a little guidance on what to do with Shaka in this case. If I have a shaka player already instantiated and then I try to directly attach a url to the video.src attribute, it immediately gets overwritten with a local url that Shaka attaches. It looks to me then like I need to first destroy the shaka instance and interact directly with the <video> tag. Is this correct or is there a different way that I can start MP4 playback that doesn't require me to destroy the Shaka instance?

If you want to stop using Shaka Player temporarily to play a plain MP4, you could use player.unload() instead of player.destroy().  player.unload() returns a Promise.

Alright, thanks for the response. I had tried that originally and it wasn't working but turns out I wasn't waiting for the promise to resolve first 😕 .

authors: joeyparrish sanbornhnewyyz

repo: google/shaka-player


text:
souper-combine pass template

Build system is intentionally decoupled from Souper.

does this want to be a part of souper? seems like it's probably better to just work on it in your own repo.

It is not a standalone tool, it just has the plumbing for a blank instcombine.
By itself, this does not perform any transformation.
The transformation code generation (not submitted yet) depends on Souper.
That part would take a list of souper generated transforms and generate some C++ code which has to be #included/copied into this template. Maybe there will be a bootstrap script to do it automatically (and test it).
So, I think it makes sense to put this inside the Souper repository. Don't have a strong opinion about it though.

I'd say just do this outside of souper, if it stabilizes into something we want, we can merge it later

repo: google/souper


text:
vm/qemu: Add net.ifnames=0 to linux cmdline by default

Add net.ifnames=0 to disable network interface renaming behavior.
We already add it in tools/create-gce-image.sh and in
dashboard/config/linux. However, if someone uses custom .config
file he may miss it and get a vm (e.g. Debian 11) with no network
access because tools/create-image.sh explicitly uses eth0.
$ grep eth0 tools/create-image.sh
printf '\nauto eth0\niface eth0 inet dhcp\n' | sudo tee -a $DIR/etc/network/interfaces

Signed-off-by: Denis Efremov denis.e.efremov@oracle.com

I am not sure. We specifically moved most of custom flags from vm/qemu, the idea is that it contains only flags that vm/qemu itself requires.
There are lots of flags that are needed. E.g. our syzbot configs include more than 30. All of them are needed. There are also lots of kernel configs that are needed for proper fuzzing.
If kernel is mis-configured, we can't fix it in vm/qemu. Even if the kernel will start, it may not have good coverage, not detect bugs and produce false positives. Which is worse than not booting at all.
This can also break some images that current work, right. In the end it's up to the userspace system what interface names it expects. As you said, if one uses tools/create-gce-image.sh that produces a working combination of userspace+cmdline flags. But another custom image may expect renamed interfaces.

I wish user-space systems would produce better diagnostics for this other similar issues. That would benefit lots of contexts besides syzkaller. It could say this is interfaces you have, this is the interfaces we expect, there is no match, maybe you need to do X or Y. Rather than useful "network failed".

authors: dvyukov evdenis

repo: google/syzkaller


text:
sourceMappingURL present when requesting in-memory source maps

If you compile with {sourceMaps: 'memory'} shouldn't sourceMappingURL be omitted from the output?
Having sourceMappingURL printed in the output can make it difficult to integrate traceur into e.g. a gulp workflow.
Of course one can always strip it out, but not having it in the first place would be easier. Is the current behavior of {sourceMaps: 'memory'} the intended one?

Fixed by #1764

repo: google/traceur-compiler


text:
Options.setFromObject now parses "experimental" and "atscript" props

Since experimental and atscript are setters in the Options object they do not get parsed when calling setFromObject.
We could also do:
this.atscript = object.atscript || this.atscript;
To keep it consistent with modules line above but since these are booleans I though if() check was clearer, either way really.

This breaks the tests.
Before we can accept patches you need to sign the CLA and add your name to the AUTHORS file.
https://github.com/google/traceur-compiler/blob/master/CONTRIBUTING.md
Can you also add a test for this change?

Does this affect #1490? (p.s. someone forgot to remove the wontfix label from that issue)

I wonder if you might consider a different approach.  Let's remove these awkward setter functions.  Let's have constant Options objects named experimental and atscript.  Then we can use them as initial values to the constructor.

@johnjbarton To be honest the setters are a big pain however not sure what you mean with "constant Options objects named experimental and atscript".  How would the setFromObject method handle these "template objects".
@arv Your comments are all simple fixes will resubmit if we decide to go ahead.  Sorry about the tests, its a pain to get this set up on windows to run the tests hence I did'nt. Also I have a CLA (under the company name PicNet I believe)
@UltCombo Yeah same issue really

Here is what I have in mind:
// Use at script options but not typeAssertions
var options = Options.atscript().setFromObject({typeAssertions: false});
// Use at script options and arrayComprehension
var atCompOptions = Options.atscript().setFromObject({arrayComprehension: true});
// Use all the experimental options with atscript
var allTheOptions = Options.experimental().setFromObject(Options.atScript());

The static functions experimental() and atscript just return new Options() objects with the corresponding properties set true. Then we don't have mutators, just values returned.

Guys, I'll pull out of this one; requires a bit too much knowledge of your internals.  I worked around this just using specific options instead of the setters 'experimental' and 'atscript' (this was for using with gulp-traceur btw).

authors: UltCombo arv gatapia johnjbarton


text:
Fixed typos

In code:

Changed "DEFUALT_PACKAGE_JSON" to "DEFAULT_PACKAGE_JSON" (usages also updated)

In comments:

Changed "defualt" to "default"
Changed "sensistive" to "sensitive"
Changed "inlcude" to "include"

Codecov Report

Merging #231 into master will not change coverage.
The diff coverage is 100%.

@@           Coverage Diff           @@
##           master     #231   +/-   ##
=======================================
  Coverage   98.52%   98.52%
=======================================
  Files          12       12
  Lines         814      814
  Branches       65       65
=======================================
  Hits          802      802
  Misses         12       12

Impacted Files
Coverage Δ

test/test-lint.ts
100% <ø> (ø)
:arrow_up:

test/test-init.ts
100% <ø> (ø)
:arrow_up:

src/init.ts
88.99% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c134eda...d706c9b. Read the comment docs.

@JustinBeckwith I can see that you've merged my branch, but the pull request is still open.. Is it some kind of GitHub error, or I'm not getting it?...

Thanks for the fixes @Maxim-Mazurok ! I will go ahead and land it now.
That status update about 'merge branch' is when someone (@JustinBeckwith in this case) uses the 'Update Branch' button to auto-resolve merge conflicts.

authors: Maxim-Mazurok codecov-io ofrobots

repo: google/ts-style


text:
Set Placement of Text Box on Page

Feature Description
Newly added text should always be left aligned to the page.
Figma

Do not alter or remove anything below. The following sections will be managed by moderators only.
Acceptance Criteria

After clicking on + icon to add new text element. Add element paragraph element 40px from the left edge and center vertically.
User can add the following text preset to the page (H1, H2, H3, paragraph, caption, overline)
When adding text presets consecutively(ie I click on heading then subheading then body text or heading then body text or body text and heading etc), try to add body text below subheading and subheading below the heading.

Implementation Brief

Testing Instructions
I

Add different text presets consecutively.
Verify that if presets are added right after each other, the next preset is positioned below the previous.
Verify that the preset doesn't go out of the bottom of the page, staggering starts from the default position (vertically centered) if the room ends up in the bottom of the page.
Verify that if any change is made between adding the presets, the preset is added to the default position (the consecutiveness counts only if the presets are added right after each other).

Hey @miina is this all covered in #1204? Should I close this one as a dupe?

@jauyong Nope, this issue is still relevant, thanks for checking!

@samitron7 to review AC and feature description

Figma
Let me know if there are any additional questions.

@samitron7 One additional clarification:
Does "adding text presets consecutively" mean adding the text presets right after each other without making any changes meanwhile? E.g. if the user adds "Heading 1", changes the text of it and then clicks "Heading 2" -- is that not considered consecutively anymore since the user changed the text meanwhile?

Verified in QA

To @miina's comment (6 days ago) - we chatted offline and yes, any changes since adding the previous preset, it's not considered consecutive.

authors: csossi jauyong miina samitron7

repo: google/web-stories-wp


text:
Allow linking external media as an element

Context
Adds the possibility to add media by inserting a link.

Summary

Relevant Technical Choices

To-do

[ ] Some refactoring
[x] Feature flag
[x] Tests

User-facing changes

Testing Instructions
Feature flag for hotlinking must be enabled first.

Click on the new "Insert by link" button.
Try inserting images/videos via link.
verify that invalid links show an error.
Verify that valid links create a new media element correctly.
If the user has permissions to upload media, verify that for a video inserted by a link, a poster image is created, too.
Verify that everything looks as before when disabling the hotlinking feature.

Note: Not all sites allow linking externally like this, in that case, an error starting with "Media failed to load" will be displayed under the input.

QA

[ ] This is a non-user-facing change and requires no QA

This PR can be tested by following these steps:

Checklist

[ ] This PR addresses an existing issue and I have linked this PR to it in ZenHub
[ ] I have tested this code to the best of my abilities
[ ] I have verified accessibility to the best of my abilities (docs)
[ ] I have verified i18n and l10n (translation, right-to-left layout) to the best of my abilities
[ ] This PR contains automated tests (unit, integration, and/or e2e) to verify the code works as intended (docs)
[ ] I have added documentation where necessary
[ ] I have added a matching Type: XYZ label to the PR

Fixes #471

In my testing, this URL did not work - https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4
Not sure why..

In my testing, this URL did not work - https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4
Not sure why..

CORS not allowed.
In general, almost any image or video on the internet will not allow cross-origin resource sharing. Very few hosts have that enabled by default. I feel like this should be explained much more clearly in the dialog. If I google for any image, it'll most likely not allow CORS and I do see the message about "Please ensure the link is valid and the site allows linking from external sites", but does the common user understand what this means?
For testing, you can use imgur as part of your search, as imgur has CORS enabled for all their hosted media, but otherwise it's pretty rare I think, for a site (beside a CDN) to have that.
This is a very heavy limitation on the usefulness of this feature overall, so I think we should explain that more clearly to the user and recommend uploading to local media over hotlinking whenever possible.

Worth looking at this PR as well, as it will likely effect this one as well. https://github.com/google/web-stories-wp/pull/8697

"Please ensure the link is valid and the site allows linking from external sites",

I think we need some UX that explains why an image is not embeding.

so I think we should explain that more clearly to the user and recommend uploading to local media over hotlinking whenever possible.

There are users in WordPress that does not have access to upload media at all. So not possible at all.

I think we need some UX that explains why an image is not embeding.

Copy improvements can be done in the follow-up issues (see the list in the [epic)](https://github.com/google/web-stories-wp/issues/8653 and this discussion).

I can confirm that resources need to the following headers for the asset to embedded
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin

Working https://media1.giphy.com/media/oKQHyK4yKMpLqkf0qh/giphy.gif?cid=790b76117161f82a76ab0feea8adbd10d48b38a3e033d063&rid=giphy.gif&ct=g
Not working - https://www.trustedreviews.com/wp-content/uploads/sites/54/2021/04/best-cheap-phones-920x613.jpg
Not working - https://spacedmonkey.ams3.digitaloceanspaces.com/uploads/sites/27/2020/06/fikret-tozak-Zk-Ydz2IAs-unsplash-scaled.jpg
Not working - https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4
CC @swissspidy

I can confirm that resources need to the following headers for the asset to embedded

Re-sharing my comment from Slack for visibility:
This should be covered by #8667, which would display some sort of “Preview unavailable” placeholder on the canvas for resources like these.
We don't want to require setting these headers since those headers are only needed in the editor and only in some cases (due to cross-origin isolation / video optimization) and the vast majority of videos/images won't have these headers.

Hi guys, any updates on when this will be available?

@campiotto Probably in the next release. We're still working on it top make it more robust.

@swissspidy We have a bunch of web stories that need to be produced per week, sorry for the pressure but if you give me a date for this release I can prioritize the web stories that will be without video. Do you know when it will be?

In about 3 weeks if all goes well

authors: barklund campiotto miina spacedmonkey swissspidy


text:
ACME client integration into webpkgserver.

Integrate support for ACME client into webpkgserver start-up.

cc:@twifkak

repo: google/webpackager


text:
Include plugin name with AddStatusItem RPC

This PR makes adding the status item include the plugin name from which it originates, so that client can manage items that come from the same plugin.
companion to xi-mac #210

@nangtrongvuon can you take another pass over this, and then I'll take a look?

authors: cmyr nangtrongvuon

repo: google/xi-editor


text:
[Android] Crashed: [deprecation] getApplicationInfo(String,int) in PackageManager has been deprecated

Plugin Version
environment:
sdk: '>=2.18.4 <3.0.0'
dependencies:
flutter:
sdk: flutter
google_mobile_ads: ^2.3.0

Steps to Reproduce

I have unfortunately no way to reproduce this issue, it happens every time I run flutter clean && flutter build appbundle.
I am only using native ads in my app.

Expected results:
The app is crashing.
Actual results:
The app should not crash

Logs

Launching lib/test.dart on sdk gphone x86 64 in debug mode...
/Users/admin/.pub-cache/hosted/pub.dartlang.org/google_mobile_ads-2.3.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProvider.java:31: warning: [deprecation] getApplicationInfo(String,int) in PackageManager has been deprecated
              .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
              ^

/Users/admin/.pub-cache/hosted/pub.dartlang.org/google_mobile_ads-2.3.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAd.java:75: warning: [deprecation] get(String) in BaseBundle has been deprecated
          Object value = responseInfo.getResponseExtras().get(key);
                                                         ^
/Users/admin/.pub-cache/hosted/pub.dartlang.org/google_mobile_ads-2.3.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAd.java:163: warning: [deprecation] get(String) in BaseBundle has been deprecated
          adUnitMapping.put(key, responseInfo.getCredentials().get(key).toString());
                                                              ^
3 warnings

Admins-MacBook-Pro:bug admin$ flutter analyze
Analyzing bug...
No issues found! (ran in 4.2s)

[✓] Flutter (Channel stable, 3.3.8, on macOS 12.6.2 21G312 darwin-x64, locale en-ID)
    • Flutter version 3.3.8 on channel stable at /Users/admin/Documents/Flutter/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 52b3dc25f6 (3 weeks ago), 2022-11-09 12:09:26 +0800
    • Engine revision 857bd6b74c
    • Dart version 2.18.4
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /usr/local/share/android-sdk
    • Platform android-33, build-tools 29.0.2
    • ANDROID_HOME = /usr/local/share/android-sdk
    • ANDROID_SDK_ROOT = /usr/local/share/android-sdk
    • Java binary at: /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
    • All Android licenses accepted.

[✗] Xcode - develop for iOS and macOS
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
      Download at: https://developer.apple.com/xcode/download/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
        sudo xcodebuild -runFirstLaunch
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to
        your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To install see https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/docs/get-started/install/macos#android-setup for detailed
      instructions).

[✓] VS Code (version 1.73.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.52.0

[✓] Connected device (3 available)
    • sdk gphone x86 64 (mobile) • emulator-5554 • android-x64    • Android 11 (API 30) (emulator)
    • macOS (desktop)            • macos         • darwin-x64     • macOS 12.6.2 21G312 darwin-x64
    • Chrome (web)               • chrome        • web-javascript • Google Chrome 107.0.5304.110

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 2 categories.

Hi @a43501
Does this issue happen with googleads-mobile-flutter sample code? (Native ads is implemented at ReusableInlineExample class)
If not so, please provide the output of flutter run -v and the affected device information. Thanks!

repo: googleads/googleads-mobile-flutter


text:
ad pause events are not sent to videojs

Pausing and resuming an ad emits no events.
Sending a pause or resume event to videojs while the admode is set should automatically be redispatched by the videojs-contrib-ads dependency as an adpause and adresume event. Instead no event is emitted, leaving users of the library unable to respond to ad pauses.

Which events are you referring to? I only see adstart, adend, and adkskip in the contrib-ads documentation.

It's been a while since we've heard from you, so I'm going to close this out. If you're still seeing issues, feel free to respond here and we'll re-open :)

authors: KevinBrogan shawnbuso

repo: googleads/videojs-ima


text:
AIP-131:  The collection whose resources are being listed should map to the URI path

AIP-131 states:

The HTTP verb must be GET. The collection whose resources are being listed should map to the URI path

There's a test today that verifies that parent is in the wildcard match, but nothing to verify that it matches the resource collection that I can see.

likely similar checks should be done for the rest of the standard CRUDL methods.

yes, this exists: https://linter.aip.dev/127/http-template-pattern.

repo: googleapis/api-linter


text:
update googleapis hash

It turns out we might need to update internal googleapis copy (inside the Docker image) since we updated google/cloud/common_resources.proto. I'm really unsure how exactly it is used, but we got a bug report that this file is missing, and this is the first place I thought of. Let's try updating this hash.

LGTM

authors: alexander-fenster hzyi-google

repo: googleapis/artman


text:
Code formatter can't remove unused imports in Java

We have a very unique style in Java samples on showing users what imports are needed:
package com.google.cloud.examples.speech.v1;

import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.speech.v1.LongRunningRecognizeMetadata;
...
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;

public class SpeechTranscribeAsync {
  // [START speech_transcribe_async]
  /*
   * Please include the following imports to run this sample.
   *
   * import com.google.api.gax.longrunning.OperationFuture;
   * import com.google.cloud.speech.v1.LongRunningRecognizeMetadata;
   * import com.google.cloud.speech.v1.LongRunningRecognizeRequest;
   * import com.google.cloud.speech.v1.LongRunningRecognizeResponse;
   * ...
   */

  /**
   * Transcribe a long audio file using asynchronous speech recognition
   *
   * @param localFilePath Path to local audio file, e.g. /path/audio.wav
   */
  public static void sampleLongRunningRecognize(String localFilePath) {
    // ...
  }
  // [END speech_transcribe_async]

  public static void main(String[] args) throws Exception {
    // ...
  }
}

We have this comment showing which imports are needed instead of showing the real import statements on the devsite because:

We would have to show the entire file on the devsite if we show the imports, because otherwise there would be unmatching braces
We didn't want to show imports used only in the main method (apache clis), and inserting region tags between imports would break code formatter

However, this setting causes code formatter to be unable to remove unused imports from this comment showing required imports, because, well it is a comment. Although the generator is trying to be accurate about useful imports, but having code formatter to do another check is always safer.
Proposing:
We are having this ApplicationChooser idea in C#, which is basically a unified entry to the sample project. Each individual sample will not have any main method, and the ApplicationChooser class will decide which sample method to call based on user input.
This way we can get rid of the main method in each sample, and we can show the entire file on the devsite, and we don't need to put imports in a comment.

cc/ @googleapis/samplegen

Let's see whether there are other possible solutions, but the ApplicationChooser sounds like a very reasonable one. We should collect use cases (like this one) for ApplicationChooser, as well as any cons of implementing it to help us decide.

Moved to backlog: https://github.com/googleapis/gapic-generator/wiki/feature-backlog

authors: hzyi-google vchudnov-g

repo: googleapis/gapic-generator


text:
Potentially fixing Kokoro not finding Gax.sln

This fix works in local.

Thanks. I'll create a testing VM if this doesn't work so as not be trying back and forth.

repo: googleapis/gax-dotnet


text:
Release gax-java v1.47.1

This pull request was generated using releasetool.
07-02-2019 09:51 PDT
Dependencies

Update google-auth-library to 0.16.2 (#751)

Release is at https://github.com/googleapis/gax-java/releases/tag/v1.47.1

The release build has started, the log can be viewed here. :sunflower:

:egg: You hatched a release! The release build finished successfully! :purple_heart:

repo: googleapis/gax-java


text:
Add context to Provider interface

It would be nice if the generated Provider interface would mimic what gRPC does and add a default ctx context.Context as the first argument.
// inside `provider.go`
type Provider interface {
    GetSomething(ctx context.Context, responses *GetSomethingResponses) (err error)
}

// and then in the Handler, simply use the context from the incoming request
// inside `server.go`
func HandleGetSomething(w http.ResponseWriter, r *http.Request) {
    // ... stuff
    err = provider.GetSomething(r.Context(), responses)
    // ... more stuff
}

This would allow passing context from an http.Client, or protecting your handler with a TimeoutMiddleware:
func TimeoutMiddleware(next http.Handler) http.Handler {
	timeout := 7 * time.Second
	msg := `{"error":  "your request timed out"}`
	return http.TimeoutHandler(next, timeout, msg)
}

Added a PR for this issue. How this is useful!

authors: bvwells sugarraysam

repo: googleapis/gnostic-go-generator


text:
Api-platform

Thanks for stopping by to let us know something could be better!
PLEASE READ: If you have a support contract with Google, please create an issue in the support console instead of filing on GitHub. This will ensure a timely response.
Please run down the following list and make sure you've tried the usual "quick fixes":

Search the issues already opened: https://github.com/googleapis/google-api-python-client/issues
Search StackOverflow: https://stackoverflow.com/questions/tagged/google-cloud-platform+python

If you are still having issues, please be sure to include as much information as possible:
Environment details

OS type and version:
Python version: python --version
pip version: pip --version
google-api-python-client version: pip show google-api-python-client

Steps to reproduce

?
?

Code example
# example

Stack trace
# example

Making sure to follow these steps will guarantee the quickest resolution possible.
Thanks!

Closing this since the filed issue does not have any information.

repo: googleapis/google-api-python-client


text:
add support for spanner CommitStats

Spanner is adding CommitStats; we should support it in the spanner client.

The proto changes are in the spanner_commit_stats branch, so we will also have to develop in a branch.
If we need to expose the option to request stats to the user, we will have to add a parameter (bool or enum) to SpannerClient::Commit
We'll also need to add new fields to CommitResult

repo: googleapis/google-cloud-cpp


text:
test(common): tradeoff running time vs. repro power

This is a gRPC test that relied on the high performance of an uncommon (synthetic) gRPC Alarm usage pattern. Per the test comments, this change will reduce the likelihood of seeing a regression in gRPC from 99% of runs, to 10% of runs. I think this should still be sufficient to identify problems. Running this test with the next generation of gRPC Alarm implementations, in 100 runs, this TimerCancel test never exceeded 10 seconds in the asan-pr docker environment (most commonly: 5 to 7s).

This change is

SGTM. Let's see what the builds say.

/gcbrun

/gcbrun

authors: coryan drfloob


text:
ci(gcb): add convenience script for manual testing

This build is intended only for manual testing before sending a PR. It
runs the formatting checks, a clang-tidy build, and all the integration
tests that do not depend on production.

This change is

We had similar PRs cross in the aether. Actually, you were a bit faster, but close! My PR is https://github.com/googleapis/google-cloud-cpp/pull/6329 and the main difference is that it runs the cmake+emulator+integration tests in several builds that are actually triggered, so I think it'll result in more coverage.
However, my PR does not include checkers in the clang-tidy run, so you'd still need to run that separately. WDYT?

My preference is to use your PR, looking right now.

authors: coryan devjgm


text:
Regenerate Grafeas.V1

This PR was generated using Autosynth. :rainbow:
Here's the log from Synthtool:
synthtool > Executing /tmpfs/src/git/autosynth/working_repo/apis/Grafeas.V1/synth.py.
Cloning into 'gapic-generator'...
Cloning into 'gapic-generator-csharp'...
Submodule 'api-common-protos' (https://github.com/googleapis/api-common-protos.git) registered for path 'api-common-protos'
Submodule 'protobuf' (https://github.com/protocolbuffers/protobuf.git) registered for path 'protobuf'
Cloning into '/tmpfs/src/git/autosynth/working_repo/gapic-generator-csharp/api-common-protos'...
Cloning into '/tmpfs/src/git/autosynth/working_repo/gapic-generator-csharp/protobuf'...
Submodule path 'api-common-protos': checked out '6084c8a7fb1aea1d8440805e12fa8ebc6784de76'
Submodule path 'protobuf': checked out '74fa874537d8baa2fbff29a3ab71754995f6b0b7'
Submodule 'third_party/benchmark' (https://github.com/google/benchmark.git) registered for path 'protobuf/third_party/benchmark'
Submodule 'third_party/googletest' (https://github.com/google/googletest.git) registered for path 'protobuf/third_party/googletest'
Cloning into '/tmpfs/src/git/autosynth/working_repo/gapic-generator-csharp/protobuf/third_party/benchmark'...
Cloning into '/tmpfs/src/git/autosynth/working_repo/gapic-generator-csharp/protobuf/third_party/googletest'...
Submodule path 'protobuf/third_party/benchmark': checked out '5b7683f49e1e9223cf9927b24f6fd3d6bd82e3f8'
Submodule path 'protobuf/third_party/googletest': checked out 'c3bb0ee2a63279a803aaad956b9b26d74bf9e6e2'
Cloning into 'googleapis'...
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy
> Task :buildSrc:processResources NO-SOURCE
> Task :buildSrc:classes
> Task :buildSrc:jar
> Task :buildSrc:assemble
> Task :buildSrc:compileTestJava NO-SOURCE
> Task :buildSrc:compileTestGroovy NO-SOURCE
> Task :buildSrc:processTestResources NO-SOURCE
> Task :buildSrc:testClasses UP-TO-DATE
> Task :buildSrc:test NO-SOURCE
> Task :buildSrc:check UP-TO-DATE
> Task :buildSrc:build
> Task :extractIncludeProto
> Task :extractProto
> Task :generateProto

> Task :compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

> Task :processResources
> Task :createProperties
> Task :classes
> Task :shadowJar

BUILD SUCCESSFUL in 14s
7 actionable tasks: 7 executed
Generating Grafeas.V1
Running post-generation script for Grafeas.V1
synthtool > Wrote metadata to synth.metadata.

This is a line-ending change only. We may want to change the generator slightly to always use the same line endings.

Closing as unintentional

authors: jskeet yoshi-automation

repo: googleapis/google-cloud-dotnet


text:
Release Google.Cloud.AutoML.V1 version 2.2.0

Changes in this release:
No API surface changes; just dependency updates.

Created release for Google.Cloud.AutoML.V1-2.2.0


text:
Client Datastore API: default consistency of 1.0 when testing

I just spent a few hours debugging flaky tests, and I finally realized that it was due to the "consistency" settings that I was using.
When LocalDatastoreHelper.create() is called, perhaps a default consistency of 1.0 should be used? Otherwise, integration tests to verify proper API usage will "randomly" fail, even if the tests are fairly small.

For reference, I've made a minimal reproducible suite of tests  that would (within a few runs) "randomly" fail. The tests were fairly simple, so I was a little surprised that the default values bit me as they did :wink:

@mitchhentges Thanks for you interest in google-cloud. You are right, LocalDatastoreHelpe.create() starts the emulator with a consistency of 0.9. The Datastore service  is not strongly consistent, hence we decided to offer a default method that creates a non-consistent datastore emulator.
The consistency level used by LocalDatastoreHelper.create() is documented in the javadoc. LocalDatastoreHelper also exposes a create(double) method that allows you to set your favorite consistency, see the javadoc.

Other than having the same behaviour as "production" datastore, what's the point of having a "test" datastore with a default consistency of 0.9?
IMHO, if someone is using the LocalDatastoreHelper, they're using it for tests. Probably, they want to verify that their integration with datastore is working (passing tests if integration is good, failing tests if integration is bad).
Perhaps I'm shortsighted, but I cannot imagine a case where having an inconstent datastore is helpful in unit/integration tests.
Finally, to be honest, I've got everything working on my end, so this isn't an issue for me. I just don't want future consumers of the "Client Datastore API" to run into a similar issue that I did

Perhaps I'm shortsighted, but I cannot imagine a case where having an inconstent datastore is helpful in unit/integration tests.

Some Datastore operations are eventually consistent, testing against an eventual consistent emulator is useful in all cases you want to verify that your code is not depending on strong consistency when it should not. Having your integration tests pass against a strongly consistent emulator don't necessarily guarantee that your code will also work against the actual Datastore service.
Also notice that 0.9 is the default consistency level used by the gcloud command line tool when starting the datastore emulator:
gcloud beta emulators datastore start

Finally, to be honest, I've got everything working on my end, so this isn't an issue for me. I just don't want future consumers of the "Client Datastore API" to run into a similar issue that I did

I am sorry you spent time on this. Probably our TESTING readme or javadoc could have saved you some time.

(fun 4 years update: mziccard was right, it's good to be aware of potential consistency issues in your tests, otherwise you could be surprised in production).

authors: mitchhentges mziccard

repo: googleapis/google-cloud-java


text:
feat: Add new fields to copy job statistics

Specifically, [copiedRows, copiedLogicalBytes] are added to CopyStatistics.
Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

[x] Make sure to open an issue as a bug/issue before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
[x] Ensure the tests and linter pass
[x] Code coverage does not decrease (if any source code was changed)
[x] Appropriate docs were updated (if necessary)

Fixes #3206  ☕
If you write sample code, please follow the samples format.

Thanks for the review. Updated with the suggestions.

repo: googleapis/java-bigquery


text:
fix(java): wip testing native image support with parallel execution

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

[ ] Make sure to open an issue as a bug/issue before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
[ ] Ensure the tests and linter pass
[ ] Code coverage does not decrease (if any source code was changed)
[ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> ☕
If you write sample code, please follow the samples format.

Kokoro Native Image Tests passed:

Looks like we're running into the following issue with the dependencies:
Warning:  Used undeclared dependencies found:
Warning:     com.google.api.grpc:grpc-google-cloud-spanner-v1:jar:6.21.2:compile
Warning:     com.google.api.grpc:proto-google-cloud-spanner-admin-instance-v1:jar:6.21.2:compile
Warning:     com.google.api.grpc:proto-google-cloud-spanner-admin-database-v1:jar:6.21.2:compile

Checks still passing after pulling in changes from main

Thank you so much @ansh0l!

Tests are now running. Failure is due to presence of old svm.

Native image tests are now passing.

Remove the sdk dependency once the spanner is upgraded in https://github.com/googleapis/java-spanner-jdbc/pull/881

Spanner 6.25.4 was released so testing after the upgrade.

repo: googleapis/java-spanner-jdbc


text:
Allow Signing Policy Document

The current SDK doesn't support signing policy documents, only signing URLs.
See: https://cloud.google.com/storage/docs/xml-api/post-object#policydocument
Since signed URLs doesn't support limiting the size of the uploaded file, signing policy documents is a much needed feature.

closing this issue as it's already being tracked here

authors: athakor thihara

repo: googleapis/java-storage


text:
chore: release 3.0.2

:robot: I have created a release *beep* *boop*
3.0.2 (2019-06-26)
Bug Fixes

docs: make anchors work in jsdoc (#215) (c5f6c89)

This PR was generated with Release Please.

Release is at https://github.com/googleapis/node-gtoken/releases/tag/v3.0.2

The release build has started, the log can be viewed here. :sunflower:

:egg: You hatched a release! The release build finished successfully! :purple_heart:

repo: googleapis/node-gtoken

license: mit


text:
chore: update package information report

In this PR:

Generate package information report for package that has no non-compliant licenses and security vulnerabilities.
Encode version using URLEncoder. The version may contain special characters that needs to be encoded before sending to deps.dev, e.g., 9+181-r4173-1.

An example of the report:
## Package information of io.opentelemetry:opentelemetry-api:1.37.0
Licenses: [Apache-2.0]
Vulnerabilities: None.
Checked in [deps.dev query](https://api.deps.dev/v3/query?versionKey.system=MAVEN&versionKey.name=io.opentelemetry:opentelemetry-api&versionKey.version=1.37.0)

## Dependencies:
## Package information of io.opentelemetry:opentelemetry-context:1.37.0
Licenses: [Apache-2.0]
Vulnerabilities: None.
Checked in [deps.dev query](https://api.deps.dev/v3/query?versionKey.system=MAVEN&versionKey.name=io.opentelemetry:opentelemetry-context&versionKey.version=1.37.0)

"Downstream Unmanaged Dependency Check / validate (java-bigtable)" is irrelevant to this PR.

repo: googleapis/sdk-platform-java


text:
Add Cloud Compute methods to test API

For more test coverage, tack on the following API methods in the testdata Compute API json:

compute.addresses.update
compute.addresses.patch
compute.addresses.aggregatedList

Resolve ResourceName naming conflicts in configgen, e.g. when one resource name path template is projects/{project}/region/{region}/addresses/{address} and another is projects/{project}/addresses/{address}, create resource names address and projectAddress respectively.

Codecov Report

Merging #1864 into master will decrease coverage by 0.07%.
The diff coverage is 53.77%.

@@             Coverage Diff             @@
##             master   #1864      +/-   ##
===========================================
- Coverage     84.68%   84.6%   -0.08%
- Complexity     4633    4647      +14
===========================================
  Files           438     438
  Lines         18405   18453      +48
  Branches       1953    1966      +13
===========================================
+ Hits          15587   15613      +26
- Misses         2140    2155      +15
- Partials        678     685       +7

Impacted Files
Coverage Δ
Complexity Δ

.../com/google/api/codegen/config/DiscoveryField.java
33.09% <0%> (-1.72%)
26 <0> (ø)

...er/java/JavaDiscoGapicSchemaToViewTransformer.java
95.78% <0%> (-1.06%)
17 <0> (ø)

.../java/com/google/api/codegen/discovery/Schema.java
63.63% <0%> (-21.6%)
20 <0> (+2)

...oogle/api/codegen/config/DiscoveryMethodModel.java
74.75% <100%> (-0.49%)
38 <0> (ø)

...om/google/api/codegen/config/FlatteningConfig.java
66% <100%> (ø)
9 <0> (ø)
:arrow_down:

...va/com/google/api/codegen/config/ProtoTypeRef.java
77.27% <100%> (+2.27%)
38 <4> (+4)
:arrow_up:

...ava/com/google/api/codegen/config/FieldConfig.java
64.15% <100%> (ø)
47 <0> (ø)
:arrow_down:

.../configgen/transformer/DiscoConfigTransformer.java
98.79% <100%> (+2.32%)
16 <4> (+1)
:arrow_up:

...r/java/JavaDiscoGapicRequestToViewTransformer.java
93.82% <100%> (+1.12%)
17 <0> (+1)
:arrow_up:

...oogle/api/codegen/config/DiscoveryRequestType.java
42.85% <50%> (+1.94%)
10 <2> (+2)
:arrow_up:

... and 8 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 5d3928b...7968832. Read the comment docs.

@michaelbausor this PR isn't as lean as it could be, so there is implementation of codegen outside of the configgen domain. The main point of this PR was to expose more of the test API, which did need some codegen changes in order to get around NPEs and other exceptions that cropped up when the generator was first run on the updated JSON API defintion. Thanks!

Baseline changes:

addition of name resource path "projects/{project}/addresses/{address}" in test json requires

changes in DiscoGapicNamer to fully qualify resource names. This generates the ProjectAddress.java file, which is different from the existing Address.java file.
changes in ApiCallableTransformer to name an Address resource object parameter as addressResource rather than address, which would clash with the existing resource name path string address
changes in DiscoConfigTransformer to fully qualify resource names that have the same simple resource names, e.g. simple resource name address and the qualified resource name projectAddress

addition of AddressAggregatedList, which contains new AddressScopedList, in test json requires

the Schema.findChild() method, because AddressAggregatedList must first traverse through AddressScopedList to retrieve the desired List<Address> response object.

The other changes are either for style or they result from bubbling the above diffs throughout the toolkit pipeline.

Added unit test for Schema.findChild() and commented on baseline changes.
PTAL

PTAL

PTAL

authors: andreamlin codecov-io

repo: googleapis/toolkit


text:
Update Go paging iterators

The slight differences between Next and NextPage were hard to get right
using the existing division of labor. Refactored so that apiCall does
not deal with when to return Done, it just calls the List method and
sets some iterator fields. Deciding when to return Done and what to
return along with it is left to Next and NextPage.
This change was tested against the iterator tests of the logging client.

@saicheems

Ah, I couldn't figure out for a while why the spacing looked weird in the diff.
Due to some failures in the template language, mixing spaces and tabs doesn't work well - could you run a text replace on tab => 4 spaces?
To get the tests working, the generator outputs the actual baseline to /tmp/com.google...
Copy that into the test/com.google.../testdata directory.

Thanks for making this change! It is tricky to get some functional subtleties across via docs and email

I fixed the spacing, but I can't find the file go_main_library.baseline anywhere.

Hmm... It should be here /tmp/com.google.api.codegen_testdata/go_main_library.baseline
If it's not, I ran the build for your branch on my machine:
https://gist.githubusercontent.com/saicheems/83509f4ca04a2c76a3093e6b2ba3e11a/raw/0ac2596205d59ba270ae07747fffb1801e132eb7/gistfile1.txt

The only file I see in that gist is google.golang.org/cloud/library/apiv1/library_client.go. Also it's v1, not v2.

Right, it's the full baseline: go_main_library.baseline
If you copy that into src/test/java/com/google/api/codegen/testdata the travis build will pass

Looks like it worked. Thanks!

lgtm

authors: jba saicheems


text:
system.config.js

1

我簽了！
2018-03-19 5:20 GMT+08:00 googlebot notifications@github.com:

Thanks for your pull request. It looks like this may be your first
contribution to a Google open source project (if not, look below for help).
Before we can look at your pull request, you'll need to sign a Contributor
License Agreement (CLA).
📝 Please visit https://cla.developers.google.com/
https://cla.developers.google.com/ to sign.
Once you've signed (or fixed any issues), please reply here (e.g. I
signed it!) and we'll verify it.
What to do if you already signed the CLA Individual signers

It's possible we don't have your GitHub username or you're using a
different email address on your commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.

Corporate signers

Your company has a Point of Contact who decides which employees are
authorized to participate. Ask your POC to be added to the group of
authorized contributors. If you don't know who your Point of Contact is,
direct the project maintainer to go/cla#troubleshoot.
The email used to register you as an authorized contributor must be
the email used for the Git commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.
The email used to register you as an authorized contributor must
also be attached to your GitHub account
https://github.com/settings/emails.

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/googlecodelabs/cloud-cardboard-viewer/pull/20#issuecomment-374048551,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AjomU2uNNeQYnO0dMNNua-0ZZjZ7EsN3ks5tfs-FgaJpZM4SvYaf
.

repo: googlecodelabs/cloud-cardboard-viewer


text:
Compile times

I've just been looking into compile times for Blitz. And read-fonts (16.14s) and skrifa (9.61s) both stand out in the profile. This is for a release build:

This mostly gets hidden by parallel compilation (the non-codegen times are not nearly so bad). And perhaps this is the only way to get the runtime performance and type safety of this crate. But nevertheless I though this should be tracked, and considered when implementing changes to these crates.
(note also the compile time for ttf-parser at the bottom of the screenshot - only 5.5s!)

thanks! the codegen-based approach to the design of read-fonts does mean that we often end up compiling a lot of code, so naively I imagine that is most of what's going on here (and a quick look with -Ztime-passes doesn't show anything egregious). There are some design choices we could reconsider if this ends up feeling serious.

authors: cmyr nicoburns

repo: googlefonts/fontations


text:
Rename #[phantom] to #[generic_offset]

This better expresses this attribute's purpose.

This better expresses this attribute's purpose.

vigorous +1, ty

authors: cmyr rsheeter


text:
use pkg_resources to access Glyph*.xml files

(issue #31)

@rsheeter please take a look :)

thanks, @rsheeter !

Thank you Rod!

repo: googlefonts/tools


text:
Refactor Quilkin's data pipeline into distinct types.

This PR refactors Quilkin's internal proxy structure to more clearly separate responsibilities for handling the "data pipeline" that moves through Quilkin. It achieves this by first pulling that out into its own Pipeline type, which is responsible for creating the DownstreamDistributor and UpstreamDistributor types, which both manage the Downstream and Upstream types respectively. Most of these types are what was already there, just renamed and reorganised. (RunRecvArgs is DownstreamDistributor, Session is now Upstream, etc.).

The other main motivator was due to how we were creating Session, currently a Session is essentially created at the end of process_downstream_received_packet , which spawns and returns itself to be managed inside SessionManager. This is a problem because it essentially requires that all shared upstream state has to also be first passed through the downstream, leading to more boilerplate. Where as now, UpstreamDistributor is responsible for creating sessions, and the Downstream communicates with the UpstreamDistributor to send packets to upstream.
This PR refactors these components into using what you could consider a rudimentary actor model. Where we construct types that have an inherent spawn method, call that method to move their task onto the runtime, and instead of returning itself, it returns a channel to communicate with it (and/or handle to block on completion). I think this pattern lets you more clearly see what's happening, and it had an unintended side-effect of removing about 12 .clones  as there were few cases were we overly cloned an item by one when spawning other tasks.
SessionManager has been removed entirely, as part of this Upstream sessions are now be self managed, meaning they track their own expiration, and terminate when they expire. So instead of storing the session itself in a map, we store the channel we use to send messages instead (as mentioned above), and we know that if we can't send a message to that channel, it's expired and we need to insert a new entry.

Moving this into its own task with its own message queue removes the need for the RwLock on the map, as we messages will just fill the distributor queue while we prune old sessions.
Moved the Server type into src/proxy.rs, and renamed to be Proxy, because it is the main type responsible for the proxy, and it is more than one server technically as you can enable the administration interface and the prometheus' metrics server. This also removed some weird visibility cases, like the fields being pub(super) to be available to the Builder.

I haven't migrated the tests yet, because this requires rewriting a lot of the server test, since those tests were unfortunately using a lot of the same internals, but I wanted to get a review on the structure first, and then if it all looks good I'll migrate over the tests and add further documentation.

I drew a small architecture diagram to hopefully help visualise the structure.

I'm against the channel changes because they're not neccessary afaict and mostly complicate things.

I would like to unpack why you think it complicates things, because the goal of this PR is to simplify, and I’d like to show how I think it achieves that. I don’t think it’s a misuse of channels as this is how is actor message passing works which is a well established pattern, and what it simplifies doesn’t have much to do with concurrency, removing the lock is a side benefit. The main advantage of this approach is that we have a clean separation of state between creating an upstream and downstream.
In the current codebase if you want to add new component to the upstream, you have to also add it to the downstream state, because the downstream has to spawn the upstream. To me, this is more complicated and makes it hard to add to, as it leads to a lot redundant passing state between structs. Look at the difference in the current downstream struct definitions for example. Why does downstream need to know session_ttl? It doesn’t, it only needs it to create a new session, but that information is not important to downstream, we’re not changing the title we send based on the downstream. So instead having to pass around all of the upstream state to each downstream, we can instead have a single sender which sends only what downstream needs to initialise the upstream.
// Current
struct ProcessDownstreamReceiveConfig {
    log: Logger,
    proxy_metrics: ProxyMetrics,
    session_metrics: SessionMetrics,
    cluster_manager: SharedClusterManager,
    filter_manager: SharedFilterManager,
    session_manager: SessionManager,
    session_ttl: Duration,
    send_packets: mpsc::Sender<Packet>,
}

// Proposed
struct Downstream {
     cluster_manager: SharedClusterManager,
     filter_manager: SharedFilterManager,
     log: Logger,
     proxy_metrics: ProxyMetrics,
     distributor_tx: DistributorTx,
 }

could you rather add new commits to ongoing PRs vs force pushing to them? It makes it a bit harder for me to review after the fact since I can e.g no longer see what's changed since previous reviews 🙏

Absolutely 🙂, it makes no real difference to me, I know some people prefer force pushes because it works well with GitHub’s “viewed” feature as that will track what’s updated since your last review overall including force pushes.

As I see the current impl, the flow is largely sequential - a task receives a packet downstream, looks up the correct session in the map and calls session.send(packet). This is straightforward to reason about and we can read the code linearly to see what goes on. Using a queue breaks this linear flow with indirect communication, it also adds backpressure concerns (now we have to reason about packets in any of the queues in addition to packets being processed, increased memory usage due to buffering, tasks potentially blocking/deadlocking due to queue operations/bugs), also a queue is more expensive than using a lock (and this introduces multiple queues). I get the idea behind communicating via message passing (its in theory possible to replace any function call with it), rather I don't think its worth it in this case.

In the current codebase if you want to add new component to the upstream, you have to also add it to the downstream state, because the downstream has to spawn the upstream. To me, this is more complicated and makes it hard to add to, as it leads to a lot redundant passing state between structs

That isn't hard though, its a matter of adding a new field to the ProcessDownstreamReceiveConfig struct? And the setup sort of happens before the packet flow as well. I don't see this as a huge issue tbh (I'll rather have the setup boilerplate) especially because I expect it rarely changes but definitely if we feel it can be improved upon we should first look to solve such issues individually if we can (refactor/rename things so that they are more-isolated/clearer) e.g session_ttl technically doesn't need to be included there today - it could be hardcoded like this PR does and we can figure out what to do with it when we make it configurable in the future.

That isn't hard though, its a matter of adding a new field to the ProcessDownstreamReceiveConfig struct? And the setup sort of happens before the packet flow as well. I don't see this as a huge issue tbh (I'll rather have the setup boilerplate) especially because I expect it rarely changes

In the main flow to add new state to upstream you need to add it three places, in Upstream, in Downstream, and in DownstreamDistributor, which are all at one in the code, which on its own wouldn't be too bad. However our unit tests also construct all of these types, and this is the another advantage to using message passing here, we can test Downstream without constructing the Upstream, we can pass a queue, and read the results of the operation directly off that, making our tests much less brittle.
I'll update the tests now to hopefully show this, since it seems like aside from this message queue, we're generally aligned on this refactor  (though @markmandel hasn't weighed in yet), and these will need updating before merging anyway.

I'll update the tests now to hopefully show this, since it seems like aside from this message queue, we're generally aligned on this refactor (though @markmandel hasn't weighed in yet), and these will need updating before merging anyway.

Sorry, haven't had the big chunk of time to dig into this yet 😢 I definitely trust y'all on the refactoring parts - it might be easier to go through that on its own PR - since at a quick perusal, seems like some 👍🏻  wins there.
My top level question is: What functionality were you trying to build that you otherwise couldn't with the current architecture? That may help sway which way we should also go architecturally.

My top level question is: What functionality were you trying to build that you otherwise couldn't with the current architecture? That may help sway which way we should also go architecturally.

I was implementing the blocklist with a simple event queue, and when I realised it would be more code to make the existing tests work (before adding new tests that actually test the functionality) that was disheartening, I think we should able to add and changes components without it having a large fallout in the rest of the codebase, there's a lot of code that's reimplemented in tests, and unit tests that use other component's private APIs, such that we need to change a lot of code any time components are added, removed, or change APIs. And that's what this PR tries to achieve, every component is decoupled at their logical point and only communicate what's needed to the other components, the prime example (and the part we're discussing) being Downstream no longer needs all of Upstream's state to create it, and each Downstream is no longer responsible for managing the upstream session map, this logic is instead in the UpstreamDistributor which runs in parallel with DownstreamDistributor.

I was implementing the blocklist with a simple event queue

Do you have this in a branch/design doc somewhere, I'd love to see where the complexity comes in -- I have an idea in my head for a blocklist filter, but it's a pretty simple matching system of checking incoming packets from field against something like a CIDR range, with some port information as well (as needed), so am wondering what else is needed here?
Or maybe you have a different design in mind for the blocklist? Maybe it would help to flesh that out in #158 some more?

I'd love to see where the complexity comes in

Maybe I wasn't being clear, the complexity does not come the blocklist (I've included the implementation to show that), it comes from trying to add this component to Quilkin and getting the project back to a testable state. If you want an example of that you can look at #358 where the actual changes are small, but it's spread across 46 files, which makes adding these simple components cumbersome.
use std::net::{IpAddr, SocketAddr};

use chrono::Duration;

pub type SyncBlocklist = std::sync::Arc<tokio::sync::RwLock<Blocklist>>;

/// A blocked IP address and/or port.
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct BlockEntry {
    ip: Option<IpAddr>,
    port: Option<u16>,
    expiration: Option<chrono::DateTime<chrono::Utc>>,
}

impl BlockEntry {
    const BAN_ALL: Self = Self {
        ip: None,
        port: None,
        expiration: None,
    };

    pub fn from_ban_event(
        ip: Option<IpAddr>,
        port: Option<u16>,
        duration: Option<Duration>,
    ) -> Self {
        Self {
            ip,
            port,
            expiration: duration.map(|duration| chrono::Utc::now() + duration),
        }
    }

    fn matches(&self, ip: IpAddr, port: u16) -> bool {
        self.ip.map_or(true, |banned| ip == banned)
            || self.port.map_or(true, |banned| port == banned)
            || self
                .expiration
                .map_or(true, |expiration| expiration > chrono::Utc::now())
    }
}

impl std::fmt::Display for BlockEntry {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(
            f,
            "Block(ip: {}, port: {}, expiration: {})",
            self.ip
                .as_ref()
                .map(IpAddr::to_string)
                .as_deref()
                .unwrap_or("*"),
            self.port
                .as_ref()
                .map(u16::to_string)
                .as_deref()
                .unwrap_or("*"),
            self.expiration
                .as_ref()
                .map(chrono::DateTime::to_string)
                .as_deref()
                .unwrap_or("*"),
        )
    }
}

#[derive(Debug, Clone)]
pub struct Blocklist {
    list: std::collections::HashSet<BlockEntry>,
    /// Specialisation of adding an all `None` block entry to the list, which
    /// effectively stops all traffic.
    block_all_traffic: bool,
    log: slog::Logger,
}

impl Blocklist {
    pub fn new(log: slog::Logger) -> Self {
        Self {
            list: <_>::default(),
            block_all_traffic: false,
            log,
        }
    }

    /// Returns whether the blocklist contains an address or not.
    pub fn contains(&self, addr: &SocketAddr) -> bool {
        if self.block_all_traffic {
            slog::info!(self.log, "All traffic being blocked.");
            true
        } else if let Some(entry) = self
            .list
            .iter()
            .find(|entry| entry.matches(addr.ip(), addr.port()))
        {
            slog::info!(
                self.log,
                "Blocking traffic from: {socket}, matching rule: {entry}",
                socket = addr,
                entry = entry.to_string()
            );
            true
        } else {
            false
        }
    }

    /// Add a new banned entry to the list.
    pub fn add_ban(&mut self, entry: BlockEntry) {
        if entry == BlockEntry::BAN_ALL {
            self.block_all_traffic = true;
        } else {
            self.list.insert(entry);
        }
    }

    /// Remove a entry from the list.
    pub fn remove_ban(&mut self, entry: &BlockEntry) {
        if *entry == BlockEntry::BAN_ALL {
            self.block_all_traffic = false;
        } else {
            self.list.remove(&entry);
        }
    }
}

impl PartialEq for Blocklist {
    fn eq(&self, rhs: &Self) -> bool {
        self.block_all_traffic == rhs.block_all_traffic && self.list == rhs.list
    }
}

it comes from trying to add this component to Quilkin

My confusion comes from me seeing a BlockList as a Filter. Adding a Filter doesn't change any of the architecture. Maybe a meta point of this conversation is, for #158 (or just in general) - there should be more design discussion and general consensus on how a BlockList (or a feature) is implemented before running down the path of implementation.

If you want an example of that you can look at #358 where the actual changes are small, but it's spread across 46 files, which makes adding these simple components cumbersome.

Ah - the reasoning for this starts to make more sense. This leads me to another question: "What architectural changes are in your mind that are required for upcoming features?" - I think there may be many that you have that haven't been communicated and/or that we've come to consensus on, so we have a very different mental model of the pain levels here. At this point, I'm not seeing much documented need for major architectural shifts that have been agreed on, so most of what I'm seeing here is more code complexity for not a huge amount of gain.

Going to close this since the code is out of date, and I want to implement some of #411 which will require more changes to this section.

authors: XAMPPRocky iffyio markmandel

repo: googleforgames/quilkin


text:
submit this package to BioConductor

This package is still very much a work in progress, but it will be great to get it polished and ready for BioConductor!  It needs to be run through a linter also to make sure the style is consistent, per #18

This was completed by @siddharthab !
It will be included in the April 17 release of BioConductor.

Don't forget to send an announcement to BioC-devel :-)
Nice job and congratulations!
--t

On Apr 10, 2015, at 3:06 PM, Nicole Deflaux notifications@github.com wrote:
This was completed by @siddharthab !
It will be included in the April 17 release of BioConductor.
—
Reply to this email directly or view it on GitHub.

Big Congrats Sid and Nicole!  This is HUGE!!!
~p

authors: deflaux pgrosu ttriche

repo: googlegenomics/api-client-r


text:
Identification for GSO objects in the repo

Thanks for your impressive work!
I want to know the relationship between the object id in your repo and those in the GSO website. For example, the names from the GSO website are just like "YumYum_D3_Liquid"/"ZigKick_Hoops", but the names in your repo are in the format like "hN6VWtwq96u"/"Fb7Ffb1zM46".
Could you please tell me about the name of GSO objects you use?

Hi,
Please refer to this spreadsheet for the mapping between our renderings' names and GSO's names.

repo: googleinterns/IBRNet


text:
New availability design (w/ jsps)

Current picture, one day generated:

This is now ready for a more serious review.
Here is a link to the "design doc" which shows the path flow: https://docs.google.com/document/d/16hC28uZNzyd_Lflg-c8eDeZyMG-aXv0fZ502e_JU5dM/edit

I think this is ready for another pass.

This is ready for re-review. Please take a look.

The resulting UI here looks too tall for most web browsers.
We may need to rethink how this is rendered.
@jalexanderqed

The resulting UI here looks too tall for most web browsers.
We may need to rethink how this is rendered.
@jalexanderqed

I think the UI can be improved (rather than changed completely) to fix this by only labeling the hourly cells and allowing the user to imply the 15-minute intervals. This would shrink (might have to be forced with CSS) the cells. That might not have been clear, but I'm basically trying to describe a grid-based simulation of the Google Calendar API. Something like this:
         Monday | Tuesday

|_________________
| 8:00  ||_______________________
|          ||_______________________
|          ||_______________________
|||__________________
| 9:00  ||_______________________
|          ||_______________________
|          ||_______________________
|||__________________
I think this could be changed after-the-fact because the

This is tested and ready for re-review.

authors: acmcarther jalexanderqed meagancheese

repo: googleinterns/InterviewMe


text:
Use HTTPS for demo KML Url

Solves the following error:
java.io.IOException: Cleartext HTTP traffic to googlemaps.github.io not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:244)
at java.net.URL.openStream(URL.java:1072)
at com.google.maps.android.utils.demo.KmlDemoActivity$DownloadKmlFile.doInBackground(KmlDemoActivity.java:88)
at com.google.maps.android.utils.demo.KmlDemoActivity$DownloadKmlFile.doInBackground(KmlDemoActivity.java:79)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)

I signed it!

Thanks @BriChri!

authors: BriChri barbeau

repo: googlemaps/android-maps-utils


text:
Template should include the Play Services dependency

I'm mentioning this because adding Play Services dependency to the app module causes an error.
dependencies {
    // App's dependencies, including test
    compile('com.google.android.gms:play-services-base:7.5.0')
...

Reported error:
:module-flavor1-androidTest-only:processDebugManifest
/somewhere/android-testing-templates/AndroidTestingBlueprint/module-flavor1-androidTest-only/build/intermediates/manifests/full/debug/AndroidManifest.xml:29:28-65 : No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version').

If there is a better place to report this issue please direct me to it.

It would be a bug in the build tools so please file it in b.android.com
Ideally, you can fork this project, add the lines that make it fail and add it to the bug report. That would make understanding the bug much easier. Thanks!

Submited the issue with the fork: https://code.google.com/p/android/issues/detail?id=182814&thanks=182814&ts=1439538894

Thanks! We will follow up on android bugtracker

authors: JoseAlcerreca andrzej-tokarski slinzner

repo: googlesamples/android-testing-templates


text:
Certain characters in twitter status break authentication

Hello,
I'm attempting to use this library to update Twitter, sort of like in the example code. It works most of the time, unless the status body contains certain characters: !, *, (, ), and a handful of others. Whereas it works normally without those characters, attempting to send a tweet with an exclamation point cause Twitter to return its error code "32", "Could not authenticate you."
This may be the same underlying problem discussed but never addressed in this Issue: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3046 So it's possible that the solution may lie deeper than this library, but I thought I'd bring it up here just in case.
I've tried various workarounds like replacing ! with %21 in the url string, but all to no avail. Any suggestions? I can provide sample code to reproduce if necessary.
Thanks,
Zach

You need to percent encode the status, and include the encoding: false
parameter in the post body.
On Wed, Apr 8, 2015, 22:24 Zach Whalen notifications@github.com wrote:

Hello,
I'm attempting to use this library to update Twitter, sort of like in the
example code. It works most of the time, unless the status body
contains certain characters: !, *, (, ), and a handful of others. Whereas
it works normally without those characters, attempting to send a tweet with
an exclamation point cause Twitter to return its error code "32", "Could
not authenticate you."
This may be the same underlying problem discussed but never addressed in
this Issue:
https://code.google.com/p/google-apps-script-issues/issues/detail?id=3046
So it's possible that the solution may lie deeper than this library, but I
thought I'd bring it up here just in case.
I've tried various workarounds like replacing ! with %21 in the url
string, but all to no avail. Any suggestions? I can provide sample code to
reproduce if necessary.
Thanks,
Zach
—
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/apps-script-oauth1/issues/5.

You mean like in the options array pasted to service.fetch ? I tried this (example below) and still get the same error:
var status = 'https://api.twitter.com/1.1/statuses/update.json?status=This%20what%21'
var options =
    {
    "method": "POST",
    "muteHttpExceptions": false,
    "encoding" : false
    };
try {
    var result = service.fetch(status, options);
    Logger.log(result.getContentText());
  }
catch (e) {
    Logger.log(e.toString());
}

Check that the percent encoding is working properly. There are some special
characters that can be passed without a problem, while others will cause
problems and need to be percent encoded. For example, you can't pass !, *,
( or ).
I'm going by memory, since it's been a few months since I grappled with
this. I posted to G+ about it, here's the link.
https://plus.google.com/+JamesPetersen02/posts/7xnheyidqRM
On Thu, Apr 9, 2015 at 9:19 AM Zach Whalen notifications@github.com wrote:

You mean like in the options array pasted to service.fetch ? I tried this
(example below) and still get the same error:
var status = 'https://api.twitter.com/1.1/statuses/update.json?status=This what!'var options =
{
"method": "POST",
"muteHttpExceptions": false,
"encoding" : false
};try {
var result = service.fetch(status, options);
Logger.log(result.getContentText());
}  catch (e) {
Logger.log(e.toString());
}
—
Reply to this email directly or view it on GitHub
https://github.com/googlesamples/apps-script-oauth1/issues/5#issuecomment-91229434
.

This worked! Wow, thanks. The important parameter to set false is "escaping" not "encoding."
Awesome.

authors: jptrsn zachwhalen


text:
Add error message for 3D reconstruction in unity editor

When 3D Reconstruction examples are run in the unity editor, it logs the unhelpful error "Update called before creating a reconstruction context." every frame. This changes it to log a more clear error just once.

Thank you for the PR! I've merged these changes to our internal repo. The next release should have these changes integrated in.

authors: chaosemer kenning

repo: googlesamples/tango-examples-unity


text:
🛑 goormIDE is down

In 33b7d3b, goormIDE (https://ide.goorm.io) was down:

HTTP code: 403
Response time: 470 ms

Resolved: goormIDE is back up in 8210327 after 24 minutes.

repo: goorm-dev/goorm-status

license: MIT


text:
bad case: miss author

https://www.ithome.com/0/639/694.htm
Unable to extract author
from goose3 import Goose
from goose3.text import StopWordsChinese
from loguru import logger
import json

url = 'https://www.ithome.com/0/639/694.htm'
g = Goose(
    {
        'stopwords_class': StopWordsChinese,
        'enable_image_fetching': True,
    }
)

article = g.extract(url=url)
logger.debug(json.dumps(article.infos, indent=4, ensure_ascii=False))

The output is as follows:
{
    "meta": {
        "description": "一年一度的科技界“春晚”又来了。苹果在北京时间 9 月 8 日 01:00 举行了 2022 年秋季新品发布会，IT之家仍然第一时间为大家送上发布会看点的一文汇总",
        "lang": "zh",
        "keywords": "苹果,AirPods Pro,iPhone 14 Pro,iPhone 14",
        "favicon": "//www.ithome.com/favicon.ico",
        "canonical": "https://www.ithome.com/0/639/694.htm",
        "encoding": "utf-8"
    },
    "image": {
        "url": "",
        "width": 0,
        "height": 0,
        "type": "image"
    },
    "domain": "www.ithome.com",
    "title": "苹果秋季新品发布会一文汇总：iPhone 14 Pro 灵动岛绝妙，价格没变 - IT之家",
    "cleaned_text": "一年一度的科技界“春晚”又来了。苹果在北京时间 9 月 8 日 01:00 举行了 2022 年秋季新品发布会，全新 iPhone 14 系列、Apple Watch Series 8、AirPods Pro 等新品悉数登场。老规矩，IT之家仍然第一时间为大家送上发布会看点的一文汇总。\n\n本次发布会，苹果一共发布了 4 款 iPhone 14 系列手机，分别是 iPhone14、iPhone 14 Plus、iPhone 14 Pro 和 iPhone 14 Pro Max。\n\n今年的 iPhone 14 系列取消了 mini 机型，取而代之的是屏幕更大的 iPhone 14 Plus，这两款手机保留了 iPhone 13 的大部分设计 —— 包括用于手机自拍相机和 Face ID 传感器的刘海凹槽，有午夜色、紫色、星光色、红色、蓝色五种配色可选。\n\niPhone 14 标准版使用 6.1 英寸屏幕，而 iPhone 14 Plus 提供 6.7 英寸大屏幕。两款屏幕都采用超瓷晶面板，OLED 屏幕材质，且均为超视网膜 XDR 显示屏。\n\niPhone 14 和 iPhone 14 Plus 的影像配置是一样的，均搭载具备更大感光元件和像素尺寸的 1200 万像素主摄（ƒ/1.5 光圈）、全新 1200 万像素前置原深感摄像头，以及 1200 万像素超广角摄像头（ƒ/2.4 光圈和 120° 视角）。\n\n在 iPhone 14 系列影像系统中，苹果引入了全新的光像引擎技术，通过软硬件深度集成，光像引擎能够提升所有摄像头在中低光环境下的表现：超广角摄像头表现提升可达 2 倍，原深感摄像头表现提升可达 2 倍，全新主摄表现提升可达 2.5 倍。\n\n同时光像引擎带来图像质量的飞跃，它将深度融合在图像处理步骤中提前，从而呈现出更丰富的细节、捕捉到细腻微妙的纹理，让色彩更出众。\n\niPhone 14 系列还加入了全新的运动模式，可拍摄出无比丝滑的视频，应对大幅的抖动、位移和震动，甚至在运动中拍摄时也不例外。原来传感器位移防抖功能也引入到了 iPhone14 系列中。另外电影效果模式现已支持 4K 30 fps 和 4K 24 fps 拍摄。\n\niPhone 14 系列支持传闻已久的通过通信卫星发送的紧急消息，称为紧急 SOS。当用户不在手机信号的范围内时，手机的天线可以连接到卫星频率。通过自定义短文本压缩算法，可将消息大小大幅减少，在能够看到清晰天空的情况下，发送消息的时间不到 15 秒，支持卫星位置共享，在野外场景、紧急救险等领域，卫星通讯功能能够发挥特定功能。\n\niPhone 14 系列新增了一项车祸检测功能。机身内置可以检测到高达 256 g-force 的全新双核加速感应器和高动态范围的陀螺仪，能监测到严重的汽车撞击，并在用户失去意识或者无法触及 iPhone 时自动拨打紧急电话。\n\n同时这项功能还能利用气压计监测到车厢内部气压的变化，GPS 引入更多速度变化的数据，而麦克风则能够识别车祸发出的特有巨大噪声。\n\n配合 Apple Watch ，车祸检测功能可无缝结合两部设备各自的独特优势。当检测到重大车祸时，Apple Watch 的屏幕上将会显示紧急服务通话界面，因为该设备很可能离用户更近；而如果 iPhone 在附近，则将通过 iPhone 拨打电话，以尽可能保证连接质量。\n\niPhone 14 和 14 Plus 都搭载了比去年 iPhone 13 更强的 A15 仿生芯片，升级点在于 GPU 从 4 核升级到了 5 核满血版，让视频类 App 和高性能游戏的图像变得更流畅。此外，它搭载的 6 核 CPU 能够顺畅高效地处理性能要求极高的任务，16 核神经网络引擎每秒运算 15.8 万亿次，可加快第三方 App 和 iOS 16 中机器学习的运算速度。\n\n两款机型于 9 月 9 日（周五）起接受预购，其中 iPhone 14 于 9 月 16 日 （周五）正式发售，iPhone 14 Plus 于 10 月 7 日（周五）正式发售。\n\niPhone 14 Pro 系列也支持前面说到的车祸检测和卫星通信等功能，下面主要介绍它们相比 iPhone 14 系列升级的地方。\n\niPhone 14 Pro 和 iPhone 14 Pro Max 采用精美手术级不锈钢材料和质感优异的哑光玻璃制成，共推出 4 种配色，分别为深空黑色、银色、金色、暗紫色。\n\niPhone 14 Pro 屏幕尺寸为 6.1 英寸，iPhone 14 Pro Max 为 6.7 英寸两种尺寸，两款机型均采用支持 ProMotion 技术的全新超视网膜 XDR 显示屏。\n\n这块先进的显示屏还带来与 Pro Display XDR 显示器一样的 HDR 峰值亮度，也是 iPhone 迄今最高的户外峰值亮度：至高可达 2000 尼特，是 iPhone 13 Pro 的两倍。同时屏幕也采用超瓷晶面板，继续提供领先的耐用特性，抗水防尘，可抵御常见的意外泼溅。\n\niPhone 14 Pro 和 iPhone 14 Pro Max 加入了一项和安卓阵营息屏显示不一样的全天候显示功能，在全新 1Hz 刷新率和多项节能技术的加持之下，屏幕可始终显示锁屏画面，但不是息屏，时间、小组件和实时活动始终一目了然。\n\niPhone 14 Pro 系列上，原深感摄像头经过重新设计，以缩小占用的显示空间，并且成为打孔的药丸形状，苹果别出心裁地为其引入了全新的互动式交互体验：灵动岛。\n\n在不影响屏幕内容显示的前提下，灵动岛保持活跃状态，让用户仅需长按即可使用控制选项。地图、音乐 App 或计时器等保持后台运行的活动始终可见并可交互，也能实时变化显示重要的提醒、通知和活动。此外，灵动岛还适用于 iOS 16 中通过“实时活动”提供信息（如比赛得分和拼车信息）的第三方 App。\n\niPhone 14 Pro 系列的广角主摄上，苹果舍弃了祖传的 1200 万像素，带来了 4800 万像素的广角主摄，支持四合一像素技术，24 毫米焦距，ƒ/1.78 光圈，还有第二代传感器位移式光学图像防抖功能。同时还搭载了全新 1200 万像素超广角摄像头（单位像素大小为 1.4 微米），呈现的图像更清晰、细节更丰富。\n\n同时 iPhone 14 Pro 系列还有一枚 1200 万像素 3 倍长焦镜头，ƒ/2.8 光圈。另外通过主摄的 4800 万像素四合一传感器，iPhone 14 Pro 还支持 2 倍变焦，同样拥有丰富的细节。\n\n关于四合一像素传感器，对于大多数照片，它会将每 4 个像素合并为一个大像素（单位像素尺寸相当于 2.44 微米），从而可在低光条件下拍摄到优质的影像，并将照片大小保持在实用的 1200 万像素。四合一像素传感器还可惠及 Pro 工作流，针对 ProRAW 中的细节呈现进行了优化。此外，利用专为四合一像素传感器量身定制的机器学习模型，iPhone 现可以 4800 万像素拍摄 ProRAW 影像，呈现前所未有的丰富细节。\n\niPhone 14 Pro 系列的影像系统还采用了全新自适应原彩闪光灯，拥有 9 LED 阵列，会根据用户选择的焦距更改闪光模式。\n\n此外，全新原深感摄像头采用 ƒ/1.9 光圈，提升低光环境下的摄影摄像表现。借助首次配备的自动对焦功能，原深感摄像头可以在低光环境中更快地对焦，并从更远处自拍合影。\n\niPhone 14 Pro 系列搭载了全新的 A16 仿生芯片，这是第一款基于 4nm 工艺的 Apple 芯片，拥有 160 亿个晶体管。同时，由 2 颗高性能核心和 4 颗高能效核心组成的 6 核 CPU 带来的速度提升至高可达 40%，并采用经加速的 5 核图像处理器，内存带宽提升多达 50%，极为适合运行图形密集型游戏和 App，而全新 16 核神经网络引擎的处理能力高达每秒 17 万亿次运算。\n\nA16 仿生芯片利用 Apple 业内领先的融合架构将高性能与高能效结合在一起，这枚芯片可在耗电量极低的情况下提供更高的性能，从而实现全天候电池续航。\n\n作为 Pro 级摄像头系统的基础，A16 仿生芯片驱动了出众的计算摄影功能。中央处理器、图像处理器、神经网络引擎和图像信号处理器无缝协作，为全新的摄像头硬件提供支持，可对每张照片进行多达 4 万亿次操作。\n\nApple Watch Series 8 是本场发布会第一个亮相的产品，相比去年的 Apple Watch Series 7 采用了略微更新的设计，使屏幕比以前的型号更大。机身有星光色、午夜色、银色和红色 4 种配色可选，不锈钢表款有银色、石墨色和金色 3 种配色可选。\n\nApple Watch Series 8 加入了新的体温传感器，可以跟踪低至 0.1 摄氏度温度变化，并且每五秒钟检查一次温度。夜间跟踪体温可以帮助女性用户深入了解排卵周期，可以用来增强手表对月经期的周期跟踪功能。\n\n苹果表示，这些数据在手表本身上是加密的，任何人跟踪他们的周期都是重要的考虑因素。\n\n和 iPhone 14 系列一样，Apple Watch Series 8 还包括两个新的运动传感器，用于检测用户是否经历过严重的车祸，并自动为车主连接紧急服务、提供位置并通知紧急联系人。\n\n为此，Apple Watch Series 8 配备了新的 3 轴陀螺仪和高 g 力加速度计，可测量高达 256G，采样速度提高 4 倍（每秒 3000 次）。\n\n为了让用户可以更长时间保持联系，全新的低电量模式可以延长电池续航时间，Apple Watch Series 8 配合 iPhone 使用时的续航最长可至 36 小时。这种新模式下会暂时禁用或限用部分传感器和功能，包括全天候视网膜显示屏、自动开始体能训练、心脏健康通知等。\n\n除了 Apple Watch Series 8，本次发布会苹果还推出了全新的 Apple Watch SE 2。\n\nApple Watch SE 2 将支持 Series 8 上宣布的车祸检测功能，并且由于采用了与 Series 8 中相同的新 S8 芯片，其速度将比第一代 SE 快 20%。它也具有相同的动作传感器。新的 Apple Watch SE 将提供银色、午夜和星光颜色，并具有新的颜色匹配的后壳。\n\nApple Watch SE 还将通过与 iPhone 的漫游计划配对来支持国际漫游。它保留了初代 SE 的所有标准功能 —— 视网膜 OLED 显示屏、光学心率传感器、跌倒检测、紧急 SOS 和深达 50 米的防水。\n\nApple Watch SE 蜂窝版本受到家长的欢迎，他们希望找到一种无需使用 iPhone 就可以与学龄儿童交流的方式，苹果宣布新的 Apple Watch SE 2 将与 Apple 的家庭设置功能一起使用，该功能在 Apple Watch SE 上首次亮相。\n\nApple Watch SE 2 国行版 40mm 版本售价 1999 元起，44mm 版本售价 2399 元起，9 月 9 日起开放订购，并于 9 月 16 日（周五）起发售。\n\nApple Watch 这次还有一项重要更新，那就是发布了全新的 Apple Watch Ultra 运动手表。\n\nApple Watch Ultra 采用航空级钛金属打造，在重量、耐用性与耐腐蚀方面达到了理想平衡，显示屏亮度最高可达 2000 尼特，是此前所有 Apple Watch 机型显示屏亮度的两倍。全新操作按钮以高对比度的国际橙色呈现，可轻松自定义设置，以便快速使用多种功能。\n\nApple Watch Ultra 配备三个内置麦克风，大幅提升了各种环境下语音通话的音质。在对收音极具挑战性的大风环境中，也能为通话提供清楚易辨的音频。\n\nApple Watch Ultra 拥有所有 Apple Watch 中最出色的电池续航表现，在正常使用条件下最长可达 36 小时。此外，通过全新的低功耗设置，电池续航时间更可延长至最高 60 小时，适合连续多日佩戴使用。\n\n专为 Apple Watch Ultra 大面积显示屏设计的“寻路者”表盘包括融入时间显示区域的指南针，并提供了可容纳多达 8 项复杂功能的空间，包括体能训练、指南针航点、回溯等等。\n\nApple Watch Ultra 还首次配备了精密双频 GPS，包括 L1 与最新的 L5 频率，并采用了全新定位算法。这让它能提供迄今最精确的 GPS 功能。\n\n它还能适应各种极端环境，从 -20°C 的寒冷雪山到 55°C 的炽热沙漠。Apple Watch Ultra 已通过 MIL-STD 810H 相关项目的标准认证。\n\nApple Watch Ultra 还支持更丰富的水上运动，包括风筝冲浪与尾波滑水等极限运动，并通过全新 Oceanic+ App 助力深度 40 米以内的休闲式水肺潜水。为支持这些水下冒险，Apple Watch Ultra 通过了 WR100 认证。\n\n利用新的深度计，Apple Watch Ultra 推出了带有直观用户界面的水深 App。水深 App 可显示时间、当前深度、水温、水下持续时间与已抵达最大深度等信息，让用户一目了然。用户可以设置操作按钮，以便快捷启动水深 App。\n\n苹果在本次秋季新品发布会上还推出了全新的第二代 AirPods Pro 耳机。新款 AirPods Pro 由全新 H2 芯片驱动，解锁了突破性的音频表现，对主动降噪和通透模式进行了重大升级。\n\n降噪方面，AirPods Pro 搭载全新 H2 芯片，降噪能力可高达上一代 AirPods Pro 的两倍。\n\n此外，还加入了自适应通透模式，在强大的 H2 芯片驱动下，设备端处理技术可降低吵闹的环境噪音，例如过往车辆的警报声、建筑施工噪音，甚至音乐会中的扬声器声音。\n\n音质方面，个性化空间音频可以让 AirPods 提供更具沉浸感的聆听体验。用户可以使用 iPhone 的原深感摄像头创建空间音频个人轮廓信息，获得专为他们精准调校的聆听体验。\n\n连接与操控方面，用户可以不借助其他设备直接控制全新 AirPods Pro 音频播放和音量调节。使用 AirPods Pro 的触控操作，在耳机柄上向上或向下轻滑即可快速调节音量。用户只需轻按耳机柄便可切换音乐、接听来电，或说一声“嘿 Siri”，无需动手便可发出指令。\n\n续航方面，新款 AirPods Pro 比上一代增加 1.5 小时聆听时间，在主动降噪模式下，聆听时间最长可达 6 小时。无线充电盒可对耳机进行额外 4 次充电，这样在主动降噪模式下享受最长可达 30 小时的聆听时间，比上一代多出 6 小时。\n\n此外，AirPods Pro 配备全新设计的抗汗抗水充电盒，并包含挂绳孔，让设备随时触手可及。精确查找功能让用户可以根据搭载 U1 芯片的 iPhone 提供的导航路线定位充电盒。充电盒内置扬声器可播放音量更大的声音，以帮助定位 AirPods Pro。\n• None 关于 iOS 16 正式版，将于 9 月 13 日起作为免费软件更新提供，同时今日凌晨，苹果向 iPhone 用户推送了 iOS 16 RC 版（内部版本号：20A362）更新。\n• None iPhone 14 发布后，苹果下架 了 iPhone 11 和 iPhone 12/13 Pro / Max，仍可购买 iPhone 12 和 iPhone 13 / mini。\n• None Apple Watch Series 8 发布后，苹果官方正式下架并停产过时的 Apple Watch Series 3。\n• None 本次发布会后，苹果今天还更新了 AppleCare + 额外保修服务，加入了“无限次维修”选项，而不是每年两次，但每次都要收服务费。",
    "opengraph": {},
    "tags": [
        "iPhone 14",
        "iPhone 14 Pro",
        "苹果",
        "AirPods Pro"
    ],
    "tweets": [],
    "movies": [],
    "links": [
        "https://iphone.ithome.com/",
        "https://www.ithome.com/",
        "https://iphone.ithome.com/",
        "https://iphone.ithome.com/",
        "https://iphone.ithome.com/",
        "https://iphone.ithome.com/",
        "https://iphone.ithome.com/",
        "https://iphone.ithome.com/",
        "https://android.ithome.com/",
        "https://www.ithome.com/0/639/675.htm",
        "https://www.ithome.com/0/639/678.htm"
    ],
    "authors": [],
    "publish_date": null
}

This page does not pull author because it does not use a standard method to denote the author in the metadata or in the html. After inspecting the page, one is able to find the information to generate a custom AuthorPattern to pull the correct author. See the code below:
from goose3 import Goose
from goose3.configuration import AuthorPattern

with Goose() as g:
    ithome = AuthorPattern(tag="span", attr="id", value="author_baidu")
    g.config.known_author_patterns = ithome

    url = "https://www.ithome.com/0/639/694.htm"
    article = g.extract(url=url)
    print(article.authors)

authors: barrust ponponon


text:
add test for #116 and resolve a deprication warning for dateutil.parser

@Pradhvan

@barrust looks like the work is almost done. Is there anything you want me to update in the PR ?

Nope! This should be everything; wanted to let you see how tests can be implemented. If you see any other issues, please let the group know!

@barrust thanks. Any idea when would the next release be ?

@Pradhvan it will probably be in the next day or so. I have another PR I want to get in for a new feature to close another issue and once that is in, I will likely push out a new version.

Great 👍🏾 looking forward to it. 😄

authors: Pradhvan barrust


text:
Hash hosts

Instead of keeping a map of hosts, we can hash them and keep the hash sums to save space. Hashes are arrays, which means a fixed size, which is easier to manage and behaves more predictably wrt memory consumption.
After some profiling with the hosts file from http://hosts-file.net/download/hosts.txt, I noticed the following:

Memory
string [Mb]
[8]byte [Mb]
improvement

Alloc
107.87
60.56
43.86%

TotalAlloc
215.78
209.75
2.79%

Sys
131.24
67.86
48.29%

The runtime for parsing the entire host file did not change noticeably (it stayed around 3.4 seconds).
So far the only downside of this approach seems to be that there is no way to list blocked hosts in the web UI. Because of that, we can only use this approach for the public hosts files (which are the huge ones anyway, private hosts files will likely be much smaller).
Closes #9, for now (we could still investigate that later).

Note that I'm halving the MD5 sum here, reducing it to 8 bytes (64) bits instead of 16 bytes. This gives us a chance of collision of one in sqrt(2⁶⁴), which is roughly one in four billion (1/4294967296). A hosts file containing that many hosts would be more than a gigabyte.

Out of curiosity, I also tried using uint64 as the may key, which is also 8 bytes. It behaves exactly like [8]byte, both speed and memory wise.
I'll merge this, seems like nothing broke.

repo: gophergala/dnsp


text:
命令行参数 修正

所以表达式：sep + os.Args[i] 表示连接字符串 sep 和 os.Args  表述有误修改为: 所以表达式：sep + os.Args[i] 表示连接字符串 sep 和 os.Args[i]

thx


text:
Sample format not supported

I'm getting this error when trying the example record.go:
$ ./record test.wav
Recording. Press Ctrl-C to stop.
2022/12/16 05:02:00 Sample format not supported

Original issue: https://github.com/faiface/beep/issues/158

This seems to be an issue about my repository https://github.com/MarkKremer/microphone.
Feel free to open a new issue there.

authors: MarkKremer duysqubix

repo: gopxl/beep


text:
Improve Mixpanel metrics

Currently we don't identify individual members and see their behaviour. People's tab in Mixpanel should be activated to do this.

Fixed in: fabcd0062ad5d021c5b9156d73153037188c1cb2

repo: gorgias/gorgias-chrome


text:
Lighthouse: enable text compression

https://developers.google.com/web/tools/lighthouse/audits/text-compression
CSS, JS and HTML all likely to benefit. Expect to see ~2s response time reduction on home page (uncached)

authors: gordongrace sukhrajghuman

repo: govau/design-system-site