⚠ RPC server - Harmony Test has degraded performance

In e1981d9, RPC server - Harmony Test ($HARMONY_TEST_RPC_URL) experienced degraded performance:

HTTP code: 0
Response time: 0 ms

Resolved: RPC server - Harmony Test performance has improved in 1a48124.


Typo (trivial / picky / low importance)

In section "To test custom report layout updates" :
"Chnages to the report layouts..."
>> "Changes"

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: b0d297c0-1f45-f2cd-e74f-d2ded77e5cd7
Version Independent ID: a4092919-2da0-ba4c-c62b-69de3b08534e
Content: Keeping a Report Layout Up-to-date - Business Central
Content Source: business-central/ui-update-report-layouts.md
Service: dynamics365-business-central
GitHub Login: @jswymer
Microsoft Alias: jswymer

Hello, the typo has been fixed and the updated article will be published soon. Thanks for the feedback!


Blog app - creating a data model

Project requirements
Be sure to reference the ERD diagram below

Create a new app. Give it a meaningful name.
Initialize your project with Git.
Make sure that your project has Postgres database set up.
Build your project schema.

Create and run the necessary migration files.
Table and column names should match the ERD diagram.

note: photo for users table should be a link to an image

Foreign keys should be included.
All columns that are foreign keys should have a corresponding index.

Hi @Bornittah 😃,
As much as I appreciate your hard work on this project, I'm afraid that I can't perform a review on this pull request.
Invalid Submission

Please fix the linters

Your Code Review Request will be marked as invalid in your Dashboard, so please submit a new one once you are ready. 🙏
Cheers and Happy coding!👏👏👏
Feel free to mention @MahmoudBakr23 to leave any questions or comments in the PR thread if something is not 100% clear.

Please, do not open a new Pull Request for re-reviews. You should use the same Pull Request submitted for the first review, either valid or invalid unless it is requested otherwise.

Invalid Code Review Request does not count into the code reviews limit.


permissions?

I am evaluating 1.3.0 have used collins-shell to add a SERVER_NODE asset
$ collins-shell asset create --type=SERVER_NODE --tag=foo
foo,Incomplete,SERVER_NODE,2015-07-13T16:04:26+00:00,,

Now, I'd like to delete it but know I must first set the status appropriately
$ collins-shell asset set_status --reason='why not' --status=Decommissioned --tag=foo
fatal  unable to run command '/home/akosmin/.gem/ruby/2.1.3/bin/collins-shell asset set_status --reason=why not --status=Decommissioned --tag=foo'
exception  Exception talking to /api/asset/foo/status: Invalid username or password

That seems odd given my very simple permissions.conf
users:
  ops:
    - "akosmin"
permissions:
  feature.noRateLimit:
    - "u=ops"
  feature.canSeePasswords:
    - "u=ops"
  controllers.Admin:
    - "u=ops"
  controllers.Admin.stats:
    - "u=ops"
  controllers.AssetLogApi.getAllLogData:
    - "u=ops"
  controllers.AssetApi.createAsset:
    - "u=ops"
  controllers.AssetApi.updateAsset:
    - "u=ops"
  controllers.AssetApi.updateAssetForMaintenance:
    - "u=ops"
  controllers.AssetApi.deleteAssetAttribute:
    - "u=ops"
  controllers.AssetApi.deleteAsset:
    - "u=ops"
  controllers.AssetManagementApi.powerManagement:
    - "u=ops"
  controllers.AssetManagementApi.powerStatus:
    - "u=ops"
  controllers.AssetManagementApi.provisionAsset:
    - "u=ops"
  controllers.AssetManagementApi.getProvisioningProfiles:
    - "u=ops"
  controllers.AssetWebApi.cancelAsset:
    - "u=ops"
  controllers.AssetWebApi.deleteAsset:
    - "u=ops"
  controllers.IpAddressApi:
    - "u=ops"

and here's the related bits from conf/production.conf
conf_dir = "/usr/local/collins/current/conf"
authentication {
  permissionsFile = ${conf_dir}"/permissions.yaml"
  type = file
  file {
    userfile = ${conf_dir}"/users.conf"
  }
}

Am I missing something here?
Also worth mentioning is the fact the the SERVER_NODE asset can not be deleted from the UI. There's an open issue about this which seems to have gone idle.

Hi @windowsrefund - you'll also need to give yourself permissions to controllers.AssetApi.updateAssetStatus in order to set the status.
The permissions system is pretty nuanced.  The best way I've found to identify each of the permissions is the api docs.  It lists each API endpoint, and its associated permission.
Let me know if that doesn't work for you!

Awesome, works perfectly. Thanks for pointing the way.


Warning: Tab character

While building the modules during installation or compiling with GHC or even opening them with GHCi, multiple warnings "... Warning: Tab character" are displayed.

Tab characters have been replaced by spaces in all Haskell source files.


Sql variant support

Codecov Report

Merging #387 into dev will increase coverage by 0.22%.
The diff coverage is 41.45%.

@@             Coverage Diff              @@
##                dev     #387      +/-   ##
============================================
+ Coverage     40.16%   40.38%   +0.22%
- Complexity     1892     1918      +26
============================================
  Files           107      108       +1
  Lines         24482    25061     +579
  Branches       4038     4111      +73
============================================
+ Hits           9833    10122     +289
- Misses        12815    13068     +253
- Partials       1834     1871      +37

Flag
Coverage Δ
Complexity Δ

#JDBC41
40.22% <41.45%> (+0.18%)
1907 <24> (+24)
:arrow_up:

#JDBC42
40.2% <41.45%> (+0.18%)
1912 <24> (+27)
:arrow_up:

Impacted Files
Coverage Δ
Complexity Δ

...om/microsoft/sqlserver/jdbc/SQLServerResource.java
100% <ø> (ø)
4 <0> (ø)
:arrow_down:

src/main/java/microsoft/sql/Types.java
0% <ø> (ø)
0 <0> (ø)
:arrow_down:

...rc/main/java/com/microsoft/sqlserver/jdbc/TVP.java
45.26% <ø> (ø)
27 <0> (ø)
:arrow_down:

...om/microsoft/sqlserver/jdbc/SQLServerMetaData.java
24% <0%> (-0.49%)
0 <0> (ø)

...ava/com/microsoft/sqlserver/jdbc/SQLCollation.java
92.04% <0%> (-0.45%)
12 <0> (ø)

.../microsoft/sqlserver/jdbc/SQLServerConnection.java
45.06% <0%> (ø)
267 <0> (ø)
:arrow_down:

...n/java/com/microsoft/sqlserver/jdbc/DataTypes.java
77.12% <100%> (+0.23%)
5 <0> (ø)
:arrow_down:

...oft/sqlserver/jdbc/SQLServerResultSetMetaData.java
40.97% <100%> (+0.83%)
23 <0> (+1)
:arrow_up:

.../com/microsoft/sqlserver/jdbc/SQLServerDriver.java
75.44% <100%> (ø)
25 <0> (ø)
:arrow_down:

...m/microsoft/sqlserver/jdbc/SQLServerResultSet.java
27.7% <100%> (+0.29%)
191 <2> (+3)
:arrow_up:

... and 21 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 3bd68b5...7d91991. Read the comment docs.

@sehrope, would you be able to help take a look at this PR to provide support for SQL Variant?

Sure I can take look. Should be able to get around to it later this week.

REALLY GREAT WORK @v-afrafi  !!! I am very amazed to see this complicated feature is implemented now. A complicated feature that involves so many data types and features (e.g. BulkCopy and TVP).
All the code review comments are just coding/naming convention, formatting issues, and a few questions/doubts in my mind. Also great to know it does not cause regression in our test lab.

@sehrope, if you do get a chance to code review, please let us know. We look forward to your feedback.


fix: unbreak precompilation

precompile is currently broken due to repeated definition https://buildkite.com/julialang/reactant-dot-jl/builds/1100#0192d4c6-e438-4424-ba7e-9d3aa9aa6858/277-706

#199 should fix the problem

@avik-pal don't merge this PR
this is the original function definition that should be correct and the duplicated one was removed in #169


Duncan Channel 2020 spawner observation error estimates in updated raw data file

Hi @kalebentley, I'm working on updating the IPM fits with your recently updated data files, but I ran into a problem that I ultimately traced back to how the spawner observation error estimates for Duncan Channel in 2020 are coded. These are the relevant rows of spawner_data, as constructed here:
 year strata         location    disposition method S_obs SD tau_S_obs
1 2020  Gorge     Duncan Creek Duncan Channel Census    78  0         0
2 2020  Gorge Hamilton Channel Duncan Channel Census     0 NA        NA
3 2020  Gorge        Horsetail Duncan Channel Census     7 NA        NA
4 2020  Gorge            I-205 Duncan Channel Census     0 NA        NA
5 2020  Gorge             Ives Duncan Channel Census    21 NA        NA
6 2020  Gorge        Multnomah Duncan Channel Census    17 NA        NA
7 2020  Gorge         St Cloud Duncan Channel Census     0 NA        NA

Because the obs error SD for fish from location == "Duncan Creek" is coded as 0 while all others (and indeed all other cases with disposition == "Duncan Channel" across all years) are coded as NA, we wind up with two rows for 2020 when we aggregate spawner_data by taking the unique values of tau_S_obs (which should be a singular unique value).
I'm guessing that 0 should be an NA, but wanted to double-check before I edit the raw data.

@ebuhle, Indeed - the zero should be an NA to match the formatting from all other years.

Great, thanks. Do you want to make the change on your end since you have the master file?

The dataset has been updated


fix: Expiration computing

Thank you for your contribution to the KodaDot NFT gallery.
👇 _ Let's make a quick check before the contribution.
PR type

[x] Bugfix
[ ] Feature
[ ] Refactoring

What's new?

[x] PR closes #3588
[ ] Requires deployment <rubick/magick_issue>
[ ] <brief_description_of_what_I've_added>

Before submitting Pull Request, please make sure:

[x] My contribution builds clean without any errors or warnings
[x] I've merged recent default branch -- main and I've no conflicts
[x] I've tried to respect high code quality standards
[x] I've didn't break any original functionality
[x] I've posted a screenshot of demonstrated change in this PR

Optional

[ ] I've tested it at </rmrk/collection/26902bc2f7c20c546a-1FVG7>
[ ] I've tested PR on mobile and everything seems works
[ ] I found edge cases
[ ] I've written some unit tests 🧪

Had issue bounty label?

[x] Fill up your KSM address: Payout

Community participation

[x] Are you at KodaDot Discord?

Screenshot

[x] My fix has changed something on UI; a screenshot is best to understand changes for others.

pay 50 usd

😍 Perfect, I’ve sent the payout
💵 $50 @ 64.86 USD/KSM ~ 0.771 $KSM
🧗 Caiv9TbPz68q5dC8EcHu5xKYPRnremimGzqmEejDFNpWWLG
🔗 0x8532b571cd39d91d222603e3b5ce1b019fc768ecfac98304f4a893be3227b422
🪅 Let’s grab another issue and get rewarded!
🪄 github.com/kodadot/nft-gallery/issues


ENH: Decoupling anatomical reports

This PR delays report generation to the anat_report_wf workflow which is staged at the end. This decoupling will allow creating reportlets from existing derivatives in the context of #107.
For the generation of the surfaces report, the ReconAllRPT interface is dropped, and a new lightweight interface based on SimpleInterface is included.

@effigies this is ready for review :+1:

Thanks, I'll have a look in the morning.


Add LGTM code quality badges

Hi there!
I thought you might be interested in adding these LGTM code quality badges to your project. They indicate how you care about code quality and encourage your future contributors to do the same.
To get an idea of the analyses reflected by these grades, check the alerts discovered by LGTM.
N.B.: I am on the team behind LGTM.com, I'd appreciate your feedback on this initiative, whether you're interested or not, if you find time to drop me a line. Thanks.

Coverage remained the same at 31.399% when pulling fc2dd2bcf273597c3700cfc3ee6af0acaa69bc4d on xcorail:develop into b55d4f5ce512e90f0f4499dbea78981468d9b29f on linode:develop.


docs(@angular/cli): fix sample home.md

It was wrong the name of the folder.

And it's in, thank you!


Break visualizer and GUI update trigger

OS: Linux

Open a dataset and add/enable a renderer
Start dragging an opacity control point
While still dragging, right click inside the MappingFrame
Click elsewhere (inside the MF works) to dismiss the popup

Changing parameters in the GUI will no longer trigger an update (i.e. the visualizer will not redraw and other elements in the GUI, except for the one manually changed by the user, will not update)

This might be related to issue #1592


Binary dump/load

Proper binary dump and loading.
This will:

Help diagnostics instead of reading CPUID tables.
Help unittesting with specific processor models.

Implementation:

[ ] Internals in main (function pointer setting destination, either table or file)
[ ] Internals in ddcpuid
[ ] View file content from dump. (print values)
[ ] View summary from dump.
[ ] View advanced details from dump.
[ ] View CPUID table from dump.
[ ] Unittest mechanism

e.g., expecting n cores with xyz model
cpuid register tables writing to temporary file

File layout:

4 bytes: "ddcd"
2 bytes: file version
2 bytes: major ddcpuid version
2 bytes: minor ddcpuid version
2 bytes: fix ddcpuid version
foreach leaf:

4 bytes: leaf
4 bytes: sub-leaf
4 bytes: eax
4 bytes: ebx
4 bytes: ecx
4 bytes: edx

I have no need for this, dropped.


get refresh tokens for google

It seems like Google's oauth tokens only last like a day, so we lose the ability to access a user's photos pretty quickly. I think we can request refresh tokens.

I think this is fixed. Relevant commits:
2fbdd4d6c9f09f5b67a1c4dc98de5930ba2fe3e2
13a81fe2dbf81223ec2bc5c921fb7f05ce2a0585
5dec87f677ad6a49bb05d13359e5dfe93a83f16d


[Feature]: Implement afterTransactionCompletion, afterCommitCreate, et al similar to Hibernate counterparts

Is your feature request related to a problem? Please describe.
Our project is making use of explicit transactions with explicit use of begin, commit, and rollback methods. We need to register hook handlers for afterFlush, afterCreate, etc, to run some business logic that will notify users and/or integrated systems of such events.
Our problem as of now is that these are run after UoW commit phase and not transaction commit phase so in the case where a commit fails on the database side (deferred constraint checks, concurrency problems, etc), it is important to have a way from those hook handlers to be aware of this and therefore not execute their code OR have separate hooks that are guaranteed to only run on successful transactions. Currently those hooks are executed regardless and this presents a serious problem for our use case.
Describe the solution you'd like
Implement hooks similar to afterTransactionCompleted and events such as POST_COMMIT_INSERT, et al, which are part of the Hibernate ORM (I understand this project is inspired in part by it) so that we can make use of those hooks instead of the current ones. The behavior of the current ones would not be altered.
Describe alternatives you've considered
Our team has concluded that the only way for us to guarantee our business logic is run on successful transactions only is to make use of the CDC (Change Data Capture) functionalities of our preferred database in conjunction with perhaps something like Kafka Connect by way of a Debezium Kafka Source Connector and then additionally a Kafka Consumer that would execute our aforementioned business logic. This seems overkill to us.
Additional context
I had previously opened an issue regarding our findings: #1160. I am willing to write a PR implementing this feature, but would first like to hear from @B4nan if that is something that would be taken into consideration or not.

The test suite referenced in #1160 had a few issues where some tests where not written correctly and I was not awaiting some expects.
With that fixed, I can see that actually more (and some new specific) test cases fail:

So as you can see, in the case of commit statement failures, afterCreate and afterFlush are actually being called in the case of explicit transactions with transactional(), and afterCreate (but not afterFlush) in the case of implicit transactions.
After updating to 4.3.4-dev.8 (which includes #1177) 1 test cases now succeeds:

These hooks exist in other Node.js libraries  -
TypeORM - afterTransactionCommit and afterTransactionRollback
Sequelize - afterCommit
It would be great to have something similar in MikroORM

I am currently working on a PR for this. Will have something very soon.


Start translating e2e tests from pion

This is a first crack at issue #42.
This is also my first crack at writing Rust, so I'm looking for feedback and suggestions. My code is almost certainly not idiomatic and I've probably made some simple mistakes with ownership, particularly across async calls.
See the tests README for general info.

I'm opening this for review. The build is not passing, but most of logic has been filled in. I could a use a once-over by a more experienced rustacean when it comes to architecture and handling of async code.

I'm opening this for review. The build is not passing, but most of logic has been filled in. I could a use a once-over by a more experienced rustacean when it comes to architecture and handling of async code.

@littlebenlittle, since DTLS has been moved to https://github.com/webrtc-rs/dtls repo, could you move this PR to that repo too?

@littlebenlittle, since DTLS has been moved to https://github.com/webrtc-rs/dtls repo, could you move this PR to that repo too?

See https://github.com/webrtc-rs/dtls/pull/2

See https://github.com/webrtc-rs/dtls/pull/2


Create unified IA for the "Design System"

Review IA of Storybook (UI components), Figma, and Adobe XD design system .
Outline the 1st draft of a “unified” IA that could work for both Storybook and Figma.
Create outline here
https://miro.com/app/board/o9J_lpIu8VE=/?invite_link_id=351088677113
Figma assets
https://www.figma.com/@diodesign
Storybook assets
https://ui-components.alpha.alberta.ca/
Adobe XD DS prototype

No longer relevant


Show some usage stats and cost for DataHub

We should give a general idea for usage stats on the DataHub, as well as the cost one might expect to incur given those stats.

this now lives at https://github.com/choldgraf/dsep_stack/blob/master/tech/process.md


Optimize Char#to_s

This optimizes Char#to_s by passing the exact amount of bytes to String.new so if a character has less than 4 bytes (which is very commonly the case), less memory will be allocated by GC.malloc_atomic which is faster.
1 byte character:
new to_s  64.32M ( 15.55ns) (±14.73%)  16 B/op        fastest
old to_s  23.16M ( 43.18ns) (±21.06%)  48 B/op   2.78× slower

2 byte character:
new to_s  47.31M ( 21.14ns) (±20.04%)  16 B/op        fastest
old to_s  22.29M ( 44.86ns) (±22.60%)  48 B/op   2.12× slower

3 byte character:
new to_s  47.76M ( 20.94ns) (±10.11%)  32 B/op        fastest
old to_s  31.36M ( 31.89ns) (± 8.03%)  32 B/op   1.52× slower

4 byte character, the new to_s is slightly slower than the old to_s:
new to_s  45.33M ( 22.06ns) (±12.35%)  32 B/op   1.10× slower
old to_s  49.89M ( 20.05ns) (± 7.99%)  32 B/op        fastest

I believe that is because in the new to_s the 4 needs to be computed first using Char#bytesize while the old to_s has the 4 already.
But I think it's worth it.
This also fixes two dead links.

@r00ster91 Thank you! This is a good idea. However, calling bytesize and then each_byte effectively decodes the char twice, that's why with 1 byte it's a bit slower.
Using your initial idea of avoiding allocating more memory than needed, I ended up with this implementation:
def new_to_s
  chars = uninitialized UInt8[4]
  i = 0
  each_byte do |byte|
    chars[i] = byte
    i += 1
  end
  String.new(i) do |buffer|
    buffer.copy_from(chars.to_unsafe, i)
    {i, 1}
  end
end

Using this benchmark:
require "benchmark"

Benchmark.ips do |x|
  x.report("1 (old)") do
    'a'.to_s
  end
  x.report("1 (new)") do
    'a'.new_to_s
  end
end

Benchmark.ips do |x|
  x.report("2 (old)") do
    'ߣ'.to_s
  end
  x.report("2 (new)") do
    'ߣ'.new_to_s
  end
end

Benchmark.ips do |x|
  x.report("3 (old)") do
    '勞'.to_s
  end
  x.report("3 (new)") do
    '勞'.new_to_s
  end
end

Benchmark.ips do |x|
  x.report("4 (old)") do
    '䈽'.to_s
  end
  x.report("4 (new)") do
    '䈽'.new_to_s
  end
end

I got these results:
1 (old)  19.64M ( 50.91ns) (± 1.84%)  48 B/op   1.89× slower
1 (new)  37.07M ( 26.98ns) (± 1.72%)  16 B/op        fastest
2 (old)  19.76M (  50.6ns) (± 2.96%)  48 B/op   1.99× slower
2 (new)  39.26M ( 25.47ns) (± 3.33%)  16 B/op        fastest
3 (old)  17.45M ( 57.31ns) (± 3.39%)  33 B/op   1.46× slower
3 (new)  25.56M ( 39.12ns) (± 2.62%)  32 B/op        fastest
4 (old)  17.27M ( 57.89ns) (± 4.55%)  33 B/op   1.45× slower
4 (new)   25.0M ( 39.99ns) (± 6.45%)  32 B/op        fastest

(always faster than before)
Can you run this benchmark in your machine to check it's also always faster?

Oh so in your implementation you avoid some of these checks: elsif c <= 0xffff by not calling both bytesize and each_byte like in the implementation of this PR, that's a good idea.

that's why with 1 byte it's a bit slower.

I think you mean 4 bytes, right?
In your last benchmark the 䈽 isn't 4 bytes, it's 3 bytes. When I replace it with 􏾛 which has 4 bytes, these are my results:
1 (old)  20.95M ( 47.73ns) (±21.06%)  48 B/op   3.33× slower
1 (new)  69.83M ( 14.32ns) (±13.88%)  16 B/op        fastest
2 (old)  19.95M ( 50.13ns) (±21.08%)  48 B/op   2.88× slower
2 (new)  57.51M ( 17.39ns) (±19.27%)  16 B/op        fastest
3 (old)  24.89M ( 40.18ns) (±14.46%)  32 B/op   2.09× slower
3 (new)  52.07M ( 19.21ns) (± 8.31%)  32 B/op        fastest
4 (old)  50.25M (  19.9ns) (± 8.13%)  32 B/op        fastest
4 (new)  50.12M ( 19.95ns) (± 7.47%)  32 B/op   1.00× slower

So in the last benchmark the new implementation is at least not slower.
But now when I also benchmark with the to_s of this PR:
require "benchmark"

struct Char
  def new_to_s
    chars = uninitialized UInt8[4]
    i = 0
    each_byte do |byte|
      chars[i] = byte
      i += 1
    end
    String.new(i) do |buffer|
      buffer.copy_from(chars.to_unsafe, i)
      {i, 1}
    end
  end
  def pr_to_s
    String.new(bytesize) do |buffer|
      appender = buffer.appender
      each_byte { |byte| appender << byte }
      {appender.size, 1}
    end
  end
end

Benchmark.ips do |x|
  x.report("1 (old)") do
    'a'.to_s
  end
  x.report("1 (new)") do
    'a'.new_to_s
  end
  x.report("1 (pr)") do
    'a'.pr_to_s
  end
end
Benchmark.ips do |x|
  x.report("2 (old)") do
    'ߣ'.to_s
  end
  x.report("2 (new)") do
    'ߣ'.new_to_s
  end
  x.report("2 (pr)") do
    'ߣ'.pr_to_s
  end
end
Benchmark.ips do |x|
  x.report("3 (old)") do
    '勞'.to_s
  end
  x.report("3 (new)") do
    '勞'.new_to_s
  end
  x.report("3 (pr)") do
    '勞'.pr_to_s
  end
end
Benchmark.ips do |x|
  x.report("4 (old)") do
    '􏾛'.to_s
  end
  x.report("4 (new)") do
    '􏾛'.new_to_s
  end
  x.report("4 (pr)") do
    '􏾛'.pr_to_s
  end
end

I get this where the PR implementation is a tiny bit faster than your implementation for some reason:
1 (old)  17.03M ( 58.72ns) (±20.07%)  48 B/op   4.08× slower
1 (new)  68.56M ( 14.58ns) (±12.98%)  16 B/op   1.01× slower
 1 (pr)  69.44M (  14.4ns) (±11.49%)  16 B/op        fastest
2 (old)  22.14M ( 45.16ns) (±22.05%)  48 B/op   3.07× slower
2 (new)  65.38M (  15.3ns) (±12.42%)  16 B/op   1.04× slower
 2 (pr)  67.88M ( 14.73ns) (±13.54%)  16 B/op        fastest
3 (old)  29.58M ( 33.81ns) (± 8.87%)  32 B/op   1.80× slower
3 (new)  52.56M ( 19.02ns) (± 7.47%)  32 B/op   1.01× slower
 3 (pr)  53.34M ( 18.75ns) (± 7.06%)  32 B/op        fastest
4 (old)  28.27M ( 35.37ns) (±12.94%)  32 B/op   1.87× slower
4 (new)  52.58M ( 19.02ns) (± 7.87%)  32 B/op   1.01× slower
 4 (pr)  52.93M ( 18.89ns) (± 7.48%)  32 B/op        fastest

Hmm but I'm not sure if there is actually really a difference.
Now only comparing those 3:
Benchmark.ips do |x|
  x.report("4 (old)") do
    Char::MAX.to_s
  end
  x.report("4 (new)") do
    Char::MAX.new_to_s
  end
  x.report("4 (pr)") do
    Char::MAX.pr_to_s
  end
end

4 (old)  45.47M ( 21.99ns) (±12.17%)  32 B/op   1.10× slower
4 (new)   49.9M ( 20.04ns) (± 8.18%)  32 B/op        fastest
 4 (pr)  49.23M ( 20.31ns) (± 8.60%)  32 B/op   1.01× slower

Yes it looks like they are relatively the same.

In the 4 byte character benchmark in the description of this PR it was just a coincidence I think. I was just sure the new implementation was slower in this case because I've ran it multiple times in a row and it was always shown as 'slower'. But now I also got a case where the old one was 'slower':
$ crystal benchmark.cr --release
4 (pr)   44.4M ( 22.52ns) (±14.21%)  32 B/op   1.13× slower
4 (old)  50.39M ( 19.85ns) (± 8.81%)  32 B/op        fastest
$ crystal benchmark.cr --release
4 (pr)   23.81M ( 41.99ns) (±14.00%)  32 B/op   1.94× slower
4 (old)  46.09M (  21.7ns) (±20.27%)  32 B/op        fastest
$ crystal benchmark.cr --release
4 (pr)   47.82M ( 20.91ns) (±12.49%)  32 B/op        fastest
4 (old)  41.89M ( 23.87ns) (±23.95%)  32 B/op   1.14× slower

I resolved the conflicts.

I think the implementation should be changed to @asterite's proposal in https://github.com/crystal-lang/crystal/pull/7393#issuecomment-461575678
It seems a bit weird that in your benchmark, it was en par with the bytesize implementation, but in theory it should be more performant.

@straight-shoota Here's another benchmark.
struct Char
  def new_to_s
    chars = uninitialized UInt8[4]
    i = 0
    each_byte do |byte|
      chars[i] = byte
      i += 1
    end
    String.new(i) do |buffer|
      buffer.copy_from(chars.to_unsafe, i)
      {i, 1}
    end
  end
end

require "benchmark"

Benchmark.ips do |benchmark|
  benchmark.report("to_s") { 'あ'.to_s(); 'a'.to_s(); }
  benchmark.report("new_to_s") { 'あ'.new_to_s(); 'a'.new_to_s(); }
end

    to_s  14.87M ( 67.25ns) (±16.56%)  80.0B/op   2.91× slower
new_to_s  43.29M ( 23.10ns) (±22.26%)  48.0B/op        fastest

new_to_s is still consistently faster for me and allocates less memory. Same for the benchmark @asterite provided above.
Is anything blocking this?

@r00ster91
I have tried improving the performance even further.
I came up with this (method blobcodes_to_s):

Benchmark code

require "benchmark"

struct Char
  # Mostly copied from the each_char implementation (just replaced the yields with String creation)
  def blobcodes_to_s : String
    c = ord
    if c < 0x80
      # 0xxxxxxx
      String.new(1) do |pointer|
        pointer[0] = c.to_u8
        {1, 1}
      end
    elsif c <= 0x7ff
      # 110xxxxx  10xxxxxx
      String.new(2) do |pointer|
        pointer[0] = (0xc0 | c >> 6).to_u8
        pointer[1] = (0x80 | c & 0x3f).to_u8
        {2, 1}
      end
    elsif c <= 0xffff
      # 1110xxxx  10xxxxxx  10xxxxxx
      String.new(3) do |pointer|
        pointer[0] = (0xe0 | (c >> 12)).to_u8
        pointer[1] = (0x80 | ((c >> 6) & 0x3f)).to_u8
        pointer[2] = (0x80 | (c & 0x3f)).to_u8
        {3, 1}
      end
    elsif c <= MAX_CODEPOINT
      # 11110xxx  10xxxxxx  10xxxxxx  10xxxxxx
      String.new(4) do |pointer|
        pointer[0] = (0xf0 | (c >> 18)).to_u8
        pointer[1] = (0x80 | ((c >> 12) & 0x3f)).to_u8
        pointer[2] = (0x80 | ((c >> 6) & 0x3f)).to_u8
        pointer[3] = (0x80 | (c & 0x3f)).to_u8
        {4, 1}
      end
    else
      raise InvalidByteSequenceError.new("Invalid char value #{dump}")
    end
  end

  def r00ster91_to_s
    chars = uninitialized UInt8[4]
    i = 0
    each_byte do |byte|
      chars[i] = byte
      i += 1
    end
    String.new(i) do |buffer|
      buffer.copy_from(chars.to_unsafe, i)
      {i, 1}
    end
  end
end

char = '😎'
Benchmark.ips do |x|
  x.report("old") { char.to_s }
  x.report("roo") { char.r00ster91_to_s }
  x.report("blo") { char.blobcodes_to_s }
end

char = 'a'
Benchmark.ips do |x|
  x.report("old") { char.to_s }
  x.report("roo") { char.r00ster91_to_s }
  x.report("blo") { char.blobcodes_to_s }
end

Results:
Char: '😎'
old  76.12M ( 13.14ns) (± 1.60%)  32.0B/op   1.02× slower
roo  65.47M ( 15.28ns) (± 1.68%)  32.0B/op   1.18× slower
blo  77.37M ( 12.92ns) (± 1.67%)  32.0B/op        fastest

Char: 'a'
old  38.66M ( 25.87ns) (± 3.17%)  48.0B/op   3.02× slower
roo  96.35M ( 10.38ns) (± 1.78%)  16.0B/op   1.21× slower
blo 116.76M (  8.56ns) (± 2.57%)  16.0B/op        fastest

It definitely looks worse than the other method (because it is so big), but I think it could be considered.

If #10451 is merged then it is safe to assume that !(0xD800 <= ord <= 0xDFFF) && ord <= MAX_CODEPOINT for any Char. In that case what happens if range checking is removed from all 3 implementations as much as possible? (Most notably InvalidByteSequenceError would not be raised at all.)

If #10451 is merged then it is safe to assume that !(0xD800 <= ord <= 0xDFFF) && ord <= MAX_CODEPOINT for any Char. In that case what happens if range checking is removed from all 3 implementations as much as possible? (Most notably InvalidByteSequenceError would not be raised at all.)

Code

require "benchmark"

struct Char
  # Mostly copied from the each_char implementation
  def blobcodes_to_s : String
    c = ord
    if c < 0x80
      # 0xxxxxxx
      String.new(1) do |pointer|
        pointer[0] = c.to_u8
        {1, 1}
      end
    elsif c <= 0x7ff
      # 110xxxxx  10xxxxxx
      String.new(2) do |pointer|
        pointer[0] = (0xc0 | c >> 6).to_u8
        pointer[1] = (0x80 | c & 0x3f).to_u8
        {2, 1}
      end
    elsif c <= 0xffff
      # 1110xxxx  10xxxxxx  10xxxxxx
      String.new(3) do |pointer|
        pointer[0] = (0xe0 | (c >> 12)).to_u8
        pointer[1] = (0x80 | ((c >> 6) & 0x3f)).to_u8
        pointer[2] = (0x80 | (c & 0x3f)).to_u8
        {3, 1}
      end
    elsif c <= MAX_CODEPOINT
      # 11110xxx  10xxxxxx  10xxxxxx  10xxxxxx
      String.new(4) do |pointer|
        pointer[0] = (0xf0 | (c >> 18)).to_u8
        pointer[1] = (0x80 | ((c >> 12) & 0x3f)).to_u8
        pointer[2] = (0x80 | ((c >> 6) & 0x3f)).to_u8
        pointer[3] = (0x80 | (c & 0x3f)).to_u8
        {4, 1}
      end
    else
      raise InvalidByteSequenceError.new("Invalid char value #{dump}")
    end
  end

  def blobcodes_to_s_stripped
    c = ord
    if c < 0x80
      # 0xxxxxxx
      String.new(1) do |pointer|
        pointer[0] = c.to_u8
        {1, 1}
      end
    elsif c <= 0x7ff
      # 110xxxxx  10xxxxxx
      String.new(2) do |pointer|
        pointer[0] = (0xc0 | c >> 6).to_u8
        pointer[1] = (0x80 | c & 0x3f).to_u8
        {2, 1}
      end
    elsif c <= 0xffff
      # 1110xxxx  10xxxxxx  10xxxxxx
      String.new(3) do |pointer|
        pointer[0] = (0xe0 | (c >> 12)).to_u8
        pointer[1] = (0x80 | ((c >> 6) & 0x3f)).to_u8
        pointer[2] = (0x80 | (c & 0x3f)).to_u8
        {3, 1}
      end
    else
      # 11110xxx  10xxxxxx  10xxxxxx  10xxxxxx
      String.new(4) do |pointer|
        pointer[0] = (0xf0 | (c >> 18)).to_u8
        pointer[1] = (0x80 | ((c >> 12) & 0x3f)).to_u8
        pointer[2] = (0x80 | ((c >> 6) & 0x3f)).to_u8
        pointer[3] = (0x80 | (c & 0x3f)).to_u8
        {4, 1}
      end
    end
  end

  def r00ster91_to_s
    chars = uninitialized UInt8[4]
    i = 0
    each_byte do |byte|
      chars[i] = byte
      i += 1
    end
    String.new(i) do |buffer|
      buffer.copy_from(chars.to_unsafe, i)
      {i, 1}
    end
  end

  def r00ster91_to_s_stripped
    chars = uninitialized UInt8[4]
    i = 0
    each_byte_stripped do |byte|
      chars[i] = byte
      i += 1
    end
    String.new(i) do |buffer|
      buffer.copy_from(chars.to_unsafe, i)
      {i, 1}
    end
  end

  def each_byte_stripped
    c = ord
    if c < 0x80
      # 0xxxxxxx
      yield c.to_u8
    elsif c <= 0x7ff
      # 110xxxxx  10xxxxxx
      yield (0xc0 | c >> 6).to_u8
      yield (0x80 | c & 0x3f).to_u8
    elsif c <= 0xffff
      # 1110xxxx  10xxxxxx  10xxxxxx
      yield (0xe0 | (c >> 12)).to_u8
      yield (0x80 | ((c >> 6) & 0x3f)).to_u8
      yield (0x80 | (c & 0x3f)).to_u8
    else
      # 11110xxx  10xxxxxx  10xxxxxx  10xxxxxx
      yield (0xf0 | (c >> 18)).to_u8
      yield (0x80 | ((c >> 12) & 0x3f)).to_u8
      yield (0x80 | ((c >> 6) & 0x3f)).to_u8
      yield (0x80 | (c & 0x3f)).to_u8
    end
  end

  def to_s_stripped : String
    String.new(4) do |buffer|
      appender = buffer.appender
      each_byte_stripped { |byte| appender << byte }
      {appender.size, 1}
    end
  end
end

{'a', '😎'}.each do |char|
  puts "Char: #{char}"
  Benchmark.ips do |x|
    x.report("blo stripped") { char.blobcodes_to_s_stripped }
    x.report("blo normal") { char.blobcodes_to_s }
    x.report("roo stripped") { char.r00ster91_to_s_stripped }
    x.report("roo normal") { char.r00ster91_to_s }
    x.report("old stripped") { char.to_s_stripped }
    x.report("old normal") { char.to_s }
  end
  puts
end

Results

Char: a
blo stripped 106.16M (  9.42ns) (± 4.76%)  16.0B/op   1.01× slower
  blo normal 106.82M (  9.36ns) (± 3.32%)  16.0B/op        fastest
roo stripped  90.53M ( 11.05ns) (± 2.45%)  16.0B/op   1.18× slower
  roo normal  89.65M ( 11.15ns) (± 2.45%)  16.0B/op   1.19× slower
old stripped  42.67M ( 23.43ns) (± 1.95%)  48.0B/op   2.50× slower
  old normal  42.11M ( 23.75ns) (± 1.55%)  48.0B/op   2.54× slower

Char: 😎
blo stripped  75.98M ( 13.16ns) (± 5.39%)  32.0B/op        fastest
  blo normal  73.18M ( 13.67ns) (± 5.54%)  32.0B/op   1.04× slower
roo stripped  63.33M ( 15.79ns) (± 3.74%)  32.0B/op   1.20× slower
  roo normal  62.46M ( 16.01ns) (± 4.56%)  32.0B/op   1.22× slower
old stripped  72.26M ( 13.84ns) (± 3.78%)  32.0B/op   1.05× slower
  old normal  75.84M ( 13.19ns) (± 2.56%)  32.0B/op   1.00× slower

There does seem to be a little improvement.

Closing in favor of #11593


Reflection Warnings

In my project.clj files I typically include the option :warn-on-reflection true. For Midje 1.3.1 I get the following warnings:

Reflection warning, midje/util/thread_safe_var_nesting.clj:33 - call to bindRoot can't be resolved.
Reflection warning, midje/util/old_clojure_contrib/ns_utils.clj:60 - reference to field hasRoot can't be resolved.
Reflection warning, midje/util/old_clojure_contrib/ns_utils.clj:60 - reference to field hasRoot can't be resolved.
Reflection warning, midje/util/old_clojure_contrib/ns_utils.clj:60 - reference to field hasRoot can't be resolved.
Reflection warning, midje/util/old_clojure_contrib/ns_utils.clj:60 - reference to field hasRoot can't be resolved.
Reflection warning, midje/internal_ideas/file_position.clj:47 - reference to field getFileName can't be resolved.
Reflection warning, midje/internal_ideas/file_position.clj:47 - reference to field getLineNumber can't be resolved.
Reflection warning, midje/util/exceptions.clj:17 - reference to field toString can't be resolved.
Reflection warning, midje/util/exceptions.clj:17 - reference to field getStackTrace can't be resolved.
Reflection warning, midje/util/exceptions.clj:29 - reference to field toString can't be resolved.
Reflection warning, midje/util/exceptions.clj:33 - reference to field toString can't be resolved.
Reflection warning, midje/util/colorize.clj:9 - reference to field toUpperCase can't be resolved.
Reflection warning, midje/util/report.clj:11 - reference to field hasRoot can't be resolved.
Reflection warning, midje/util/report.clj:12 - call to bindRoot can't be resolved.
Reflection warning, midje/checkers.clj:11 - reference to field hasRoot can't be resolved.
Reflection warning, midje/checkers.clj:11 - reference to field hasRoot can't be resolved.
Reflection warning, midje/checkers/extended_equality.clj:26 - reference to field toString can't be resolved.
Reflection warning, midje/checkers/extended_equality.clj:26 - reference to field toString can't be resolved.
Reflection warning, midje/checkers/simple.clj:66 - reference to field getMessage can't be resolved.
Reflection warning, midje/checkers/collection.clj:468 - reference to field toString can't be resolved.
Reflection warning, midje/checkers/collection.clj:471 - reference to field toString can't be resolved.
Reflection warning, midje/ideas/metaconstants.clj:52 - call to containsKey can't be resolved.
Reflection warning, midje/ideas/metaconstants.clj:35 - reference to field name can't be resolved.
Reflection warning, midje/ideas/metaconstants.clj:88 - reference to field name can't be resolved.
Reflection warning, midje/internal_ideas/fakes.clj:195 - reference to field name can't be resolved.
Reflection warning, midje/internal_ideas/fakes.clj:195 - reference to field storage can't be resolved.
Reflection warning, midje/internal_ideas/fakes.clj:195 - reference to field storage can't be resolved.
Reflection warning, midje/ideas/prerequisites.clj:26 - call to java.lang.Integer ctor can't be resolved.

Would be nice if you could eliminate those, and perhaps include a reflection check in the project.clj file.

Hi ath,
So is the idea to avoid spewing these warnings when our users choose to set :warn-on-reflection ?  Is the output noise getting in the way of you finding your own reflection warnings amidst Midje's?

I'll take a look at this later.  Should be straightforward to add the required type-hints.


Leverage Builder pattern for envoy bootstrap config

Subtask of https://github.com/openservicemesh/osm/issues/4862, this is specifically for the bootstrap configs.
We should create a builder object that takes as inputs all data, and calls build. It should not make any network calls, or call out to other methods to get more data.
It can use nested builders if it makes sense to do so. See the parent issue and associated design doc for more info.

@steeling can we mark this issue as completed?

yup!


very small typo in DiagnosticReport specification

Section Number (https://profiles.ihe.net/RAD/IMR/StructureDefinition-imr-diagnosticreport.html)
Issue On the Differential Table for IMR Diagnostic report, I noticed a typo in the Description column for imagingStudy / presentedForm:pdf / contentType.     see proposed change below
Proposed Change change "applicatoin/pdf" to "application/pdf"
Priority:

Low: Typo or other minor classification that an editor can manage. Requires no group discussion.

Fixed and committed. It is now available in https://build.fhir.org/ig/IHE/RAD.IMR/StructureDefinition-imr-diagnosticreport.html.
Need to be published by Mary to make it available in profiles.ihe.net.


Double Trouble

The new update 2.4.7 has become a lot worst. I try using the nhent.ai site but can't connect to the site, I try using VPN but it said "no entries found"

Please try reading other open/closed issues before opening one. nhent.ai is down and its not something that we can fix. You need to wait or use nhentai.net with VPN. @kidman9520


[8.x] Adding methods to modify cron expression in between and unlessBetween

This PR resolves #36581
Currently, when you use between or unlessBetween in a schedule task, the resulting cron expression and next due date is not effected in the output of schedule:list. The scheduler itself still only runs during the specified times, it is just not reflected in the output of schedule:list
public function between($startTime, $endTime)
    {
        $startingHour = Carbon::parse($startTime, $this->timezone)->format('G');
        $endingHour = Carbon::parse($endTime, $this->timezone)->format('G');

        return $this->when($this->inTimeInterval($startTime, $endTime))
                    ->spliceIntoPosition(2, $startingHour . '-' . $endingHour);
    }

public function unlessBetween($startTime, $endTime)
    {
        $startingHour = Carbon::parse($startTime, $this->timezone)->format('G');
        $endingHour = Carbon::parse($endTime, $this->timezone)->format('G');

        $firstInterval = $startingHour == "0" ? $startingHour : "0-$startingHour";
        $secondInterval = $endingHour == "23" ? $endingHour : "$endingHour-23";

        return $this->skip($this->inTimeInterval($startTime, $endTime))
                    ->spliceIntoPosition(2, $firstInterval . ',' . $secondInterval);
    }

To test:

Go to app/Console/Kernel and add a new command that is scheduled to run between X and Y.
Then run php artisan schedule:list

You should see the cron expression at position 2 change to X-Y and if the time is between those time then Next Due Date should reflect that. If the time falls outside of the times, then Next Due Date should be the next day at the start time(X).
This is my first PR into Laravel and I am looking for any and all input on this one. Thanks!

This would likely break a lot of applications. The current implementation is in Laravel 8.x allows between to have minute level support or even granularity down to the second - whereas this PR assumes it is working with an hourly cron.

I think a better approach is to simply try to fix the schedule:list output.

That was initially what I tried to do, but from what I could tell the expression was already set by the time it gets to the command. I will see if I can dig deeper


[azidentity] adding a changelog to azidentity

closes #15235

While not directly related to this, as part of the release CI pipeline we should be sure to have a step that verifies the changelog was updated.  Too many times we release and forget to touch it.  :(


Remove unused set-search-alias script

We now use the update-index-alias.py script to update search index aliases.

@risicle I can't see it being used anyway in Jenkins


update flash size to 512K

LPC54608 & LPC54628 have 512K flash.   This fixes https://github.com/mbedmicro/pyOCD/issues/407

/morph test


ChartJS rendering support

I'd love to see a renderer for ChartJS (http://www.chartjs.org/ ). Has anyone worked on such a thing or is it in the works?

I am bringing this up from dead but has anyone implemented chartjs and is willing to share ?

@nicolaskruchten
if you can implement this whenever you feel like it that would be great :)
...if you feel like it :)


ImportError: No module named talib

Dear Catalyst Maintainers,
Before I tell you about my issue, let me describe my environment:
Environment

Operating System: windows 10
Python Version: python 2.7
Python Bitness: mean_reversion_simple exercise not working
How did you install Catalyst: conda
Python packages:

alembic (0.9.6)
backports.functools-lru-cache (1.4)
bcolz (0.12.1)
boto3 (1.5.20)
botocore (1.8.34)
Bottleneck (1.2.1)
ccxt (1.10.774)
certifi (2016.2.28)
chardet (3.0.4)
click (6.7)
contextlib2 (0.5.5)
cycler (0.10.0)
cyordereddict (1.0.0)
Cython (0.27.1)
decorator (4.1.2)
docutils (0.14)
empyrical (0.2.1)
enigma-catalyst (0.4.7)
futures (3.2.0)
idna (2.6)
intervaltree (2.1.0)
jmespath (0.9.3)
Logbook (1.1.0)
lru-dict (1.1.6)
Mako (1.0.7)
MarkupSafe (1.0)
matplotlib (2.1.0)
multipledispatch (0.4.9)
networkx (2.0)
numexpr (2.6.4)
numpy (1.13.1)
pandas (0.19.2)
pandas-datareader (0.5.0)
patsy (0.4.1)
pip (9.0.1)
pyparsing (2.2.0)
python-dateutil (2.6.1)
python-editor (1.0.3)
pytz (2017.2)
redo (1.6)
requests (2.18.4)
requests-file (1.4.2)
requests-ftp (0.3.1)
s3transfer (0.1.12)
scipy (0.19.1)
setuptools (36.4.0)
six (1.11.0)
sortedcontainers (1.5.7)
SQLAlchemy (1.1.14)
statsmodels (0.8.0)
subprocess32 (3.2.7)
tables (3.4.2)
toolz (0.8.2)
urllib3 (1.22)
wheel (0.29.0)
wincertstore (0.2)

Now that you know a little about me, let me tell you about the issue I am
having:
Tried to run the mean_reversion_simple exercise and I was given the "ImportError: No module named talib". As a solution I tried searching on the web for how to install ta-lib and adapted it to work for the environment based on the code that I found in the instructions. I ran the following: pip install enigma-catalyst ta-lib==0.4.15
This is the result:

(catalyst) C:\Users\nutas\Desktop>pip install enigma-catalyst ta-lib==0.4.15
Requirement already satisfied: enigma-catalyst in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages
Collecting ta-lib==0.4.15
Downloading TA-Lib-0.4.15.tar.gz (715kB)
100% |################################| 716kB 664kB/s
Requirement already satisfied: requests-file>=1.4.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: cyordereddict>=0.2.2 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: tables>=3.3.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: numpy>=1.13.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: requests>=2.9.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: decorator>=4.0.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: Cython>=0.25.2 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: lru-dict>=1.1.4 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: six>=1.10.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: bcolz<1,>=0.12.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: MarkupSafe>=0.23 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: pandas<0.20,>=0.19.2 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: empyrical<0.2.2,>=0.2.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: bottleneck>=1.0.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: boto3>=1.4.8 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: numexpr>=2.6.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: toolz>=0.8.2 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: scipy>=0.17.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: sqlalchemy>=1.0.8 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: contextlib2>=0.4.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: python-dateutil>=2.4.2 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: ccxt>=1.10.774 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: setuptools>36.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: pytz>=2016.4 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: patsy>=0.4.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: redo>=1.6 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: statsmodels>=0.6.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: networkx>=1.9.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: pip>=7.1.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: multipledispatch>=0.4.8 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: pandas-datareader>=0.2.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: Logbook>=0.12.5 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: sortedcontainers>=1.4.4 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: intervaltree>=2.1.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: click>=4.0.0 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: alembic>=0.7.7 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: Mako>=1.0.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from enigma-catalyst)
Requirement already satisfied: urllib3<1.23,>=1.21.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from requests>=2.9.1->enigma-catalyst)
Requirement already satisfied: idna<2.7,>=2.5 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from requests>=2.9.1->enigma-catalyst)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from requests>=2.9.1->enigma-catalyst)
Collecting certifi>=2017.4.17 (from requests>=2.9.1->enigma-catalyst)
Downloading certifi-2018.1.18-py2.py3-none-any.whl (151kB)
100% |################################| 153kB 1.2MB/s
Requirement already satisfied: botocore<1.9.0,>=1.8.34 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from boto3>=1.4.8->enigma-catalyst)
Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from boto3>=1.4.8->enigma-catalyst)
Requirement already satisfied: s3transfer<0.2.0,>=0.1.10 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from boto3>=1.4.8->enigma-catalyst)
Requirement already satisfied: requests-ftp in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from pandas-datareader>=0.2.1->enigma-catalyst)
Requirement already satisfied: python-editor>=0.3 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from alembic>=0.7.7->enigma-catalyst)
Requirement already satisfied: docutils>=0.10 in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from botocore<1.9.0,>=1.8.34->boto3>=1.4.8->enigma-catalyst)
Requirement already satisfied: futures<4.0.0,>=2.2.0; python_version == "2.6" or python_version == "2.7" in c:\users\nutas\miniconda2\envs\catalyst\lib\site-packages (from s3transfer<0.2.0,>=0.1.10->boto3>=1.4.8->enigma-catalyst)
Building wheels for collected packages: ta-lib
Running setup.py bdist_wheel for ta-lib ... error
Complete output from command C:\Users\nutas\Miniconda2\envs\catalyst\python.exe -u -c "import setuptools, tokenize;file='c:\users\nutas\appdata\local\temp\pip-build-b8ewjs\ta-lib\setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" bdist_wheel -d c:\users\nutas\appdata\local\temp\tmplpy4b8pip-wheel- --python-tag cp27:
c:\users\nutas\appdata\local\temp\pip-build-b8ewjs\ta-lib\setup.py:82: UserWarning: Cannot find ta-lib library, installation may fail.
warnings.warn('Cannot find ta-lib library, installation may fail.')
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-2.7
creating build\lib.win-amd64-2.7\talib
copying talib\abstract.py -> build\lib.win-amd64-2.7\talib
copying talib\deprecated.py -> build\lib.win-amd64-2.7\talib
copying talib\stream.py -> build\lib.win-amd64-2.7\talib
copying talib\test_abstract.py -> build\lib.win-amd64-2.7\talib
copying talib\test_data.py -> build\lib.win-amd64-2.7\talib
copying talib\test_func.py -> build\lib.win-amd64-2.7\talib
copying talib\test_stream.py -> build\lib.win-amd64-2.7\talib
copying talib_init_.py -> build\lib.win-amd64-2.7\talib
running build_ext
skipping 'talib_ta_lib.c' Cython extension (up-to-date)
building 'talib._ta_lib' extension
creating build\temp.win-amd64-2.7
creating build\temp.win-amd64-2.7\Release
creating build\temp.win-amd64-2.7\Release\talib
C:\Users\nutas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\Users\nutas\Miniconda2\envs\catalyst\lib\site-packages\numpy\core\include -Ic:\ta-lib\c\include -IC:\Users\nutas\Miniconda2\envs\catalyst\include -IC:\Users\nutas\Miniconda2\envs\catalyst\PC /Tctalib_ta_lib.c /Fobuild\temp.win-amd64-2.7\Release\talib_ta_lib.obj
_ta_lib.c
talib_ta_lib.c(524) : fatal error C1083: Cannot open include file: 'ta-libc.h': No such file or directory
error: command 'C:\Users\nutas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe' failed with exit status 2

Failed building wheel for ta-lib
Running setup.py clean for ta-lib
Failed to build ta-lib
Installing collected packages: ta-lib, certifi
Running setup.py install for ta-lib ... error
Complete output from command C:\Users\nutas\Miniconda2\envs\catalyst\python.exe -u -c "import setuptools, tokenize;file='c:\users\nutas\appdata\local\temp\pip-build-b8ewjs\ta-lib\setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record c:\users\nutas\appdata\local\temp\pip-fx_bgt-record\install-record.txt --single-version-externally-managed --compile:
c:\users\nutas\appdata\local\temp\pip-build-b8ewjs\ta-lib\setup.py:82: UserWarning: Cannot find ta-lib library, installation may fail.
warnings.warn('Cannot find ta-lib library, installation may fail.')
running install
running build
running build_py
creating build
creating build\lib.win-amd64-2.7
creating build\lib.win-amd64-2.7\talib
copying talib\abstract.py -> build\lib.win-amd64-2.7\talib
copying talib\deprecated.py -> build\lib.win-amd64-2.7\talib
copying talib\stream.py -> build\lib.win-amd64-2.7\talib
copying talib\test_abstract.py -> build\lib.win-amd64-2.7\talib
copying talib\test_data.py -> build\lib.win-amd64-2.7\talib
copying talib\test_func.py -> build\lib.win-amd64-2.7\talib
copying talib\test_stream.py -> build\lib.win-amd64-2.7\talib
copying talib_init_.py -> build\lib.win-amd64-2.7\talib
running build_ext
skipping 'talib_ta_lib.c' Cython extension (up-to-date)
building 'talib._ta_lib' extension
creating build\temp.win-amd64-2.7
creating build\temp.win-amd64-2.7\Release
creating build\temp.win-amd64-2.7\Release\talib
C:\Users\nutas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\Users\nutas\Miniconda2\envs\catalyst\lib\site-packages\numpy\core\include -Ic:\ta-lib\c\include -IC:\Users\nutas\Miniconda2\envs\catalyst\include -IC:\Users\nutas\Miniconda2\envs\catalyst\PC /Tctalib_ta_lib.c /Fobuild\temp.win-amd64-2.7\Release\talib_ta_lib.obj
_ta_lib.c
talib_ta_lib.c(524) : fatal error C1083: Cannot open include file: 'ta-libc.h': No such file or directory
error: command 'C:\Users\nutas\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe' failed with exit status 2
----------------------------------------

Command "C:\Users\nutas\Miniconda2\envs\catalyst\python.exe -u -c "import setuptools, tokenize;file='c:\users\nutas\appdata\local\temp\pip-build-b8ewjs\ta-lib\setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record c:\users\nutas\appdata\local\temp\pip-fx_bgt-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in c:\users\nutas\appdata\local\temp\pip-build-b8ewjs\ta-lib\

Reproduction Steps
explained above
What steps have you taken to resolve this already?
explained above
Anything else?
nothing
Sincerely,
Andrei Nutas

Worked for me on OSX
brew install ta-lib
pip install ta-lib
Not sure why, but solved all problems I was having.

solved by myself! installed from https://www.lfd.uci.edu/~gohlke/pythonlibs

I had trouble doing this initially, but after Catalina update in IOS I'm now unable to use ta-lib, tried brew install ta-lib, (get the error building wheel with gcc in pip install), Conda -c Quantopian version from above and still getting no module named talib when importing.  Please advise?

Though this issue is closed, I wanted to share this Medium article that worked like a charm for me, for any future travelers.
https://medium.com/@keng16302/how-to-install-ta-lib-in-python-on-window-9303eb003fbb


HTML clean up

Removed unnecessary new lines, added indentation to template code, and made tabs more consistent - to address #15

Apologies for the delay on this - CircleCI wasn't set up to build from forks so we had to get that fixed :+1:


[Pod Security] Seccomp baseline + restricted details

Adds details to the Pod Security Standards docs relating to seccomp profile configuration, per this issue in k/k.

/sig auth

@sejr are these changes already present in 1.21, or are they targeting the upcoming release (1.22)?

@PI-Victor these are for 1.22.

could you please change the branch to dev-1.22 instead of main, the main branch is for the current release documentation and is live instantly.

/milestone 1.22
/assign @ritpanjw

Closing in favor of https://github.com/kubernetes/website/pull/28903


Unconventional Naming for BucketObjectv2 in Pulumi AWS Java SDK

I noticed that the class BucketObjectv2 in the Pulumi AWS Java SDK does not follow standard Java naming conventions (PascalCase). Typically, Java classes use names like BucketObjectV2. Is this an intentional design decision? If not, would it be possible to rename it to align with Java conventions in future versions?
SDK Version: 6.61.0
Package: com.pulumi.aws.s3

The provider currently refers to this resource by the name BucketObjectv2 (instead of V2 like BucketV2 for example). This was most likely done by accident (introduced here).
Changing this now to align it with the other s3 V2 resources would require a breaking change. But we have an opportunity to align this in the next major version


ClearML Integration

Integrates ClearML Fixes #540

[x] Add ClearML components from cloud-ready helm chart
[x] Custom image for Elasticsearch (created by @Adam-D-Lewis) TODO: Move image to Quansight dockerhub
[x] Adds docs
[x] Adds three subdomain DNS records (TODO: Make that optional, currently adds irrespective of clearml deployed or not)
[x] Terraform Helm Provider upgrade to 2.1.2 from 1.0 Fixes #635
[x] Adds a nodeSelector to select labelled nodes for ClearML (due to high memory requirement for ElasticSearch), default required label: app: clearml
[x] Feature flag & ability to label nodes(so that people can label ClearML nodes): @viniciusdc

Co-Authors:

@Adam-D-Lewis
@viniciusdc

@viniciusdc and I pair programmed most of today to get the feature flag working. https://github.com/Quansight/qhub/pull/649


feat: add framework packages

Details
This adds React, Angular, Vue@2, Vue@3, and Svelte port of View3D

@malangfox Please check the updated page


Support heroku-20 stack

Add support for the heroku-20 stack.

Dependent on https://github.com/virtualstaticvoid/heroku-buildpack-r-build2/issues/7

Dependent on https://github.com/virtualstaticvoid/heroku-buildpack-r-build2/issues/7


RFC: Write References for Direct and Partial Initialization using &out T and &uninit T

Write Pointers of two kinds
&out T and &uninit T for use in direct initialization, and partial initialization.
Rendered

Earlier conversation can be found here

I think it's better to write a separate RFC for &mut T and use this one only for &uninit T.

Did you mean &out T? I would like to keep &out T and &uninit T together under the banner of write pointers because they overlap in many ways, and have only a few notable differences. Therefore, I think it is better to talk about them in one RFC.

Can you add some discussion of the advantages of &uninit and &out over &mut MaybeUninit<T> (which provides a safe set method)?

@cramertj With a pointer you could write to fields of fields in a write only way, for example:
#[derive(Clone, Copy)]
pub struct Outer {
    pub inner_field: Inner
}

#[derive(Clone, Copy)]
pub struct Inner {
    pub should_be_write_only: u32
}

let inner_field = Inner { should_be_write_only: 10 }
let outer = Outer { inner_field };

should_only_write_with_out_ref(&out outer);

let inner_field = Inner { should_be_write_only: 10 }
let outer = MaybeUninit::new(Outer { inner_field });

should_only_write_with_maybe_uninit(&mut outer);

fn should_only_write_with_out_ref(outer: &out Outer) {
    // println!("{}", outer.inner_field.should_only_write); // Compile time error

    outer.inner_field.should_only_write = 20; // Fine, because we only write
}

fn should_only_write_with_maybe_uninit(outer: &mut MaybeUninit<Outer>) {
    outer.set(
        // what to put in here?
    )
}

... // more impl blocks and stuff

Also, &out T and &uninit T are unsafe free, whereas MaybeUninit fundementally cannot be unsafe free. At least without using more space, (through an enum instead of a union, but that defeats the purpose).

&uninit T can be safely read after it is written to. MaybeUninit cannot handle this case at all without unsafe. MaybeUninit<T> seems to be very similar to &out T, two different ways to do the same thing.

@KrishnaSannasi Reading values from a MaybeUninit is safe after setting it, since the set method (or another method with a similar name) returns an &mut reference to the inner value. SImilarly, since MaybeUninit is repr(transparent), it can be used to safely refer to uninitialized elements inside of an array.

How about values on the heap? (Such as in a Vec<T>, if we want to implement something like emplace_back)

A Vec<T> emplace function using &uninit T would look something like:
impl<T> Vec<T> {
    fn emplace_back(put: impl FnOnce(&uninit T)) {
        // ... allocate magic ...
        put(&uninit end);
    }
}

and we could have some-placement-new like sugar for ease of use, but that's not necessary.

@KrishnaSannasi Yeah, that works out nicely. A similar thing using MaybeUninit could look like this:
pub struct Uninit<'a, T, Tag> {
    location: &'a mut MaybeUninit<T>,
    marker: PhantomData<Tag>,
}

pub struct UninitFilled<Tag>(PhantomData<Tag>);

impl<'a, T, Tag> Uninit<'a, T, Tag> {
    pub fn new(location: &'a mut MaybeUninit<T>) -> Self {
        ...
    }

    #[inline(always)]
    pub fn fill(self, value: T) -> UninitFilled<UniqToken> {
        self.location.set(value);
        UninitFilled(PhantomData)
    }
}

impl<T> Vec<T> {
    pub fn emplace_back(put: impl for<Tag> FnOnce(Uninit<'_, T, Tag>) -> UninitFilled<Tag>) {
        ...
    }
}

The Place and PlaceFilled definitions could exist in the standard library. I personally like this solution because it avoids introducing additional language constructs (new reference types for the compiler and users to understand), but it does have the unfortunate downside of requiring type-level HRTB (for<Tag> ...) in order to prevent users manufacturing their own Place with Place::new and making a PlaceFilled that they then hand back directly rather than actually calling set.

Cool, how about the code I posted earlier, where you have a public and private field, and you need to write a function to change the public field in a different crate.
I think it would be
unsafe fn bar(outer: &mut MaybeUninit<Outer>) {
    outer.get_mut().should_only_write = 20;
}

But using &out T is clearly better because we don't need unsafe, this is because we can't guarantee that get_mut, won't return an uninitialized value. And we can't use the safe set method because we can't access the private field.

Another idea for the bounds of &out T, would be an auto-implemented trait OverwriteSafe (name not important), that is implemented for all types, that T: !Drop and all fields implement T: OverwriteSafe. This would prevent nested Drop types from being inside structs or enum. Thereby allowing it to be safely overwritten.
The downside to this approach is that we add a new trait to the standard library, and adding a Drop implementation becomes a breaking change. This is probably undesirable. But, adding a Drop implementation later doesn't seem likely, so this might be fine.

[…] but it does have the unfortunate downside of requiring type-level HRTB (for ..) […]

Why not use a lifetime?

@bjorn3 It's possible that an invariant lifetime would be sufficient (so that the user couldn't create a 'static version or another longer-lived version that could be used instead).

In the examples with vector emplace_back() returning an &uninit T what happens if you do nothing and just mem::forget() it? Wouldn't the vector try to drop this uninitialized value in its destructor? The same applies to emplace_back() taking a closure.

@YaLTeR You would be forgetting the pointer, not the underlying value, in the closure case, you would not be initializing the value, so it would break this rule

Functions and closures that take a &uninit T argument must initialize it before returning

and you cannot return a &uninit T by that same rule's sub-rule

You cannot return an &uninit T

I put this rule in for the exact reason you pointed out. If we create an uninitialized value in a Vec, then try and drop the Vec, that would cause many problems, and I don't want to enforce a rule of &uninit T must be initialized if you get one from the return value of a function, although that is a viable alternative. That way, only &uninit T that you create may be allowed to be left uninitialized. This would also allow functions to leave &uninit T uninitialized, if they return that &uninit T (although that is pointless). But it seems more complicated than it's worth.
@cramertj

... invariant lifetime would be sufficient ...

How would you define an invariant lifetime, using references will always give a covariant lifetime, and there doesn't seem to be another way to constrain lifetimes, if I'm understanding the nomicon section of variance correctly.

In the closure case, you would not be initializing the value, so it would break this rule and get a compiler error

This assumes the compiler can identify that mem::forget doesn't initialize it, without using global analysis.
...and this is certainly something it can do; any function with the signature fn foo<T>(x: T) couldn't possibly initialize an &uninit by argument from parametricity. But this should lead to a more general restriction; e.g. any generic parameter T can never resolve to &uninit _ as the outermost type constructor, or something like that.

Would this help to solve the problem where only part of a struct has defaults? e.g.
struct Person {
    given_name: String, // no default
    family_name: String, // no default
    other_names: Vec<String>, // default = Vec::new()
    email: Option<String>, // default = None
    //...
}

There could be some function that returns an &uninit Person where the compiler checks that you initialize the remaining values.
Would this be possible?

@ExpHP Yes, that sounds right.
@derekdreery That would require global knowledge of the entire program in the worst case, and that is undesirable, so no, this will not solve that problem. This is fine for the compiler to do, but the human programming would find this confusing, and hard to reason about. This also makes changing the implementation of a function a breaking change, which is also undesirable.

@derekdreery You could create an auxiliary struct that holds all of the non-default fields or have the initializer function take a closure that will initialize the non-default fields.
struct PersonName {
    pub given_name: String,
    pub family_name: String,
    //...
}

impl Person {
    fn with_name(name: PersonName) -> Self {
        let person;

        person.given_name = name.given_name;
        person.family_name = family_name;
        person.other_names = Vec::new();
        person.email = None;

        person
    }
}

// or

impl Person {
    fn new_closure<F: FnOnce(&uninit String, &uninit String)>(f: F) -> Self {
        let person: Person;

        f(&uninit person.given_name, &uninit person.family_name);
        person.other_names = Vec::new();
        person.email = None;

        person
    }
}

&uninit maybe should be a special type that specifies what is initialized

@SoniEx2

&uninit maybe should be a special type that specifies what is initialized...

How would this be annotated? If it can't be annotated, it is either useless or you are leaking information, and that would mean changing implementations is a breaking change.

...maybe trivial...

It is certainly not trivial. It may be easy to write and implement, but not to read. Reading code is extremely important.

do we have type mutability (in contrast to data mutability) yet?

No. We do have conversion functions, but that seems like the wrong tool for the job.

Something like this?
fn foo(t: &uninit T(T.x) -> T(T.x, T.y)) -> &uninit Foo {
  &uninit t.y // same aliasing rules of &mut apply, you can't use the passed-in uninit without getting rid of the returned uninit
}

The type itself changes at the call/use site, so calling foo() would change the type of the passed-in uninit so it can be used.

This seems to be backward compatible with the current design, and it adds unnecessary weight to the implementation, so it can be postponed to another RFC to expand upon &uninit T if this RFC gets accepted.
But, I don't think we should do this, because it still makes &uninit T linked to the implementation of a function, only now its explicit that it is linked. We can't partially borrow out of a mutable reference in a function. i.e.
struct Foo { a: i32, b: i32 }

impl Foo {
   fn get_a_mut(&mut self) -> &mut i32 {
        &mut self.a
    }

   fn get_b_mut(&mut self) -> &mut i32 {
        &mut self.b
    }
}

fn main() {
    let mut foo = Foo { a: 10, b: 20 };

    let a = foo.get_a_mut();
    let b = foo.get_b_mut(); // error[E0499]: cannot borrow `foo` as mutable more than once at a time
}

And there is no way to resolve this without access to the fields directly, so I don't think we should extend &uninit T to handle that case. It adds unnecessary bulk to the language.

it's not linked to the implementation, it's linked to the definition.
it's no more linked than explicit lifetimes.
{let a=foo.a_mut();}
{let b=foo.b_mut();}

@SoniEx2 I don't think I explained my self clearly enough, granular mutable borrows seem like something that should be done across the board for mutable references, so I think that should be a separate RFC, so it can properly handle &mut T, &out T, and &uninit T.

I'm not allowing granular mutability. I'm indicating change of initialization state. you don't want to mix them up as it would be very confusing.

@SoniEx2

...change of initialization state...

could you please give an example of what you mean?

I'm not allowing that.
fn foo(x: &uninit Foo(1) -> Foo(1, 2)) -> &uninit Bar { // read: initializes Foo.2 from a Foo with Foo.1 initialized.
  x.1.print(); // we know Foo.1 is initialized
  &uninit x.2
}

let f: Foo;
f.1 = Baz;
{
let b = foo(&uninit f); // f is mutability borrowed, so you cannot touch it anymore
// f.1.print(); // error
*b = Bar; // without this: error: uninit not initialized
}
// we now know that f is initialized, because foo() said so, not because we analyzed the implementation of foo().
mem::drop(f); // ok, moving fully initialized value.

I'm not sure if you can read this (I'm autistic and bad at words) but this pseudocode describes the effects of different pieces of code in different places - just read the comments.

Ok I see what you mean now. If we return a &uninit, are we going to force the caller the initialize the value? I think we would have to.

fn foo(&uninit Foo() -> Foo()) {
} // valid, we're claiming we initialize nothing

fn bar(x: &uninit Foo() -> Foo(0)) -> &uninit Bar {
  &uninit x.0
}

fn baz(x: &uninit Foo() -> Foo(0)) -> &uninit Bar(0) {
  let v = bar(x); // v is &uninit Bar here
  v.0 = Baz;
  v // v becomes &uninit Bar(0) because we initialized Bar.0 above
}

I think this should be valid. ofc the caller of baz would still need to initialize the thing.
returning counts as initialization imo.
note that you can't put &uninit Foo() -> Foo() in return types and variable types, only input types. this is a little weird in current Rust, but less weird in other languages.
also we could add impl Drop for Foo(0) on top of this, but I'm overcomplicating it at that point.

(but do consider
impl Vec {
    fn bucket(&mut self) -> uninit Bucket<self>() {
        // unsafe code here
    }
}

impl Drop for Bucket<V: var Vec>() {
    // remove it from the Vec
}

where "var Vec" is runtime-dependent typing
)

@SoniEx2
mutable types (var Vec) should be its own RFC.

fn foo(&uninit Foo() -> Foo()) {
} // valid, we're claiming we initialize nothing

fn bar(x: &uninit Foo() -> Foo(0)) -> &uninit Bar {
  &uninit x.0
}

fn baz(x: &uninit Foo() -> Foo(0)) -> &uninit Bar(0) {
  let v = bar(x); // v is &uninit Bar here
  v.0 = Baz;
  v // v becomes &uninit Bar(0) because we initialized Bar.0 above
}

Because we are going to have to require the caller initialize the data anyways, we could rewrite that to use closures
// unnecessary, we aren't changing anything
// fn foo(&uninit Foo() -> Foo()) { }

fn bar<F: FnOnce(&uninit Bar)>(x: &uninit Foo, f: F) {
  f(&uninit x.0)
  // initialize the rest of Foo
}

// F takes the rest of the fields on Bar as &uninit
fn baz<F: FnOnce(...)>(x: &uninit Foo, f: F) {
  let v = bar(x, |field| {
      field.0 = Baz;
      f(|...| ...) // initializes the rest of the fields on Bar
  });
}

And we get the same effect.

yes, but then you have callback hell and panic-unsafety.

@SoniEx2
I am fine with callback hell, this RFC is just meant to get &uninit and &out into the language, not necessarily to make them ergonomic, and like how we are going to async-await syntax to make asynchronous programming ergonomic, we could get new syntax later to make &uninit ergonomic.
Also, there is no panic unsafety because, at all points in the code, we know what is initialized, and will only drop those values if a panic occurs.

@SoniEx2 What is &mut T()`&mut T{}andT{}`

they're partially initialized types.
&mut is just &mut, the secret is in T() (tuple struct with fields () initialized) and T{} (normal struct with fields {} initialized).

Actually
fn foo(x: &mut T() -> T(1)) {
  T.1 = Bar;
}

let t: T();
t.0 = 1;
foo(t); // valid

It's uh... covariant/contravariant(? idk) not invariant.
you'd need specialization if you wanted it to work properly (so Drop<T()> doesn't get called for T(..), or rather so Drop<T(..)> doesn't do what Drop<T()> does), but whatever.

in fact my design allows DEINITIALIZATION:
fn foo(x: &mut T(1) -> T()) {
  mem::drop(x.1);
}

@SoniEx2

you'd need specialization if you wanted it to work properly...
I think you missed my point, even with specialization, you would need to write a
Drop impl for every combination of members.

For example,
struct Foo { a: String, b: Vec<i32>, c: String }
impl Drop for Foo {} { ... }
impl Drop for Foo { a } { ... }
impl Drop for Foo { b } { ... }
impl Drop for Foo { a, b } { ... }
impl Drop for Foo { a, c } { ... }
impl Drop for Foo { b, c } { ... }
impl Drop for Foo {   }

For only 3 fields, that's already 6 Drop impl, and as you scale up to n fields, you will need n factorial Drop impl, which is unsustainable.

keep in mind Drop doesn't move, and doesn't affect drop glue.
you can have just the least specific and most specific Drop impls.
if we use - for uninitialized, + for initialized, and ~ for maybe/dontcare, for a Foo(i32, i32), we have:
Foo() = Foo(~0, ~1)
Foo(0) = Foo(+0, ~1)
fn foo(x: Foo() -> Foo(1)) = fn foo(x: Foo(~0, -1) -> Foo(~0, +1))
fn foo(x: Foo(1) -> Foo()) = fn foo(x: Foo(~0, +1) -> Foo(~0, -1))

However, this would be way too verbose, so I don't suggest actually using this. But this is what the compiler would see.
So Drop for Foo() doesn't care about the initialization state, it'll accept any. drop glue will ofc be implemented not by Drop but by the compiler.
if a function doesn't specify the type mutation (&mut Foo() vs &mut Foo() -> Foo(1)), it becomes &mut Foo() -> Foo() i.e. it doesn't change anything.

@SoniEx2 This seems like it's large enough to be its own RFC, and more widely applicable than uninitialized values & types.

okay, but it would later be difficult to remove &uninit in favor of PITs, so a decision needs to be made on which one we should pursue.

@SoniEx2 We don't have to make that decision now. First, open the RFC and we'll see how it goes, and we can later re-open the question about which one we should move forward with after PIT get more feedback.

cc https://github.com/rust-lang/rfcs/pull/98

The box syntax could be defined in terms of &uninit like this,
trait Boxer<T: ?Sized> {
    fn box_with<F: FnOnce(&uninit T)>(init: F);
}

/// Magic function to allocate memory for T
/// for Box<T>
fn allocate_for_box<T>() -> &uninit T;

impl<T: ?Sized> Boxer<T> for Box<T> {
    fn box_with<F: FnOnce(&uninit T)>(init: F) -> Self {
        let memory: &uninit T = allocate_for_box::<T>();
        init(memory);
        unsafe { Box::from_raw(memory) }
    }
}

and it would be used like this
let b: Box<_> = box 10u32;

which will desugar to
let b: Box<u32> = <Box<u32> as Boxer>::box_with(|x: &uninit u32| *x = 10u32);

Would it be safe to remove the Copy bound on &out T?
Currently the Copy bound is there to prevent types with Drop glue from being used, because if they were used, their destructors would not be run. This could lead to leaks.
But I think it is safe, because Rust currently does not gaurentee that destructors will be run as can be seen with std::mem::forget. It may not be intended behaviour (to have destructors be ignored), but I think it is safe.

cc #98

@Centril Thanks for posting a link to previous discussions about uninitialized pointers, I didn't notice that while drafting this RFC.
In there @glaebhoerl goes over some interesting usecases for &out T in these comments.
There a quite a few differences between &out mentioned here, and &out mentioned in #98., most notably the split of &out into &out and &uninit.

let memory = &mut T() = ...;
init(memory);
...

(just saying)

@SoniEx2 yes, we can also do
impl T {
    fn init(&uninit self) {
        ...
    }
}

let x: T;
x.init();

I'm just saying box should use PITs and not uninit pointers/references.

What's clunky, the code is the same. The impl block before it is there to show how to define the method, you don't need to write it  more than once. The operational part is almost identical.

uninit references are a new kind of reference, and it doesn't solve the associated type system problems.
PITs provide uninit-like references by solving the type system problems.

But PIT, is a completely different way of doing things, and has very little if any proof that it is worth it. Where as uninit and out pointers have been seen in other languages, and so have some precedent.

PITs are strictly more powerful than uninit pointers. PITs actually make Vec::place_back trivial, while uninit and out pointers are much harder to work with.

More powerful does not mean better in all cases. The power that PIT grants also makes them harder to reason about, and harder to read. Both of these are very important. On the other hand, due to the restrictions around &out and &uninit, they are relatively easy to reason about and read. I find this to be a better tradeoff than what PIT proposes.

Would changing the name of &out to &write be better? It would more clearly explain what is going on and it doesn't advertise using &out for output parameters, which I think is good.

I definitely feel like there are real use cases here, but I am very wary of growing the number of reference types, especially in a sort of "narrow, targeted" fashion. I would rather that we address these patterns by adding some form of more fundamental capability: for example, being able to "transition" the permissions that you have on a reference (so that you can take an &mut and have it "degrade" to a shared borrow when you return etc). This might be used to allow you to "upgrade" from &uninit to &mut.
That said, I don't see such an extension as on the short path yet. I would rather see us pushing towards:

adopting NLL =)
adopting polonius =)
then maybe looking at self-referential structs, fns that only access a subset of fields or other problems

this may intersect here, it's worth keeping in mind

Is this RFC going to be postponed or closed?

so, it turns out PITs would benefit both of us, for different reasons.
you want uninit references, I want opaque references, and PITs provide both in one! (and both need language support anyway)
out references are a little weird and low-level-ish tho and I'm not sure we really need them - can they be done with a safe wrapper around a pointer instead? (similar to Cell etc but without compiler support)

@SoniEx2 I don't think you're proposal is worth the cost though. @nikomatsakis didn't outright say that it can't be done, only that he is wary of adding new reference types (which is also what you are doing), and that this proposal doesn't fit in with the near-term goals of Rust right now.

@rfcbot fcp postpone
Per my previous comment, I am moving to postpone this RFC. My reasoning remains unchanged:

I definitely feel like there are real use cases here, but I am very wary of growing the number of reference types, especially in a sort of "narrow, targeted" fashion.

(Per that same comment, we are still working through the NLL and Polonius transition and will be for some time.)


Get-DbaDatabaseFile - Unified output type

Type of Change

[x] Bug fix (non-breaking change, fixes #)
[ ] New feature (non-breaking change, adds functionality)
[x] Breaking change (effects multiple commands or functionality)
[x] Ran manual Pester test and has passed (`.\tests\manual.pester.ps1)
[ ] Adding code coverage to existing functionality
[ ] Pester test is included
[ ] Nunit test is included
[ ] Documentation
[ ] Build system

Changes

Enforced [DbaSize] as output type for .MaxSize property in all instances

Reason
Piping to Out-DbaDataTable would fail if the first file had no limit (and thus was represented with a an integer -1 as max size), since the column types are defined by the first object. When later max sizes too large for int32 came along, this would fail in blood & error.
Breaking Change

This will change the way -1 will show up on screen and in exports to csv (in which cases it will be marked as Unlimited). The latter may break some scripts that transfer data via file and then process the file.

Do not merge
This shouldn't be merged before @potatoqualitee had a chance to look at it and decide whether that amount of breakage is alright.

passes all tests, thank you!


Updates for WinAppSDK 1.2

Description
This adds to the work Mano did and ensures that all samples meet the following:

Pointing to WinAppSDK 1.2 (currently preview 2, but will be updated to 1.2 stable upon release)
Minimum versions:
NET 6
CsWinRT 2.0.0
CppWinRT 2.0.220929.3
Windows Implementation Library 1.0.220914.1
Windows SD Build Tools 10.0.22621.755

Note: The following samples have pre-existing issues and still need to be updated:

D3D9ExSample
DynamicRefreshRateSample
DeploymentManagerSample

Target Release
WinAppSDK 1.2 stable.
Checklist

[ ] Samples build and run using the Visual Studio versions listed in the Windows development docs.
[ ] Samples build and run on all supported platforms (x64, x86, ARM64) and configurations (Debug, Release).
[ ] Samples set the minimum supported OS version to Windows 10 version 1809.
[ ] Samples build clean with no warnings or errors.
[ ] [For new samples]: Samples have completed the sample guidelines checklist and follow standardization/naming guidelines.
[ ] If I am onboarding a new feature, then I must have correctly setup a new CI pipeline for my feature with the correct triggers and path filters laid out in the "Onboarding Samples CI Pipeline for new feature" section in samples-guidelines.md.
[ ] I have commented on my PR /azp run SamplesCI-<FeatureName> to have the CI build run on my branch for each of my FeatureName my PR is modifying. This must be done on the latest commit on the PR before merging to ensure the build is up to date and accurate. Warning: the PR will not block automatically if this is not run due to '/azp run' limitation on triggering more than 10 pipelines.

/azp run


Not really the right way of performing complex search in Django

The right way of implementing complex search feature in a Django application, is using what is called model managers. That allows you to perform complex search or queries and gives you the access to even override the objects attribute and set it to your own. And by doing soo, makes your views look a whole lot neater without having to perform much of those logic in your views. You could even override the default get_queryset() method using models.QuerySet

Wow, I've never heard of this.
Thanks, I'll start working on it.
Or is it something you can work on?

Yeah, am currently working on it


Ebourne GitHub automation 2

Hello! Welcome to Pyccel! Thank you very much for your contribution :heart:.
I am the GitHub bot. I will help guide you through the different stages necessary to validate a review in Pyccel. If you haven't yet seen our developer docs make sure you check them out here. Amongst other things they describe the review process that we have just started.
To begin with I will give you a short checklist to make sure your pull request is complete. If you want me to run the tests you can request this using the command @bot run tests. Once you have finished preparing your pull request and are ready to request reviews just let me know with the command @bot mark as ready. You can get a full list of commands that I understand using @bot commands.

@bot commands

@bot commands

@bot commands

@bot commands


Missing action for automation

First off, I'm very new to HA, and I'm not sure if this warrants an issue request.
I have a Midea 12k U shaped window AC (Model - MAW12AV1QWT-C) and just about everything works as expected in HA.
The one issue I'm having is when I set up an automation.  I'd like to be able to change the temperature on the Midea AC, however my only available actions are:
Fan speed value
HVAC mode
Preset mode
Display on/off/toggle
Purifier on/off/toggle
On my dashboard I have added a thermostat card for this AC, and I'm able to change the temperature there.
Am I missing something, or is there a missing "action" for this device/integration?
TIA

When adding your automation action you should select "Climate" instead of "Device" and then you should see a "Set target temperature" option.

Thank you so much!!!

Thank you so much

No problem!


Continue working on realms

Rework symbols to have the same value across realms
Support realms for native functions
Support test262
Use new.target realms for constructing intrinsics

Note: lots of built-ins ignore new.target so realms support cannot be added for them at the moment.

Thank you for the review, patch is ready.


[FIXED] Roblox' Signup Public Key Causes Arkose Labs Timeout?

While I don't think many people know about funcaptcha's internal workings, it's still worth the shot to ask
I have recently been experiencing issues trying to use roblox' signup public key
When putting every answer correctly, it will give a "{ response: 'timed_mode_timeout' }" error
This only happens when the answers are correct, not when one of them is incorrect
See screenshot below (This was solved at human speed, got the error multiple times)

If anyone knows how to remediate this issue, please tell me

Has this been fixed? I'm still getting timed_mode_timeout

Has this been fixed? I'm still getting timed_mode_timeout

This library is no longer maintained

My bad
On Tue, May 3, 2022, 2:56 AM noahcoolboy @.***> wrote:

Has this been fixed? I'm still getting timed_mode_timeout
This library is no longer maintained
—
Reply to this email directly, view it on GitHub
https://github.com/noahcoolboy/roblox-funcaptcha/issues/8#issuecomment-1115792020,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ARKXNACABNBDJL4QT2UWXJLVIDEZDANCNFSM5OVJGKSQ
.
You are receiving this because you commented.Message ID:
@.***>


Allow calling Lambda from an Application Load Balancer (ALB)

You can use lambda together with Application Load Balancer (ALB)
which uses a different set of keys than previously set. This change
makes more checks to ensure that when trying to use more keys
then they exist (or, at least one of the keys exist and we assume
it's a representative sample).
I also went ahead and added py37 support to tox since it's available in Lambda these days.
And with a PR a cute animal picture, this is a culogo or flying lemur! :D

I don't understand the Travis error, I don't understand why it would complain about Google Compute Engine?
ConftestImportFailure: (local('/home/travis/build/Netflix-Skunkworks/raven-python-lambda/raven_python_lambda/tests/conftest.py'), (<type 'exceptions.ImportError'>, ImportError('No module named google_compute_engine',), <traceback object at 0x7f8bee004488>))

Okay, seems to be something with boto having it in there. I can't replicate it locally :( Seem to be generally running the same versions and tox across py27, py36, and py37 works. Maybe one of you core maintainers know what this may be about?

Okay, so I couldn't leave it be and it seems to be because of some weird Travis configuration: https://github.com/travis-ci/travis-ci/issues/7940
By adding a step to remove /etc/boto.cfg before running all the tests they're running again.


Some version crap

It's not the first time I see this problem: after updating to a new version (and even relaunching atom), sometimes when starting ensime, it shows me this message:

The key point is at the bottom:

ensime is out of date: undefined installed; 0.35.0 latest

at the same time in the console:
 » apm-beta show ensime                                                                                [on] 00:56:03
Ensime
├── 0.35.0
├── https://github.com/ensime/ensime-atom
├── Ensime integration for atom
├── 3562 downloads
└── 11 stars

P.S. or does this apm show just shows the latest version available?

In the settings:

Whooops, "gen-ensime" is actual entirely removed so that error stack you will get any time you try that.
I might re-insert it now I have a view for selecting .ensime. I mean, that was why I removed it, doesn't make sense without first selecting one.
The other outdated version warning I don't understand at all.

Sorry, I'm super confused obviously. gen-ensime is a new command I added as a WIP to try to generate .ensime from build.sbt. It has never been implemented and was accidentally added to repo because I'm doint pretty sloppy "trunk development".

I don't know how you get the "undefined" of version no. It probably is read from the package.json. I get:
The error was thrown from the Ensime package. Ensime is out of date: 0.34.0 installed; 0.35.0 latest. Upgrading to the latest version may fix this issue.

if I throw any exception.
My guess is that there's something going on with beta program here? To me packages are all the same. apm and apm-beta and all, it's just the folder ~/.atom/packages anyways. Has this changed?

I would suggest a bug to the error reporter if it isn't so that you tampered with the package a lot yourself…

It probably is read from the package.json

In ensime's plugin package.json the version is set to 0.35.0.

My guess is that there's something going on with beta program here?

I guess so. Anyway, it doesn't bother me so much, I just run gen-ensime from sbt.

Cool! Yes, I removed the gen-ensime command that never worked anyways. I might try to fix one up later to do "select build folder" + "sbt gen-ensime" + "stop server" + "start server" + "start client" that can be called when say adding deps.

:+1:
btw, I was a bit confused, when I'm changing deps and generating .ensime, I guess, I have to relaunch the server, but should I remove the .ensime_cache folder?

Hopefully you shouldn't have to, but I guess you'll sometimes struck corner
cases.
On Wed, Feb 10, 2016 at 4:35 PM Alexey Alekhin<EMAIL_ADDRESS>wrote:

[image: :+1:]
btw, I was a bit confused, when I'm changing deps and generating .ensime,
I guess, I have to relaunch the server, but should I remove the
.ensime_cache folder?
—
Reply to this email directly or view it on GitHub
https://github.com/ensime/ensime-atom/issues/160#issuecomment-182430595.


Narcoleptics get a weird "hourglass" shape at their cursor when they wake themselves up

Description
see other areas
Reproduction
be narcoleptic
wake up
weird torso following your cursor, doesnt leave ever.
It seems to me that, because I was a moth, it was a moth torso. Haven't tested, but it might change for the other species.
Screenshots

Additional context
I am a moth wearing a french beret, which could play some part in it??? dunno.

forgot to circle it, but, my cursor is being followed by that weird white thing to the left of me

that's actually a torso!

a moth torso, by the looks of it.

yeah i thought it was a torso too, but didnt know for sure. still real fuckin weird. on another note, it didn't seem to happen 100% of the time, so maybe it depends on how you wake up. whether you press the number or if you click it. idk.

relogging WILL remove the torso, as always
someone please test this for me, i cant bcuz software

Same thing just happened to me. Persisted after the round. Restarting removed it.

(Cursor is on the Axe.)

I cant tell if this is still around but it hasn't been closed yet so I'm bumping it


CAA records

Hi,
Very cool tool !
Just need CAA record type if you can add it ?
Thanks,
Bertrand

Can you just install the master release from git instead of the latest release? There should be the fix included.

That's perfect, many thanks for help !


Teleporter error 500

Problem/Motivation

I normally run two pi-hole instances for failover, since switching to hass.io and using this add on, I have found that trying to run the teleporter to upload a backup from the other instance fails to load the page with error 500

Expected behavior

Running the telerporter import on my other instance results in the following:

Processing blacklist.txt
Processing whitelist.txt
Processing wildcardblocking.txt
OK

Actual behavior

HTTP Error 500

Steps to reproduce

Using version 1.0.1, Export config, import it - this fails even from the same instance

Proposed changes

N/A

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

I've been able to reproduce it.
Actual error in the error logs:
PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function mime_content_type() in /var/www/html/admin/scripts/pi-hole/php/teleporter.php:96

Seems like the PHP fileinfo extension is required, which is indeed not installed in this add-on.
Awaiting implementation.

The missing PHP extension has been added and is currently fixed in the edge channel.
Will be part of the next release.


Develop github action to publish docker images on docker hub

💪 Motivation
...so that we don't have to do it manually build and publish the images.
📖 Additional Details

consider the publication on AWS ECR for later
⚖ Acceptance Criteria
Given
When I perform
Then I expect

⚙ Engineering Details

Apparently this doesn't need to happen at all for registry-api-service as the repository has been "archived by the owner" and is now read-only 😝
But my time wasn't wasted—I can transfer the knowledge needed to the next images on my list:

registry-api-service
[ ] registry-loader
[ ] registry-harvest-service
[ ] registry-crawler-service
[ ] registry-harvest-cli


No hostapd-edimax.conf file

https://github.com/jpoirier/stratux-setup/blob/9a7eccc4fc3923b2330a01b56681e947b3f70ca8/rpi.sh#L68-L95
your pi0/2 check does not contain the hostapd-edimax.conf file after fetching the binary...
Are you relying on the Stratux make/make install to provide the file??

see https://github.com/jpoirier/stratux-setup/blob/9a7eccc4fc3923b2330a01b56681e947b3f70ca8/wifi-ap.sh#L71-L80

Ok. I was rebuilding my pi3 and since I use the edimax & onboard wifi your script didnt load all the edimax stuff.
I wrote my own script for getting my rpi3 working. https://github.com/peepsnet/stratux/blob/master/image/stratuxPi3EdimaxFix.sh
I use the edimax so I can have a wlan0(stratux) and wlan1(connect to home wifi). If you remmeber https://github.com/cyoung/stratux/pull/377


Unit test and fix detection of stranded namespaces

Reworked the namespace list logic to eliminate the ActionStep and move the post-processing to after all of the domain namespaces have been identified. Simplified the domain selection logic to move it into the enum, and varied the namespaces selected by the three relevant tests to ensure that they were using different rules.
Note that this starts a refactoring which will end the superfluous passing of several intermediate values from method to method; however, it cannot proceed until a dependency between the NamespaceListAfterStep and some variables inside Main has been fixed - and that will require some additional unit testing to ensure coverage. I hope to work that in the future, but it was not needed for this bug fix.
I am running the change on Jenkins at https://build.weblogick8s.org:8443/job/weblogic-kubernetes-operator-kind-new/2155/

The method Main.createDomainRecheckSteps appears to check namespaces rather than domains. Is that a mistake?


Image not found or type unknown when changing the images

So I have a certificate project. But I want to ask. When I changed the picture from res folder, such as <img src=\"res/arkaplan10.jpeg\", for certificate template, from other layout picture, it won't work.  Only res/arkaplan10.jpg work. Other picture cannot be used.

I have read several similar cases, and in other case , when I put in person_cert, in my current project
use Dompdf\Dompdf;
use Dompdf\Options;
require_once 'dompdf/autoload.inc.php';
$options = new Options();
$options->set('isRemoteEnabled', TRUE);
$dompdf = new Dompdf($options);

$context = stream_context_create([
	'ssl' => [
		'verify_peer' => FALSE,
		'verify_peer_name' => FALSE,
		'allow_self_signed'=> TRUE
	]
]);
$dompdf->setHttpContext($context);

this code won't work.
and even i change in Options.php private $isRemoteEnabled = true;, it still won't work.

Hi,
Are you sure it's in the right folder? Could you have misspelled the extension or the name of the file ?


Integrate the module router into app

Coverage increased (+0.4%) to 62.5% when pulling 4587a77f90b28a9a8a641e71d197c665a0259e80 on refactor-app into f845a9c1d38cb3b47e53bcdf59966a5b31ed70e0 on master.