TLS_RSA_WITH_RC4_128_MD5

For an old IOT device I needed the cipher TLS_RSA_WITH_RC4_128_MD5, so I added a TlsRc4Cipher. Are you interested in a PR?
I know that this Cipher is deprecated/forbidden in RFC 7465, but there may be more old devices which only support old ciphers.

https://github.com/bcgit/bc-csharp/issues/411#issue-1515518426

Can someone tell me what the he double hockey sticks is going on. I have literally no clue what is going on I thought for sure this was going to be my break though but I'm more confused than  ever.
Thank you
Dianna Duran

Yes so am I I have no clue
Dessirae Thompson
On Fri, Jan 20, 2023, 12:20 AM Dianna52 @.***> wrote:

Can someone tell me what the he double hockey sticks is going on. I have
literally no clue what is going on I thought for sure this was going to be
my break though but I'm more confused than ever.
Thank you
Dianna Duran
—
Reply to this email directly, view it on GitHub
https://github.com/bcgit/bc-csharp/issues/411#issuecomment-1397968928,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A46WUFHQJTHWYNQQAVAYGYDWTIVC7ANCNFSM6AAAAAATOCKT6I
.
You are receiving this because you commented.Message ID:
@.***>

We cannot add the cipher, and of course we recommend against using these ciphers at all.
However I have resurrected the registry entries for TLS_RSA_WITH_RC4_128_MD5 (and TLS_RSA_WITH_RC4_128_SHA) so that you can add a custom BcTlsCrypto subclass in order to dynamically use your own implementation. This change will be released in 2.1.0 shortly.
Your subclass of BcTlsCrypto should at minimum override CreateCipher and HasEncryptionAlgorithm. You may also prefer to override HasMacAlgorithm and CreateHmac to avoid surprises in case we completely remove MD5 support at some point.


Infographics updates

Closes #207

Note to reviewers: this code desperately needs refactored. I created #208 to take care of this, as it's more effort than I budgeted for the scope of this issue.


Usage without pollUntilComplete ?

Hi there,
I would like to use this SDK without the polling, instead, I want to receive the Results later.
So I skipped the "pollUntilComplete" Method and tried to re-open this Operation later.
I got the Operation ID with $operation->getName();
Later:
$client = SpeechClient -> getOperationsClient();
$operation => $client->getOperation($OPERATION-ID)
$result = $operation->getResult();

Here, the Code crashed, because the SDK cannot find LongRunningRecognizeMetadata.
I "fixed" that by loading this Class before, so the SDK will find it.
This works, but now, $result is just a String "result".
Can maybe someone point me into the right Direction of how to "re-open" a previous Operation and get the Result Objects?
Thanks!

Try using resumeOperation instead of getOperationsClient()->getOperation:
// Start the operation
$operation = $speech->longRunningRecognize($config, $audio);
$operationName = $operation->getName(); // Store for later
// ...

// LATER
$operation = $speech->resumeOperation($operationName);
$operation->pollUntilComplete();
$response = $operation->getResult();


go-algorand-sdk:  Update examples for v2.0.0

Updates go-algorand-sdk for the removal of the future package in v2.0.0.

Corresponding SDK change:  https://github.com/algorand/go-algorand-sdk/pull/454
All v2.0.0 breaking changes discussed in https://github.com/algorand/go-algorand-sdk/issues/343 / https://github.com/algorand/go-algorand-sdk/pull/449.

Additional notes:

Changes made mechanically via find . -type f -exec sed -i "" "s/:= future\./:= transaction\./g" {} \;.
PR to remain in draft status until v2.0.0 release.  I'll circle back post-release for approval + merge.


Syllabus sections

I thought it might make it easier for people to find certain information if we added some more section headers to the syllabus and also making it a tad more concise. I also collapsed the zoom instructions because it seems like most people know them now and we had discussed doing this at one point. @avahoffman what do you think of this?
Will need to merge in main after Ava's other PR #359 for date of R version.

Yeah, love it! Maybe can we make this stand out a bit more, maybe like a URL? Worried they might not realize it's clickable.

I made it blue like the link color - this is the local render with the triangle :

Does that work?

made it bold too:

Yeah looks great!


MINOR: ConsumerGroup#getOrMaybeCreateMember should not add the member to the group

While reviewing https://github.com/apache/kafka/pull/15785, I noticed that the member is added to the group directly in ConsumerGroup#getOrMaybeCreateMember. This does not hurt but confuses people because the state must not be mutated at this point. It should only be mutated when records are replayed. I think that it is better to remove it in order to make it clear.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

@dongnuo123 @chia7712 Thanks for your comments. I have addressed them.


Indents & undefined msg

Hi Seth (@seth350),
Two minor changes to improve your UI node, since it is some kind of reference node at the moment...
Undefined message
I get errors in my Chrome console log:

Reason is that the msg will be undefined when you load the page:

So then you try to get msg.payload with an undefined msg ...
You can solve it like this:
$scope.$watch('msg', function(msg) {
       if (!msg) {
             return;
       }

      var payload = msg.payload

tabs and spaces mixed
When looking at your code via Github, there is a lot of weird indentations:

Everywhere you have used spaces, it is ok.  But where you have used tabs, it is wrong.  I have replaced all  tabs by spaces.  If you use an editor like e.g. Notepad++, that will automatically insert a number of spaces when you add a tab...
Bart

Good catch Bart. I was wondering why that was occurring but did not give it much thought.
I appreciate the PR!


docs(examples): Add Emotion example

Hi, can you test if this implementation works with Cloudflare Worker? I try it, but it's appearing that emotion is calling some packages that don't work in a worker

Hey @kentcdodds!
If I catch this well, I added two new routes /jokes and /jojes/:id and a CatchBoundary to the root`. Is that what you expect?
The styles still working through the routes.

My big concern is that if there's a CatchBoundary or an ErrorBoundary and those are rendered due to an error, all the styles will be removed because the App (where the styles are rendered) will be removed from the page. If you can verify that's not a problem then we can go forward with this. Otherwise we may need to come up with a different approach.

If I catch it well, I triggered a catch/error boundary into the jokes/:jokeId and jokes/not-found, like the following screenshots:

And the styles persist into the nested routes.
Is that what you expect @kentcdodds ?

What if you have a CatchBoundary and ErrorBoundary in the root.tsx file and those are rendered? My guess is the styles will all be removed in that case because the App (which renders the styles) will be replaced by the CatchBoundary and the ErrorBoundary.

Here are more details on the issue with CSS-in-JS: https://github.com/remix-run/remix/pull/1512#issuecomment-1042413526

Hi @kentcdodds, I updated the project at the commit https://github.com/remix-run/remix/pull/1485/commits/7894b95529414673990e414768a2154b2b8dec0c.
The behavior looks like this:
Root Error

CSS Rendered

Is that the expected?

If it's server rendered then it works fine. But it breaks for client transitions. Can you try doing the same thing I'm doing in that video?

I was able to reproduce the problem and it actually breaks the client, like with other CSS-in-JS libraries.
I was also able to fix it starting from @primos63 repo (where he fixed it for ChakraUI): https://github.com/primos63/chakra-remix-example
@helderburato, let me know if you want me to make a PR to your branch.

What do you think about @kentcdodds ?


Allow for filtering by frontmatter properties

Support for [property-name:property-value] to query frontmatter. A quoted name or quoted value indicates an exact match on that name or value, and unquoted name/value does substring matching (this is how Obsidian handles it). Frontmatter property values are coerced to strings, so it's possible to match boolean and numerical properties. Date properties are already represented as strings in the file cache.
Fixes #257.

Hello! This seems to be an issue with boon-js but when I use a property value with a space, I get an "Invalid Token" exception from the parse method and this.queryRpn ends up as null.
https://github.com/zakj/obsidian-map-view/blob/acc8ced7612f582d637a906662b831b3c1beec40/src/query.ts#L29-L31


Hydrated Docking - Dry.py error

All,
I am following the directions in Autodock Vina Read the Docs on hydrated docking.  I am able to reproduce all steps except the post-processing using dry.py. I can split and open my raw vina results (receptor_5HT1A_7e2y_SRO_ad4_out.pdbqt) in Pymol and see that the ligand has docked with explicit waters. I tried to view the options in dry.py, but I get the same error as below. This leads me to lean toward an error in the dry.py script (at least my version). Has anyone else seen this issue?
When I run the dry.py command, this is the error I get:
File "dry.py", line 237
if not QUIET: print(" [ %d docking pose(s) found ] " % len(models), end=' ')
^
SyntaxError: invalid syntax
Here is a copy of the cmd line history:
C:\Users\xxxx\Desktop\VinaRuns\5HT1A_ad4maps\Hydrated\5HT1A_7e2y_SRO>vina --ligand SRO.pdbqt --maps receptor_5HT1A_7e2y --scoring ad4 --exhaustiveness 1200 --num_modes 10 --out receptor_5HT1A_7e2y_SRO_ad4_out.pdbqt
AutoDock Vina v1.2.3
#################################################################
If you used AutoDock Vina in your work, please cite:

J. Eberhardt, D. Santos-Martins, A. F. Tillack, and S. Forli
AutoDock Vina 1.2.0: New Docking Methods, Expanded Force
Field, and Python Bindings, J. Chem. Inf. Model. (2021)
DOI 10.1021/acs.jcim.1c00203

O. Trott, A. J. Olson,
AutoDock Vina: improving the speed and accuracy of docking
with a new scoring function, efficient optimization and
multithreading, J. Comp. Chem. (2010)
DOI 10.1002/jcc.21334

Please see https://github.com/ccsb-scripps/AutoDock-Vina for
more information.
#################################################################
Scoring function : ad4
Ligand: SRO.pdbqt
Exhaustiveness: 1200
CPU: 0
Verbosity: 1
Reading AD4.2 maps ... done.
Performing docking (random seed: -2060840117) ...
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|

mode |   affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1       -7.567          0          0
2       -7.523      1.158      2.251
3       -7.465      1.242      2.114
4        -7.44      2.525      4.587
5        -7.44      2.926       6.37
6       -7.436      2.892      6.318
7       -7.368      2.523       4.92
8       -7.305      2.355      5.092
9       -7.271      2.351      5.732
10        -7.27      2.284      4.865
C:\Users\xxxx\Desktop\VinaRuns\5HT1A_ad4maps\Hydrated\5HT1A_7e2y_SRO>python dry.py -c -r receptor_5HT1A_7e2y.pdbqt -m receptor_5HT1A_7e2y.W.map -i receptor_5HT1A_7e2y_SRO_ad4_out.pdbqt
File "dry.py", line 237
if not QUIET: print(" [ %d docking pose(s) found ] " % len(models), end=' ')
^
SyntaxError: invalid syntax

I was able to get dry.py to run but had to switch to Anaconda to do it rather than CMD line in windows.  I have been able to run all the basic, flexible, and hydrated commands in CMD except for dry.py and mk_prepare_ligand.py.

Hey jfair32 can you maybe mention your exact environment - anaconda/python version and numpy version

I also tried it with anaconda but no luck yet

Tienes que separar con vina_split y, uno por uno usar el dry.py
Exitos

This is due to the Python version. Python 2.7 could not recognize the  end=' ' as correct grammer.
Just use Python3


New Scraper: Clayton County Public Schools

Create a new scraper for Clayton County Public Schools
Website: https://www.clayton.k12.ga.us/cms/one.aspx?pageId=67888
Jurisdiction: Clayton County
Classification: Education

looks pretty scrapable


Docker pull of garbage collection image does not always work

This is related to both the method of pulling the image, and alpine not defining architectures for specific versions.

Closed by #14


List of miners you have data stored with

Should include location for mapping

This is currently available, but indirectly, by ffs.Info then passing each cid to ffs.Show to get a list of deals for that cid, then building up the list of miners across all cids.

This can now be computed by calling ffs.ShowAll() building up the desired data by iterating over the results


scan - be tolerant with "too many open files"

I'm reviewing scan/scan.go.
I have a feature request:
When calling net.DialTimeout, if you get an error that says "too many open files", pause that go routine and then retry.
If you do that, you'll be able to reduce the 8ms sleep.  Additionally, if you do that, your tool will be robust when doing large scans in environments with restrictive ulimits.
Unfortunately, I am unable to contribute a similar PR for your scanner.  My current employer's rules of engagement prohibit it; and I'm not ready to change employers. (sadface!)

Thank you for reviewing, appreciated.
I'll be enhanced it soon.


Issue opening OpenAI for Grasshopper.gha file

Hello,
I am getting these errors while opening the Grasshopper. I have copied the components to the GH libraries. but unable to get the OpenAI component in my GH.

The following errors occur when opening the Grasshopper
Command: Grasshopper
An error occurs during GHA assembly loading:
Path: C:\Users\manish.yakami\AppData\Roaming\Grasshopper\Libraries\OpenAI\OpenAI for Grasshopper.gha
Exception System.IO.FileNotFoundException:
Message: Could not load file or assembly 'System.Runtime, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Current Rhino version
Version 8 SR6
(8.6.24101.5001, 2024-04-10)
Commercial
SN: 6-1802-0101-1-36672-13464-10
Grasshopper version: wednesday April 10 2024 version
Thanks

Use the SetDotNetRuntime command, choose .NetCore runtime and restart RH+GH.


Failure in getgrnam_r(): Numerical result out of range

To Reproduce
Steps to reproduce the behavior:

Ran command sudo hawck-inputd --kbd-device /dev/input/event11 --no-fork
Followed by  hawck-macrod  without this command logs would spam message "SystemError: Connection refused"
Got error :

zsh ✗  sudo hawck-inputd --kbd-device /dev/input/event11 --no-fork
Starting Hawck InputD v0.7.1 on:
  - </dev/input/event11>
Connection established!
terminate called after throwing an instance of 'SystemError'
  what():  Failure in getgrnam_r(): Numerical result out of range
[1]    128950 IOT instruction  sudo hawck-inputd --kbd-device /dev/input/event11 --no-fork

Expected behavior
A clear and concise description of what you expected to happen.
Expected program to run as normal
Desktop (please complete the following information):

Distro: Pop_os (Ubuntu)
Version: git (directly from repo)
Method of installation (put X inside [ ] if any of the following apply):

[ x] install.sh
[ ] AUR package

Keymap: [e.g. no, us, de] us
Keyboard (put X inside [ ] if any of the following apply):

[ x] USB
[ ] Bluetooth
[ ] Laptop built-in
[ ] I use a USB steering wheel exclusively for all my data input.

Additional context
Keyboard is a Kenesis Advantage360 Pro plugged in via USB

Could be that the installation didn't properly configure the required groups, do grep hawck /etc/group.

Here is the output from the command:
zsh ✗  grep hawck /etc/group
input:x:107:hawck-input,mosthated
hawck-input:x:30033:
hawck-input-share:x:30034:hawck-input,mosthated
uinput:x:30035:hawck-input

Hmm, hawck-inputd isn't intended to be run as root though, try:
sudo runuser --user=hawck-input -- hawck-inputd --kbd-device /dev/input/by-id/... --no-fork

You might have to install the runuser utility.

It looks like I did have runuser already, but it looks like it didn't quite like that either.
zsh ✗  sudo runuser --user=hawck-input -- hawck-inputd --kbd-device /dev/input/event11 --no-fork
Starting Hawck InputD v0.7.1 on:
  - </dev/input/event11>
terminate called after throwing an instance of 'SystemError'
  what():  Unable to open file: Permission denied
Aborted (core dumped)

...  have the same error message for different function calls. The later is calling 'getgrgid_r'.

Good catch! Should correct that, but I still don't know why that function is failing though. Can you run hawck-inputd with the strace debugger? (available from Ubuntu repos)
you@box $ sudo runuser --user=hawc-inputd -- bash
hawck-inputd@box $ strace hawck-inputd --no-fork

Also post the output of
for rule in /etc/udev/rules.d/*; do echo -e "$rule:\n\t$(cat "$rule")"; done

Sure thing

straace
sh ✗  sudo runuser --user=hawck-input -- bash
hawck-input@pop-os:/home/mosthated$ strace hawck-inputd --no-fork
execve("/usr/bin/hawck-inputd", ["hawck-inputd", "--no-fork"], 0x7ffebdd34588 /* 38 vars */) = 0
brk(NULL)                               = 0x56389c6c1000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc6fd01de0) = -1 EINVAL (Invalid argument)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8bba5dd000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=144431, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 144431, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8bba5b9000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/liblua5.3.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=244664, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 246504, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f8bba57c000
mmap(0x7f8bba582000, 163840, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7f8bba582000
mmap(0x7f8bba5aa000, 49152, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2e000) = 0x7f8bba5aa000
mmap(0x7f8bba5b6000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x39000) = 0x7f8bba5b6000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2252096, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 2267328, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f8bba200000
mmap(0x7f8bba29a000, 1114112, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9a000) = 0x7f8bba29a000
mmap(0x7f8bba3aa000, 454656, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1aa000) = 0x7f8bba3aa000
mmap(0x7f8bba419000, 57344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x218000) = 0x7f8bba419000
mmap(0x7f8bba427000, 10432, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f8bba427000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=125488, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 127720, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f8bba55c000
mmap(0x7f8bba55f000, 94208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f8bba55f000
mmap(0x7f8bba576000, 16384, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7f8bba576000
mmap(0x7f8bba57a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1d000) = 0x7f8bba57a000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0<EMAIL_ADDRESS>784, 64) = 784
pread64(3, "\4\0\0\0 \0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 48, 848) = 48
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0i8\235HZ\227\223\333\350s\360\352,\223\340."..., 68, 896) = 68
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2216304, ...}, AT_EMPTY_PATH) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0<EMAIL_ADDRESS>784, 64) = 784
mmap(NULL, 2260560, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f8bb9e00000
mmap(0x7f8bb9e28000, 1658880, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x7f8bb9e28000
mmap(0x7f8bb9fbd000, 360448, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bd000) = 0x7f8bb9fbd000
mmap(0x7f8bba015000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x214000) = 0x7f8bba015000
mmap(0x7f8bba01b000, 52816, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f8bba01b000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=940560, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 942344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f8bba475000
mmap(0x7f8bba483000, 507904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe000) = 0x7f8bba483000
mmap(0x7f8bba4ff000, 372736, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8a000) = 0x7f8bba4ff000
mmap(0x7f8bba55a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe4000) = 0x7f8bba55a000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8bba473000
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8bba470000
arch_prctl(ARCH_SET_FS, 0x7f8bba470840) = 0
set_tid_address(0x7f8bba470b10)         = 402296
set_robust_list(0x7f8bba470b20, 24)     = 0
rseq(0x7f8bba4711e0, 0x20, 0, 0x53053053) = 0
mprotect(0x7f8bba015000, 16384, PROT_READ) = 0
mprotect(0x7f8bba55a000, 4096, PROT_READ) = 0
mprotect(0x7f8bba57a000, 4096, PROT_READ) = 0
mprotect(0x7f8bba419000, 45056, PROT_READ) = 0
mprotect(0x7f8bba5b6000, 8192, PROT_READ) = 0
mprotect(0x56389b540000, 8192, PROT_READ) = 0
mprotect(0x7f8bba617000, 8192, PROT_READ) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
munmap(0x7f8bba5b9000, 144431)          = 0
getrandom("\x5d\xb0\x74\x3e\x37\x02\x81\x70", 8, GRND_NONBLOCK) = 8
brk(NULL)                               = 0x56389c6c1000
brk(0x56389c6e2000)                     = 0x56389c6e2000
futex(0x7f8bba42777c, FUTEX_WAKE_PRIVATE,<PHONE_NUMBER>) = 0
rt_sigaction(SIGPIPE, {sa_handler=0x56389b4fcf50, sa_mask=[PIPE], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f8bb9e42520}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
openat(AT_FDCWD, "/dev/input/by-id", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=180, ...}, AT_EMPTY_PATH) = 0
fcntl(3, F_GETFL)                       = 0x18000 (flags O_RDONLY|O_LARGEFILE|O_DIRECTORY)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
getdents64(3, 0x56389c6d4d20 /* 9 entries */, 32768) = 536
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-id", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-id/usb-Metadot_-_Das_Keyboard_DK4Q-event-kbd", "../event9", 1023) = 9
readlink("/dev/input/event9", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
getdents64(3, 0x56389c6d4d20 /* 0 entries */, 32768) = 0
close(3)                                = 0
openat(AT_FDCWD, "/dev/input/by-path", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=180, ...}, AT_EMPTY_PATH) = 0
fcntl(3, F_GETFL)                       = 0x18000 (flags O_RDONLY|O_LARGEFILE|O_DIRECTORY)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
getdents64(3, 0x56389c6d4d20 /* 9 entries */, 32768) = 480
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:54:00.0-usb-0:3:1.2-event-kbd", "../event4", 1023) = 9
readlink("/dev/input/event4", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:5a:00.0-usb-0:1:1.0-event-joystick", "../event3", 1023) = 9
readlink("/dev/input/event3", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:59:00.4-usb-0:1.2:1.1-event", "../event11", 1023) = 10
readlink("/dev/input/event11", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:56:00.0-usb-0:5:1.2-event-mouse", "../event5", 1023) = 9
readlink("/dev/input/event5", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:59:00.4-usb-0:1.2:1.0-event-kbd", "../event9", 1023) = 9
readlink("/dev/input/event9", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:5a:00.0-usb-0:1:1.0-joystick", "../js0", 1023) = 6
readlink("/dev/input/js0", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev", 0x7ffc6fcfed60, 1023)  = -1 EINVAL (Invalid argument)
readlink("/dev/input", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
readlink("/dev/input/by-path/pci-0000:56:00.0-usb-0:5:1.2-mouse", "../mouse0", 1023) = 9
readlink("/dev/input/mouse0", 0x7ffc6fcfed60, 1023) = -1 EINVAL (Invalid argument)
getdents64(3, 0x56389c6d4d20 /* 0 entries */, 32768) = 0
close(3)                                = 0
newfstatat(1, "", {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x4), ...}, AT_EMPTY_PATH) = 0
write(1, "Starting Hawck InputD v0.7.1 on:"..., 33Starting Hawck InputD v0.7.1 on:
) = 33
write(1, "  - </dev/input/event9>\n", 24  - </dev/input/event9>
) = 24
openat(AT_FDCWD, "/var/lib/hawck-input/pid", O_RDWR|O_CREAT, 0644) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=3592, ...}, AT_EMPTY_PATH) = 0
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=3592, ...}, AT_EMPTY_PATH) = 0
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\10\0\0\0\0"..., 4096) = 3592
lseek(3, -2280, SEEK_CUR)               = 1312
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\10\0\0\0\0"..., 4096) = 2280
close(3)                                = 0
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
sendto(3, "<11>Jan  6 09:08:05 hawck-inputd"..., 85, MSG_NOSIGNAL, NULL, 0) = 85
futex(0x7f8bba57b210, FUTEX_WAKE_PRIVATE,<PHONE_NUMBER>) = 0
write(2, "terminate called after throwing "..., 48terminate called after throwing an instance of ') = 48
write(2, "SystemError", 11SystemError)             = 11
write(2, "'\n", 2'
)                      = 2
write(2, "  what():  ", 11  what():  )             = 11
write(2, "Unable to open file: Permission "..., 38Unable to open file: Permission denied) = 38
write(2, "\n", 1
)                       = 1
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
gettid()                                = 402296
getpid()                                = 402296
tgkill(402296, 402296, SIGABRT)         = 0
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=402296, si_uid=30033} ---
+++ killed by SIGABRT (core dumped) +++
Aborted (core dumped)

The rules ended up being 1500 lines due to arduino config, it looks like, so I made a gist of it.

rules.d/
https://gist.github.com/MostHated/583913828b62875a7a7820ea0ae86b38

I just noticed something else. When I last tested a few minutes ago, I saw that hawck-macrod was giving that error as well that hawck-inputd was. Not sure if that means anything?
Here was an strace run of macrod.
https://gist.github.com/MostHated/c3da99d79af3a6cc14aa469b2eae298b

If there is anything I can/should try on my end, do let me know. I am definitely looking forward to getting this up and running. I have been looking for an app with this capability for quite some time, especially as of recent, since I had to move to wayland. Other tools I had cobbled together no longer work how I need.

@MostHated Hey, just got a chance to look at everything, can you try increasing the size of the buffer here, then recompiling? https://github.com/snyball/hawck/blob/60aafac2d8e5a6ec314dd41383daa5f4658caca5/src/Permissions.hpp#L38
If you don't know how to do that, it would be:
git clone --recurse-submodules -j8 git@github.com:snyball/hawck.git
cd hawck
mkdir build
cd build
meson ..
ninja -j$(nproc)
# ... compiling ...
vim src/Permissions.hpp +38
# ... vigorously editing 200 to be 2048 ...
ninja -j$(nproc)
# ... recompiling with your changes ...
sudo ninja install
# verify that the new executable is installed (these numbers should be the same)
sha1sum build/src/hawck-inputd (command -v hawck-inputd)
# attempt to run commands again

I was able to get it working witht that change, at least doing the runas and specifying the keyboard directly. I attempted to just start the hawck-inputd service and the macro daemon, but I didn't seem to get any output. With the original issue fixed, it seems like it might be down to configuration/setup at this point due to trying so many different things to get it to work, I might have permissions on things incorrectly, or the wrong user in places, such as the middle top window in the screenshot. I am not sure at this point, it's been a while.
Definitely nice to see it actually work, though. :+1:

@MostHated You're running into an issue cause by the recent fix to https://github.com/snyball/hawck/issues/74
Run the following commands, then rerun hawck-add
sudo mkdir /var/lib/hawck-input/tmp
sudo chown hawck-input:hawck-input-share /var/lib/hawck-input/tmp
sudo chmod 770 /var/lib/hawck-input/tmp

Ok, good to hear. I had done those steps as it seemed like what needed to be done, but I didn't do the last step to change the permissions. I will give that a go in a few minutes when I am back at my PC.

I had to make an adjustment to the systemd service to add --kbd-device /dev/input/by-id/usb-Kinesis_Corporation_Adv360_Pro_ECCDE31BC62AEEBC-if02-event-kbd and then started it back up and readded my script after assigning the permission to the tmp folder.
I fired up the service and one of my two test scripts worked. Is there a way to see what scripts are actually/currently loaded>  I was just going to try and readd the second one and try again, but then that made me wonder if there was a way to view that info?

That would effectively just be ls -l ~/.config/hawck/scripts | grep '^.rwx', macrod watches that directory for changes to the executable flag and loads/unloads scripts.

From what I can tell, things seem like they should be ok now. That leads me to another side question, though. I was going to try to build a few script functions to better test things out when I pasted in some of the examples into my current script.
Due to the few additional DSL items added to .hwk, it makes my LSP explode when I try to associate the hwk extension with Lua as seen below.
I don't know much about DSL in general, unfortunately. Do you have any idea if it's possible to say, take any of code/rules you put into it when creating it and apply them to a LSP so that it knows about them, or at least might ignore them?
Obviously, it would be great to be able to have my standard Lua highlighting and such, but it's not quite worth the expense of being able to even see my code. Neither choice is ideal, lol.
Thanks,
-MH

@MostHated I would recommend disabling LSP for hawck scripts, then if you have larger pieces of Lua code (making LSP necessary) being called from macros, put that in a separate .lua file that you require from the .hwk file.
Alternatively, if you really want to use an LSP server for hawck scripts, you can drop the => syntax and just use what hwk2lua will translate => into:
m = __match
m[key "a"] = insert "b"
m[up] = MatchScope.new(function (m)
  m[key "b"] = insert "a"
end)


Added info about linuxboot book

The LinuxBoot book now contains detailed information to build firmware images based on coreboot, so let's link it here.

Codecov Report

Merging #86 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #86   +/-   ##
=======================================
  Coverage   44.25%   44.25%
=======================================
  Files          12       12
  Lines         461      461
=======================================
  Hits          204      204
  Misses        232      232
  Partials       25       25

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 8595959...77a422a. Read the comment docs.


bug when installing (using yarn)

node_modules/fastify-socket.io/index.d.ts:6:9 - error TS2503: Cannot find namespace 'SocketIO'.
io: SocketIO.Server

Hi, could you provide a bit more info?
Are you using typescript?
Node and Fastify version?
Last version of the plugin?

ok for sure :

"fastify": "3.5.1",
node v14.15.1
yes it was the latest one

@musabkhunaijir
Typescript right?

@musabkhunaijir
Typescript right?

yet it's typescript:

Version 4.1.2

@musabkhunaijir
I think you are missing @types/socket.io package.
Is that possible?

Have same issue, your workaround not working

Have same issue, your workaround not working

my issue was that I had a folder named as the same GraphQLnode module one and the conflict happened

my issue was that I had a folder named as the same GraphQLnode module one and the conflict happened

thanks for clarifying that @musabkhunaijir


Cross account S3 bucket with SSE-KMS enabled fail

Cannot access cross account S3 bucket if the bucket has KMS enabled
Describe the Bug
In the documentation it's specified that we can use buckets from a different AWS accounts. For example: I'm using AccountA for AGC and AccountB for the buckets:
data:
  - location: s3://accB-s3-bucket*
    readOnly: true

This works fine if there is no KMS encryption set..but if SSE-KMS is set on the bucket..then the Role that is used to run the EC2s (has name like: Agc-Context-xxxx-g-BatchTaskBatchSpotBatchR-1SMCM2E1YR01X) needs to be able to access that KMS key.
Accessing those buckets do not work due to this.
Steps to Reproduce
Use a S3 bucket from a different AWS account and make sure SSE-KMS is enabled.
Expected Behavior
I should be able to access the involved S3 bucket.
Actual Behavior
I get forbidden message.
download failed: s3://accB-s3-bucket/file.gvcf.gz to ../../tmp/ephermal/file.gvcf.gz An error occurred (AccessDenied) when calling the GetObject operation: The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access.

Additional Context
If I manually add on that Role a policy that allows kms:decrypt on that KMS key..it behaves properly..though once the context is destroyed & re-created the policy needs to be added again.
Operating System: Ubuntu 18.04
AGC Version: 1.5.1
Was AGC setup with a custom bucket: Yes
Was AGC setup with a custom VPC: Yes

Thanks for raising this issue and for validating that it works with a manually updated IAM Role.  We will add support for cross-account S3 buckets to our feature backlog.
Switching the label from "bug" to "enhancement" since this would be considered a new feature.  Leaving this issue open to track the work.


Set window size and position?

Is it possible to set the VS Code window size and position, either via settings.json, though an extension, or by some other mechanism?
In Atom, I can do this in my init.coffee file as such:
atom.commands.add 'atom-workspace',
    'custom:prepare-for-screencast': ->
        atom.setSize(1280, 720)
        atom.setPosition(37, 50)

Then I can call Prepare for screencast from the Command palette.

Unfortunately neither settings, nor extension API provides such ability, as far as I am aware. Correct me if I am wrong @bpasero @joaomoreno.
This could be a proposal for making it.

Sorry, but this is not the right place for questions. Please post questions over at StackOverflow: http://stackoverflow.com/questions/tagged/vscode
Thanks for understanding.

Why aren't you make a feature request out of it? @bpasero

FWIW, I posted over here: https://stackoverflow.com/questions/44412233/how-to-set-window-size-and-position-in-visual-studio-code


Add my first file

I have created a new branch, created a file, and made a commit

Creado el merge pa


feat: add toggle legend switch to scatter plot

Closes https://github.com/datavisyn/visyn_core/issues/274
Developer Checklist (Definition of Done)
Issue

[ ] All acceptance criteria from the issue are met
[ ] Tested in latest Chrome/Firefox

UI/UX/Vis

[ ] Requires UI/UX/Vis review

[ ] Reviewer(s) are notified (tag assignees)
[ ] Review has occurred (link to notes)
[ ] Feedback is included in this PR
[ ] Reviewer(s) approve of concept and design

Code

[ ] Branch is up-to-date with the branch to be merged with, i.e., develop
[ ] Code is cleaned up and formatted
[ ] Unit tests are written (frontend/backend if applicable)
[ ] Integration tests are written (if applicable)

PR

[ ] Descriptive title for this pull request is provided (will be used for release notes later)
[ ] Reviewer and assignees are defined
[ ] Add type label (e.g., bug, feature) to this pull request
[ ] Add release label (e.g., release: minor) to this PR following semver
[ ] The PR is connected to the corresponding issue (via Closes #...)
[ ] Summary of changes is written

Summary of changes

add toggle legend switch to scatter plot

Screenshots

Additional notes for the reviewer(s)

Thanks for creating this pull request 🤗

In bioinsight we currently have the statistics on position absolute, covering your legend toggle.
We shoud whether render the stats somewhere else in bioinsight, or you add a z-index to your toggle?


👋 From the Selenium project!

At the Selenium Project we want to collaborate with you and work together to improve the WebDriver ecosystem. We would like to meet you, understand your pain points, and discuss ideas around Selenium and/or WebDriver.
If you are interested, please fill out the form below and we will reach out to you.
https://forms.gle/Z72BmP4FTsM1GKgE6
We are looking forward to hearing from you!
PS: Feel free to close this issue, it was just meant as a way to reach out to you 😄

Thanks @diemol, I will fill out the form to reach out for the Testcontainers project as a whole 🙂
Although I am not a maintainer of this repo, I will close the issue, hope that's ok.


Transaction does not get rolled back if exception happens during commit.

For example:
# >>> entity.kind()
# 'Knd'
with datastore.transaction.Transaction():
    # entity1 has an incomplete key, hence the delete fails
    entity1.delete()
# Exception: Request failed. Error was: Key path element must not be incomplete: [Knd: ]

with datastore.transaction.Transaction():
    entity2.save()
# ValueError: Cannot start a transaction with another already in progress.

Maybe this isn't such a big deal since most code will stop working after the first uncaught exception? The only reason I noticed is because using a test-runner, the exception is caught and printed, but the process just moves on to the next.

I just realized this was filed and closed as #136. However, I think it should be addressed as discussed by Tres.

@tseaver This will probably be fixed as part of #514. This only causes failure of future code because the cleanup
self.connection.transaction(None)

doesn't get a chance to occur either in Transaction.commit() or Transaction.rollback().
Once we rely on Batch.__exit__ to just put the current Transaction off the stack, this bug should go away.
However, it's unclear to me if we need to rollback() a transaction which fails on commit(). It seems like we should, but maybe it doesn't matter.

Working code to re-create this bug (as of 0525530ad7a76e408ca2e842b883d49c353ed56d):
>>> from gcloud import datastore
>>> from gcloud.datastore import _implicit_environ
>>> from gcloud.datastore.key import Key
>>> from gcloud.datastore.transaction import Transaction
>>>
>>> print _implicit_environ.CONNECTION
None
>>>
>>> datastore.set_default_connection()
>>> datastore.set_default_dataset_id('foo')
>>>
>>> print _implicit_environ.CONNECTION
<gcloud.datastore.connection.Connection object at 0x7f64c2577190>
>>> print _implicit_environ.CONNECTION.transaction()
None
>>>
>>> with Transaction():
...     partial_key = Key('Knd')
...     partial_key.delete()
...
 Error was: Key path element must not be incomplete: [Knd: ]
>>> print _implicit_environ.CONNECTION
<gcloud.datastore.connection.Connection object at 0x7f64c2577190>
>>> print _implicit_environ.CONNECTION.transaction()
<gcloud.datastore.transaction.Transaction object at 0x7f64c2464510>

If the back-end returns an error in our call to its commit, I don't think we should be rolling anything back:  the "token" for the transaction is already known to be invalid on their side, which is the only reason to call their rollback.

I'm not clear why the "token" for the transaction is known to be valid. I'd like to get input from someone on the datastore team to see if rollback is necessary / a "best practice" in those cases.

rollback exists to allow the application to signal the back-end that it will never call commit, and therefore that the back-end can release any resources for that transaction.
I cannot see any possible way to reuse the opaque transaction field (returned in beginTransaction) after commit API using it fails.  The back-end folks will have torn down / released anything they allocated in beginTransaction when the failed the commit, and don't need us to tell them to do so by calling rollback (in fact, I would bet that rollback after a failed commit would error out).

I wasn't sure that

will have torn down / released anything they allocated in beginTransaction when
they failed the commit

is actually true. I just tried to commit twice and it clearly fails.
I was "distracted" by the fact that a transaction can have multiple runQuery calls (i.e. read options are set in a query).

To summarize all that just happened, the only thing left to fix this bug is the removal of
self.connection.transaction(None)

which will happen by the end of #514.

Fixed as of #550


Am I looking in the wrong place for Sharepoint Developer Documentation?

What type of issue is this?
Question
What SharePoint development model, framework, SDK or API is this about?
SharePoint REST API
Target SharePoint environment
SharePoint Online
What browser(s) / client(s) have you tested

[ ] 💥 Internet Explorer
[ ] 💥 Microsoft Edge
[ ] 💥 Google Chrome
[ ] 💥 FireFox
[ ] 💥 Safari
[ ] mobile (iOS/iPadOS)
[ ] mobile (Android)
[X] not applicable
[ ] other (enter in the "Additional environment details" area below)

Additional environment details

browser version
SPFx version
Node.js version
etc

Issue description
I'm looking for a straight-forward list of Sharepoint REST API endpoints and methods.  So far I've found little tid-bits of information scattered throughout the official documentation.
For example I can't find any documentation about this URI:  _api/web/siteusers
Every API ive dealt with has a full list of every possible endpoint and clear examples of how to use them.  SharePoint's documentation is all over the place.  There doesn't seem to be any clear structure to the documentation.
I mean look at this:  Big Commerce API
And then try to figure out how to get a list of brands from a big commerce store.
Answer:  https://api.bigcommerce.com/stores/{store_hash}/v3/catalog/brands
And then look at this:  SharePoint API
And then try to find a specific site's user by their email address through an HTTP Request.
Answer:  https://{TENAT NAME}/.sharepoint.com/sites/{SITE NAME}/_api/web/siteusers/GetByEmail('{EMAIL})
I got that answer from the Power Automate form btw, 90% of everything I've found about sharepoint's API I've gotten from peoples blogs.
Is there some secret documentation that I don't know about?  (if its right in my face the whole time, POINT IT OUT PLEASE!)
Is there a way to search Microsoft documentation which doesn't bombard me with 2,000,000 hits that have nothing to do with my query?
Reference:

Or am I forever doomed to search endless blogs and support forums?
Someone please, throw me a bone.

From my experience: REST apis are poorly documented. There is no reference documentation for the API (only few articles to expose the general use of the apis).
Some tips I use to find information:

REST api actually reflects most of the CSOM. For example, if you have a method like ListCollection.GetById, you can "transpose" it as a rest call _api/web/lists/getbyid('XXX'). It requires however to have a deep knowledge of SharePoint object model (in my example I know _api/web/lists  matches Web.Lists which is of type ListCollection
A very valuable resource to explore REST capacities is SharePoint REST API Metadata Explorer, written by Sergei Sergeev. This tool allows to explorer the REST types (based on Odata). If I take my previous example, you can discover

_api/web/ is of type SP.Web (click on it)
SP.Web contains a navigation property Lists which is of type Collection<Lists> (click on it)
Collection<Lists> contains a method named GetById (click on it)
GetById waits for a single argument id: Guid

Few blog articles mention that OData can be less verbose by setting Accept and ContentType headers to application/json;odata=nometadata (if on Odata V3)

In opposition Graph API are a far better documentation, which payload samples and return. Maybe MS consider REST apis as legacy.

I feel your pain, and a lot of the knowledge is gained by others sharing it, but that's because SharePoint is a beast of a system which has grown massively over the years, as a result it has a number of different technology stacks which can be used to get the data you need, these include CSOM, JSOM, REST, CAML, KQL and the list goes on, as a result Microsoft in recent years has moved towards using the MS Graph API as a central point for all REST queries to any of it's services including SharePoint.
So you will be able to still find legacy information scattered around as you mentioned, but that's because the preferred route is now MS Graph.
One very good resource for most endpoint is PnP JS, it's an framework library which allows easy access to most REST endpoint and has some truly great documentation, if nothing else it'll help point you in the right direction a lot of the time!
https://pnp.github.io/pnpjs/
For example the following shows you the different endpoints for users as mentioned in your query:
https://pnp.github.io/pnpjs/sp/site-users/
To get you started with MS Graph take a look here:
https://learn.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0
Hope that helps :)


Failures on Production App (IOS / Android)

This is the failures graph of my app (Android) (on the blue arrow, that's when I started I launched the first version with this plugin):

This is the failures graph of my app (IOS) (on the blue arrow, that's when I started I launched the first version with this plugin):

I had to remove the plugin because the failure rate was very high, decreasing the visibility of the app in the store.

Welcome a board! Now open the plugin, inspect the code and discovery whats going on. The dart is entirely open source.
If you wanna share your project with us ill be able to help you. Otherwise only you can discovery whats happened.

Welcome a board! Now open the plugin, inspect the code and discovery whats going on. The dart is entirely open source.
If you wanna share your project with us ill be able to help you. Otherwise only you can discovery whats happened.

Since seems youll not provide any valid information about it, i gonna assume that what happened was due to yours bad implementation, as you did not followed the instructions in the README file, inspected the example projects or even combined the use of this plugin with others that we have already been warned to not to do.
In case of someday you decide to help us with something more useful than just complain about a free code, that you just not even helped to build or payed for, we can open this topic again.

Since seems youll not provide any valid information about it, i gonna assume that what happened was due to yours bad implementation, as you did not followed the instructions in the README file, inspected the example projects or even combined the use of this plugin with others that we have already been warned to not to do.
In case of someday you decide to help us with something more useful than just complain about a free code, that you just not even helped to build or payed for, we can open this topic again.


[release] v5.15.16

PR for release v5.15.16

Can I get some help with cherry-picking to master these two Connect-related PRs? 😬 https://github.com/mui/material-ui/pull/41763 & https://github.com/mui/material-ui/pull/40848 — I was concerned to just them directly to material-ui-docs as I saw some cherry-pick PRs lately, so wasn't sure what was the best approach.

Can I get some help with cherry-picking to master these two Connect-related PRs? 😬 https://github.com/mui/material-ui/pull/41763 & https://github.com/mui/material-ui/pull/40848

Sure, I'll create the cherry-pick PRs

We are releasing only the stable packages for v5, as we would have conflicts with Joy UI, Base UI and the other alpha/beta packages.

This is why I removed Joy, and only bumped the stable packages.

@siriwatknp volunteer will handle the v5 release, we can do it by the end of the week.

No problem. Should I close this PR? Will @siriwatknp be taking all v5 releases?

Can I get some help with cherry-picking to master these two Connect-related PRs? 😬 #41763 & #40848

Sure, I'll create the cherry-pick PRs

We are releasing only the stable packages for v5, as we would have conflicts with Joy UI, Base UI and the other alpha/beta packages.

This is why I removed Joy, and only bumped the stable packages.

@siriwatknp volunteer will handle the v5 release, we can do it by the end of the week.

No problem. Should I close this PR? Will @siriwatknp be taking all v5 releases?

Feel free to close this PR, I will handle v5 releases.


install from github

is it possible to install koa-graphql directly from github?
npm i<EMAIL_ADDRESS>--save
the folder of koa-graphql it is empty inside node_modules when I install from github

Can confirm this. NPM only pulls LICENSE,  PATENTS, README and package.json. The src and resources folder are both missing.

You need to clone, build locally, then install from the local path.
Reference: https://github.com/reactjs/react-router/pull/3164

@chentsulin Thanks for the heads-up. That clears things up 🎉


Docs - Update DG for find command feature

Added implementation details of "Find command" to DG draft as per week 10 requirements.
Fixes #121

Codecov Report

Merging #122 (60bedd5) into master (46836cf) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #122   +/-   ##
=========================================
  Coverage     69.09%   69.09%
  Complexity      444      444
=========================================
  Files            81       81
  Lines          1521     1521
  Branches        174      174
=========================================
  Hits           1051     1051
  Misses          408      408
  Partials         62       62

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 46836cf...60bedd5. Read the comment docs.


ioredis usage with generic-pool causing connections recreated for every slotsRefreshInterval

I'm trying to implement connection pooling using the generic-pool library (min2, max 5). Connecting to Redis 5.0.6 on Elasticache cluster mode with sharding and 1 replica. (configuration differs in lower env 2 shards vs Prod env 6 shards) In the config instead of specifying all the nodes, we've a common DNS name of Elasticache endpoint provided in the config.
The problem that I'm seeing in all environments is, ioredis is trying to reset the cluster with empty array and recreate all the node connections with each slotsRefreshInterval (i.e. 20000 ms). This is causing un-necessary concurrent connections at any given point, and causing CPU spikes.
with debug logs enabled in lower environment, I'm seeing below. Withe each slotsRefreshInterval, disconnect command followed by reset[] is issued, and it basically closes all nodes and recreate all the connections. Essentially it defeats the purpose of connection pooling.
A further look in the logs tells me, there might be a pending disconnect event (due to DNS look up and getting the actual slots count and response) but cluster ready event is emitted too soon. When slotsRefresh is happening, that previous disconnect is run and closes all the node connections.
Issue occurs even if I set pool size min:1, still it keeps re-connecting every 20 seconds (slotsRefreshInterval)

Lvl=debug Loc=:libs.cache/redisCacheProviderV2 ServerName=sparachi-mac RedisCacheProviderV2 invoked
  ioredis:cluster status: [empty] -> connecting +0ms
Lvl=info Loc=:libs.cache/redisCacheProviderV2 ServerName=sparachi-mac Redis cluster endpoint: api.cache.xyz.com connected to port: 6379
  ioredis:cluster resolved hostname sit-api-redis-0002-001.use1.cache.amazonaws.com to IP <IP_ADDRESS> +3s
  ioredis:cluster resolved hostname sit-api-redis-0001-001.use1.cache.amazonaws.com to IP <IP_ADDRESS> +0ms
  ioredis:cluster:connectionPool Reset with [
  ioredis:cluster:connectionPool   { host: '<IP_ADDRESS>', port: 6379 },
  ioredis:cluster:connectionPool   { host: '<IP_ADDRESS>', port: 6379 }
  ioredis:cluster:connectionPool ] +0ms
  ioredis:cluster:connectionPool Connecting to <IP_ADDRESS>:6379 as master +3ms
  ioredis:redis status[<IP_ADDRESS>:6379]: [empty] -> connecting +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to <IP_ADDRESS>:6379 as master +5ms
  ioredis:redis status[<IP_ADDRESS>:6379]: [empty] -> connecting +4ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster getting slot cache from <IP_ADDRESS>:6379 +9ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: [empty] -> connecting +2ms
  ioredis:redis queue command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> cluster([ 'slots' ]) +1ms
  ioredis:cluster:subscriber selected a subscriber <IP_ADDRESS>:6379 +0ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(subscriber))]: [empty] -> wait +1ms
  ioredis:cluster:subscriber started +0ms
warn: [LaunchDarkly] Will retry posting events after 1 second
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: connecting -> connect +80ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> auth([ 'test-auth-token-for-redis' ]) +1ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: connect -> ready +0ms
  ioredis:connection set the connection name [ioredis-cluster(refresher)] +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> client([ 'setname', 'ioredis-cluster(refresher)' ]) +1ms
  ioredis:connection send 1 commands in offline queue +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> cluster([ 'slots' ]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:cluster cluster slots result count: 2 +111ms
  ioredis:cluster cluster slots result [0]: slots 0~8191 served by [
  'sit-api-redis-0001-001.use1.cache.amazonaws.com:6379',
  'sit-api-redis-0001-002.use1.cache.amazonaws.com:6379'
] +0ms
  ioredis:cluster cluster slots result [1]: slots 8192~16383 served by [
  'sit-api-redis-0002-001.use1.cache.amazonaws.com:6379',
  'sit-api-redis-0002-002.use1.cache.amazonaws.com:6379'
] +0ms
  ioredis:cluster:connectionPool Reset with [
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0001-001.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: false
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0001-002.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: true
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0002-001.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: false
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0002-002.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: true
  ioredis:cluster:connectionPool   }
  ioredis:cluster:connectionPool ] +124ms
  ioredis:cluster:connectionPool Disconnect <IP_ADDRESS>:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove <IP_ADDRESS>:6379 from the pool +0ms
  ioredis:cluster:connectionPool Disconnect <IP_ADDRESS>:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove <IP_ADDRESS>:6379 from the pool +1ms
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0001-001.use1.cache.amazonaws.com:6379 as master +0ms
  ioredis:redis status[sit-api-redis-0001-001.use1.cache.amazonaws.com:6379]: [empty] -> connecting +36ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 as slave +2ms
  ioredis:redis status[sit-api-redis-0001-002.use1.cache.amazonaws.com:6379]: [empty] -> connecting +2ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0002-001.use1.cache.amazonaws.com:6379 as master +1ms
  ioredis:redis status[sit-api-redis-0002-001.use1.cache.amazonaws.com:6379]: [empty] -> connecting +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 as slave +1ms
  ioredis:redis status[sit-api-redis-0002-002.use1.cache.amazonaws.com:6379]: [empty] -> connecting +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster status: connecting -> connect +18ms
  ioredis:redis queue command[sit-api-redis-0001-001.use1.cache.amazonaws.com:6379]: 0 -> cluster([ 'info' ]) +2ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:65:21 ServerName=sparachi-mac redis cluster connected, check for ready event
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +6ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +1ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: ready -> close +16ms
  ioredis:connection skip reconnecting since the connection is manually closed. +68ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: close -> end +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +1ms
  ioredis:connection skip reconnecting since the connection is manually closed. +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:cluster:subscriber subscriber has left, selecting a new one... +152ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(subscriber))]: wait -> close +1ms
  ioredis:connection skip reconnecting since the connection is manually closed. +1ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(subscriber))]: close -> end +0ms
  ioredis:cluster:subscriber selected a subscriber sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 +1ms
  ioredis:redis status[sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 (ioredis-cluster(subscriber))]: [empty] -> wait +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +0ms
  ioredis:connection skip reconnecting since the connection is manually closed. +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +58ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
Lvl=info Loc=:app.tcp/loaders/appInit:8:43 ServerName=sparachi-mac App all started on ports 80 443!!!
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +22ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +3ms
  ioredis:connection send 1 commands in offline queue +87ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> cluster([ 'info' ]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +23ms
  ioredis:connection set the connection to readonly mode +23ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> readonly([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +2ms
  ioredis:connection set the connection to readonly mode +2ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> readonly([]) +0ms
  ioredis:cluster status: connect -> ready +141ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:43:21 ServerName=sparachi-mac redis cluster is now ready
  ioredis:cluster refreshing slot caches... (triggered by "slotsRefreshInterval" option) +20s
  ioredis:cluster getting slot cache from sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 +1ms
  ioredis:redis status[sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 (ioredis-cluster(refresher))]: [empty] -> connecting +20s
  ioredis:redis queue command[sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 (ioredis-cluster(refresher))]: 0 -> cluster([ 'slots' ]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: connecting -> connect +100ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: connect -> ready +0ms
  ioredis:connection set the connection name [ioredis-cluster(refresher)] +20s
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> client([ 'setname', 'ioredis-cluster(refresher)' ]) +1ms
  ioredis:connection set the connection to readonly mode +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> readonly([]) +0ms
  ioredis:connection send 1 commands in offline queue +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> cluster([ 'slots' ]) +0ms
  ioredis:cluster cluster slots result count: 2 +124ms
  ioredis:cluster cluster slots result [0]: slots 8192~16383 served by [
  'sit-api-redis-0002-001.use1.cache.amazonaws.com:6379',
  'sit-api-redis-0002-002.use1.cache.amazonaws.com:6379'
] +0ms
  ioredis:cluster cluster slots result [1]: slots 0~8191 served by [
  'sit-api-redis-0001-001.use1.cache.amazonaws.com:6379',
  'sit-api-redis-0001-002.use1.cache.amazonaws.com:6379'
] +1ms
  ioredis:cluster:connectionPool Reset with [
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0002-001.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: false
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0002-002.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: true
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0001-001.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: false
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0001-002.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: true
  ioredis:cluster:connectionPool   }
  ioredis:cluster:connectionPool ] +20s
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: ready -> close +62ms
  ioredis:connection skip reconnecting since the connection is manually closed. +62ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: close -> end +0ms
  ioredis:cluster status: ready -> disconnecting +17s
  ioredis:redis status[sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 (ioredis-cluster(subscriber))]: wait -> close +17s
  ioredis:connection skip reconnecting since the connection is manually closed. +17s
  ioredis:redis status[sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 (ioredis-cluster(subscriber))]: close -> end +0ms
  ioredis:cluster:subscriber stopped +37s
  ioredis:cluster:connectionPool Reset with [] +17s
  ioredis:cluster:connectionPool Disconnect sit-api-redis-0001-001.use1.cache.amazonaws.com:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove sit-api-redis-0001-001.use1.cache.amazonaws.com:6379 from the pool +0ms
  ioredis:cluster:connectionPool Disconnect sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 from the pool +0ms
  ioredis:cluster:connectionPool Disconnect sit-api-redis-0002-001.use1.cache.amazonaws.com:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove sit-api-redis-0002-001.use1.cache.amazonaws.com:6379 from the pool +11ms
  ioredis:cluster:connectionPool Disconnect sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 from the pool +0ms
  ioredis:cluster status: [empty] -> connecting +13ms
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +223ms
  ioredis:connection skip reconnecting since the connection is manually closed. +224ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:cluster status: disconnecting -> close +214ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:69:21 ServerName=sparachi-mac redis cluster connection closed undefined
  ioredis:cluster status: close -> end +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:73:21 ServerName=sparachi-mac redis cluster connection is ended
  ioredis:cluster resolved hostname sit-api-redis-0002-001.use1.cache.amazonaws.com to IP <IP_ADDRESS> +1ms
  ioredis:cluster resolved hostname sit-api-redis-0001-001.use1.cache.amazonaws.com to IP <IP_ADDRESS> +1ms
  ioredis:cluster:connectionPool Reset with [
  ioredis:cluster:connectionPool   { host: '<IP_ADDRESS>', port: 6379 },
  ioredis:cluster:connectionPool   { host: '<IP_ADDRESS>', port: 6379 }
  ioredis:cluster:connectionPool ] +218ms
  ioredis:cluster:connectionPool Connecting to <IP_ADDRESS>:6379 as master +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: [empty] -> connecting +6ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to <IP_ADDRESS>:6379 as master +2ms
  ioredis:redis status[<IP_ADDRESS>:6379]: [empty] -> connecting +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster getting slot cache from <IP_ADDRESS>:6379 +3ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: [empty] -> connecting +1ms
  ioredis:redis queue command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> cluster([ 'slots' ]) +0ms
  ioredis:cluster:subscriber selected a subscriber <IP_ADDRESS>:6379 +232ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(subscriber))]: [empty] -> wait +1ms
  ioredis:cluster:subscriber started +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +3ms
  ioredis:connection skip reconnecting since the connection is manually closed. +12ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:cluster status: end -> close +5ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:69:21 ServerName=sparachi-mac redis cluster connection closed undefined
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +2ms
  ioredis:connection skip reconnecting since the connection is manually closed. +2ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:cluster status: close -> close +2ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:69:21 ServerName=sparachi-mac redis cluster connection closed undefined
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +2ms
  ioredis:connection skip reconnecting since the connection is manually closed. +2ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:cluster status: close -> close +2ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:69:21 ServerName=sparachi-mac redis cluster connection closed undefined
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +218ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +1ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: connect -> ready +0ms
  ioredis:connection set the connection name [ioredis-cluster(refresher)] +220ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> client([ 'setname', 'ioredis-cluster(refresher)' ]) +0ms
  ioredis:connection send 1 commands in offline queue +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: 0 -> cluster([ 'slots' ]) +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +21ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +5ms
  ioredis:cluster cluster slots result count: 2 +249ms
  ioredis:cluster cluster slots result [0]: slots 0~8191 served by [
  'sit-api-redis-0001-001.use1.cache.amazonaws.com:6379',
  'sit-api-redis-0001-002.use1.cache.amazonaws.com:6379'
] +0ms
  ioredis:cluster cluster slots result [1]: slots 8192~16383 served by [
  'sit-api-redis-0002-001.use1.cache.amazonaws.com:6379',
  'sit-api-redis-0002-002.use1.cache.amazonaws.com:6379'
] +1ms
  ioredis:cluster:connectionPool Reset with [
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0001-001.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: false
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0001-002.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: true
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0002-001.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: false
  ioredis:cluster:connectionPool   },
  ioredis:cluster:connectionPool   {
  ioredis:cluster:connectionPool     host: 'sit-api-redis-0002-002.use1.cache.amazonaws.com',
  ioredis:cluster:connectionPool     port: 6379,
  ioredis:cluster:connectionPool     readOnly: true
  ioredis:cluster:connectionPool   }
  ioredis:cluster:connectionPool ] +274ms
  ioredis:cluster:connectionPool Disconnect <IP_ADDRESS>:6379 because the node does not hold any slot +1ms
  ioredis:cluster:connectionPool Remove <IP_ADDRESS>:6379 from the pool +0ms
  ioredis:cluster:connectionPool Disconnect <IP_ADDRESS>:6379 because the node does not hold any slot +0ms
  ioredis:cluster:connectionPool Remove <IP_ADDRESS>:6379 from the pool +0ms
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0001-001.use1.cache.amazonaws.com:6379 as master +0ms
  ioredis:redis status[sit-api-redis-0001-001.use1.cache.amazonaws.com:6379]: [empty] -> connecting +18ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 as slave +1ms
  ioredis:redis status[sit-api-redis-0001-002.use1.cache.amazonaws.com:6379]: [empty] -> connecting +2ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0002-001.use1.cache.amazonaws.com:6379 as master +1ms
  ioredis:redis status[sit-api-redis-0002-001.use1.cache.amazonaws.com:6379]: [empty] -> connecting +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster:connectionPool Connecting to sit-api-redis-0002-002.use1.cache.amazonaws.com:6379 as slave +2ms
  ioredis:redis status[sit-api-redis-0002-002.use1.cache.amazonaws.com:6379]: [empty] -> connecting +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node connected to cluster
  ioredis:cluster status: connecting -> connect +20ms
  ioredis:redis queue command[sit-api-redis-0002-001.use1.cache.amazonaws.com:6379]: 0 -> cluster([ 'info' ]) +1ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:65:21 ServerName=sparachi-mac redis cluster connected, check for ready event
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: ready -> close +23ms
  ioredis:connection skip reconnecting since the connection is manually closed. +74ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(refresher))]: close -> end +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +0ms
  ioredis:connection skip reconnecting since the connection is manually closed. +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:redis status[<IP_ADDRESS>:6379]: ready -> close +2ms
  ioredis:connection skip reconnecting since the connection is manually closed. +2ms
  ioredis:redis status[<IP_ADDRESS>:6379]: close -> end +0ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory ServerName=sparachi-mac redis node disconnected from cluster
  ioredis:cluster:subscriber subscriber has left, selecting a new one... +305ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(subscriber))]: wait -> close +2ms
  ioredis:connection skip reconnecting since the connection is manually closed. +2ms
  ioredis:redis status[<IP_ADDRESS>:6379 (ioredis-cluster(subscriber))]: close -> end +0ms
  ioredis:cluster:subscriber selected a subscriber sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 +0ms
  ioredis:redis status[sit-api-redis-0001-002.use1.cache.amazonaws.com:6379 (ioredis-cluster(subscriber))]: [empty] -> wait +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +51ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +1ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +6ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +19ms
  ioredis:connection send 1 commands in offline queue +79ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> cluster([ 'info' ]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connecting -> connect +1ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> auth([ 'test-auth-token-for-redis' ]) +0ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> info([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +1ms
  ioredis:connection set the connection to readonly mode +2ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> readonly([]) +0ms
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +5ms
  ioredis:cluster status: connect -> ready +131ms
Lvl=debug Loc=:libs.cache/redisCacheClusterFactory:43:21 ServerName=sparachi-mac redis cluster is now ready
  ioredis:redis status[<IP_ADDRESS>:6379]: connect -> ready +21ms
  ioredis:connection set the connection to readonly mode +26ms
  ioredis:redis write command[<IP_ADDRESS>:6379]: 0 -> readonly([]) +0ms

Hey @sparachi
We are also facing similar issues with ioredis. and sometimes, connections are reset even in production which impacts the performance of the application.
Do you know what is the purpose of slotsRefreshTimeout & slotsRefreshInterval and how do they impact the performance of the redis cluster.

do you have a working lib for that now guys? thanks

I think we hit a similar issue because we used a DNS hostname and not an IP address.... Speculative, but maybe helpful for anyone who comes here henceforth


POC - Review use of AWS Firewall for TGW  external connections

User Story

Value

Review use of AWS Firewall to manage connections that are external to the Modernisation Platform Transit Gateway
Questions / Assumptions

Definition of done

[x] Review use of AWS Firewall for Transit Gateway

Reference
How to write good user stories

Using AWS Firewall to manage Transit Gateway ingress traffic from other networks has now been evaluated and will be implemented.
This solution will enable all ingress traffic to be filtered by a set of firewall rules before the traffic gets to the main TGW routing table.
Closing ticket


[Windows] Port binding is not visible with 'netstat' but works correctly.

What I did
On Windows Server 2016,

powershell -Command "Install-WindowsFeature -Name Containers"
Download Docker 1.13.0 from 'https://github.com/docker/docker/releases' and do dockerd.exe --register-service
docker pull microsoft/aspnet
docker run -d -p 80:80 --name aspnet microsoft/aspnet
docker exec -it aspnet cmd
echo ^<% Response.Write(DateTime.Now.ToString()) %^> > c:\inetpub\wwwroot\test.aspx

Problem
I get correct response when I do curl http://<container host ip>/test.aspx from other machine (Mac).
But I can't get any result when I do netstat -ano | findstr :80.
Docker version
docker version shows as follows:
Client:
Version:      1.13.0
API version:  1.25
Go version:   go1.7.3
Git commit:   49bf474
Built:        Wed Jan 18 16:20:26 2017
OS/Arch:      windows/amd64
Server:
Version:      1.13.0
API version:  1.25 (minimum version 1.24)
Go version:   go1.7.3
Git commit:   49bf474
Built:        Wed Jan 18 16:20:26 2017
OS/Arch:      windows/amd64
Experimental: false
Docker info
docker info shows as follows:
Containers: 2
Running: 1
Paused: 0
Stopped: 1
Images: 2
Server Version: 1.13.0
Storage Driver: windowsfilter
Windows:
Logging Driver: json-file
Plugins:
Volume: local
Network: l2bridge l2tunnel nat null overlay transparent
Swarm: inactive
Default Isolation: process
Kernel Version: 10.0 14393 (14393.693.amd64fre.rs1_release.161220-1747)
Operating System: Windows Server 2016 Standard
OSType: windows
Architecture: x86_64
CPUs: 1
Total Memory: 4 GiB
Name: WIN-CVQUKQIJORS
ID: ZIQJ:I4AA:6463:U3GV:JSXL:4YRQ:PDBT:PJ7B:FT5W:DFZK:ZMUV:ULV4
Docker Root Dir: C:\ProgramData\docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
<IP_ADDRESS>/8
Live Restore Enabled: false

@mmktomato weirdly, this works correctly in my Windows 10 insider build but I can reproduce on a WS2016 instance.
It's probably a Windows problem (or netstat problem) more than a Docker one. Pinging @msabansal

@mmktomato @friism I don't see why this should fail. I will investigate and get back.

@msabansal it's not failing for me, the port is just not showing up in netstat

@msabansal It does not fail as @friism says.
@friism I can reproduce on my Windows 10 (build 14393).


log_processing_rules should match all entries in log lines

Describe what happened:
I've a container running supervisord with 2 applications inside: nginx and uwsgi. Both apps sends logs into stdout. I'm expecting to collect both logs from stdout and mark them using source attribute.  But the match happens only for the 1st entry. In my case it checks if time_local is in the line, otherwise the line completely ignored. Config com.datadoghq.ad.logs= :
[
  {
    "source": "nginx",
    "service": "app",
    "log_processing_rules": [
      {
        "type": "include_at_match",
        "name": "include_time_local",
        "pattern": "time_local"
      }
    ]
  },
  {
    "source": "python",
    "service": "app",
    "log_processing_rules": [
      {
        "type": "include_at_match",
        "name": "include_asctime",
        "pattern": "asctime"
      }
    ]
  }
]

Describe what you expected:
log_processing_rules should match each entry in array.
Steps to reproduce the issue:
Described above
Additional environment details (Operating System, Cloud provider, etc):
Amazon-Linux2
docker 19.03.6
Agent Version: 7.35.2 running in docker container

Does this work if you move the second log processing rule into the list in the first? I.e. so it appears like:
[
  {
    "source": "nginx",
    "service": "app",
    "log_processing_rules": [
      {
        "type": "include_at_match",
        "name": "include_time_local",
        "pattern": "time_local"
      },
      {
        "type": "include_at_match",
        "name": "include_asctime",
        "pattern": "asctime"
      }
    ]
  }
]

Asking as I think what is happening here is that the Agent only sees one source (stdout) and so takes the first rule/annotation. Is the Agent adding the correct service/source to the logs for each process writing to stdout?


Feature request: Character column

Support for a control for drawing vertical columns of characters.
So far I've tried using a BreakPanel and a VerticalSeparator within a Box control.
Both methods yield inconsistent results.  And a VerticalSeparator for some reason fills the whole Box control both diagonally and vertically with the VerticalSeparator's characters.
In case these shortcomings aren't replicable, here is my code:
_window = new Overlay                                                                  //Base window element for vertical bar graph
{
    TopContent = new Margin                                                          //Title formatting for window element
    {
        Offset = new Offset(1, 0, 0, 0),
        Content = _titleText
    },
    BottomContent = new Border                                                     //Borders for Window element
    {
        BorderPlacement = BorderPlacement.All,
        BorderStyle = BorderStyle.Single,

        Content = new Box                                                                  //Box control for vertical character columns
        {
            HorizontalContentPlacement = Box.HorizontalPlacement.Center,
            VerticalContentPlacement = Box.VerticalPlacement.Center,
            Content = _barStack                                                             //_barStack to be used for character column control
        }
    }
};

Hey Jesse!
If I understand your code correctly, you are trying to create a vertical bar graph.
In order to display text vertically, it's best to put it into a WrapPanel and to put that WrapPanel into a Boundary to limit its width.
The BreakPanel indeed does not seems like the best choice here, as it is designed to be used for text paragraphs that are to be broken on white spaces.
Is something like this your desired behavior?

If so, this is the code I used to generate it:
using ConsoleGUI;
using ConsoleGUI.Controls;
using ConsoleGUI.Data;
using ConsoleGUI.Space;
using ConsoleGUI.UserDefined;

class VerticalBar : SimpleControl
{
    public VerticalBar(int height, char character, Color color)
    {
        this.Content = new Box
        {
            VerticalContentPlacement = Box.VerticalPlacement.Bottom,
            Content = new Boundary
            {
                Width = 1,
                Height = height,
                Content = new Background
                {
                    Color = color,
                    Content = new WrapPanel
                    {
                        Content = new TextBlock
                        {
                            Text = new String(character, height)
                        }
                    }
                }
            }
        };
    }
}

class Program
{
    public static void Main()
    {
        ConsoleManager.Setup();

        ConsoleManager.Content = new VerticalStackPanel
        {
            Children = new IControl[]
            {
                new Margin
                {
                    Offset = new Offset(1, 0, 0, 0),
                    Content = new TextBlock
                    {
                        Text = "Vertical Bar Graph"
                    }
                },
                new HorizontalStackPanel
                {
                    Children = new[]
                    {
                        new VerticalBar(10, '▪', new Color(100, 200, 100)),
                        new VerticalBar(5, '◉', new Color(200, 100, 100)),
                        new VerticalBar(15, '▾', new Color(100, 100, 200)),
                        new VerticalBar(3, '▪', new Color(100, 200, 100)),
                        new VerticalBar(8, '◉', new Color(200, 100, 100)),
                        new VerticalBar(12, '▾', new Color(100, 100, 200)),
                        new VerticalBar(8, '▪', new Color(100, 200, 100)),
                        new VerticalBar(14, '◉', new Color(200, 100, 100)),
                        new VerticalBar(2, '▾', new Color(100, 100, 200)),
                    }
                }
            }
        };

        while (true)
        {
            Thread.Sleep(100);
            ConsoleManager.AdjustBufferSize();
        }
    }
}

Please let me know if that solves your problem or if you are trying to achieve something else.

And if you don't actually care about the bar fill, you could simplify the code of the VerticalBar to:
class VerticalBar : SimpleControl
{
    public VerticalBar(int height, char character, Color color)
    {
        this.Content = new Box
        {
            VerticalContentPlacement = Box.VerticalPlacement.Bottom,
            Content = new Boundary
            {
                Width = 1,
                Height = height,
                Content = new Background
                {
                    Color = color
                }
            }
        };
    }
}

With the following result:

This is perfect. Thank you!


array_rand does not use secure random

Hi Steve,
One test is failing, because it tries to generate a secret with length 0, and mcrypt_create_iv() does not allow that:
testCreateSecretLengthCanBeSpecified()
See failed Travis build.
If you fix the test (it should start from 1 instead of 0), all tests should pass.

A secret length of 0 makes no sense anyway; the (very) minimum value should be (around) 80 bits and I would throw an exception on anything less. I also find it pretty arbitrary to test for values 0...100 (why 100 and not... 97? 109? 2091? 729183019?). It would make more sense to test for specifice ("edge") cases and commonly used cases:

Make sure you throw an exception on anything less than, say, 80 bits (80 bits is Google's recommended minimum (if I recall correctly))
Test for common values (like 128, 160, 256, ...)
Test for upper bounds that can/will cause exceptions in underlying implementations or bounds that you set yourself (like, say, 4096) to keep things sane.

:+1:

Umm I guess I can't just throw an exception because that causes the Travis CI build to failed. Will changing it to die(...) make it fail too?

You could die or return an error code of some sort or whatever indicates that something is wrong. But having said that: exceptions can, ofcourse, also be unit-tested. In fact: you can indicate that you expect some method to throw an exception (or even more specific: you expect it to throw Exception of type X); the unit-test will PASS on that exception and FAIL if the exception isn't thrown. So throwing an exception doesn't automatically imply you can't unittest that code.
You can see here for example (noted by the @expectedException) how to unittest code that is supposed to throw an exception.

+1


Db production

build reporter changes by vladimir

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.1 out of 2 committers have signed the CLA.:white_check_mark: robmoffat:x: Vladimir ParnashviliVladimir Parnashvili seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.