Xbox series x - Guide menu dont work in post-input refactor main

Prerequisites
Please check the following before posting an issue / bug report.

[x] I am running the latest version of the firmware found HERE
[x] I have checked the documentation HERE and found no answer
[x] I checked to make sure that this issue has not already been filed HERE
[x] I am reporting the issue to the correct repository

Context
Please provide all relevant information about your setup. This is important in case the issue is not reproducible except for under certain conditions.

Firmware Version: from HERE
Name of device: Flatbox REV5 - custom build with oled, rgb and usb passthrough
Link to where you purchased the device: done it myself
Is this a custom build?: as of board? yes
Operating System: win10, xbox series x
Browser: edge, opera

Expected Behavior
After uploading fix, it should fix things. It does but not as it should
Current Behavior
I was testing this firmware with debouncing fix on xbox series x in xbox one mode. All buttons working well, double press dissapear but X button (aka Home or Guide - A1) is not working properly. It is pressed as shown on oled screen, but there are no reaction (Home menu is not appearing), and after few clicks I have Power Menu - the one when you hold Home menu for 2-3 secconds.
Steps to Reproduce
Just plug your device with Magic-X inserted in xbox one mode with this firmware, and try to press A1 button
Screenshots & Files
None

Thank you! Yeah I'm guessing its something on the virtual keycode stuff I had on the old code. Good news is I know where it is in code, just need to finish up my other big backlog of code.

This is fixed for sure in latest. Will be in RC release

Yes it is. I build main few days ago to check that :)


ImportError: No module named urllib3.contrib.pyopenssl

➜  dehydrated git:(master) ✗ ./dehydrated -c -d xxxxxx.org -t dns-01 -k 'hooks/cloudflare/hook.py'
INFO: Using main config file /root/dehydrated/config
Traceback (most recent call last):
File "hooks/cloudflare/hook.py", line 30, in
import urllib3.contrib.pyopenssl
ImportError: No module named urllib3.contrib.pyopenssl

https://github.com/certbot/certbot/issues/1883 is useless.
I try update source with letsencrypt-auto
➜  certbot git:(master) pip3 install urllib3
Requirement already satisfied: urllib3 in /usr/local/lib/python3.5/dist-packages
➜  certbot git:(master) pip3 install pyopenssl
Requirement already satisfied: pyopenssl in /usr/local/lib/python3.5/dist-packages
Requirement already satisfied: six>=1.5.2 in /usr/lib/python3/dist-packages (from pyopenssl)
Requirement already satisfied: cryptography>=1.9 in /usr/local/lib/python3.5/dist-packages (from pyopenssl)
Requirement already satisfied: cffi>=1.7 in /usr/local/lib/python3.5/dist-packages (from cryptography>=1.9->pyopenssl)
Requirement already satisfied: asn1crypto>=0.21.0 in /usr/local/lib/python3.5/dist-packages (from cryptography>=1.9->pyopenssl)
Requirement already satisfied: idna>=2.1 in /usr/local/lib/python3.5/dist-packages (from cryptography>=1.9->pyopenssl)
Requirement already satisfied: pycparser in /usr/local/lib/python3.5/dist-packages (from cffi>=1.7->cryptography>=1.9->pyopenssl)

apt install python-urllib3 -y


Create minimal admin dashboard routes in the React app

Overview
As a prep for allowing claim a facility verification, add a minimal dashboard route in the React app which is only available to privileged users -- need to determine what semantics, but probably should not use staff since that can get into the Django-Admin
(first draft should just use superuser) -- which will be used for verifying facility claims.
List facility claims in this dashboard somewhere.
Should be behind a feature flag.
Describe the solution you'd like
For signed in superusers, add a new route that is /dashboard which will display some kind of minimal dashboard screen that lists Facility Claims in a table.

Superseded by #517


Introduce admin dashboard

Hi @aglinxinyuan can you add some PR description so I know what and how to review it?

My bad. This one is still working in process. I forgot to convert to draft.


Support for macOS native spell check

Description
Nativefier should include support for the macOS "Check Spelling While Typing" feature in Edit:Spelling and Grammar.  This feature is in both Safari and Chrome, along with most other Mac apps since it's part of the OS.
Steps to Reproduce Issue
Make a Gmail Nativefier app
Compose an email
There are no red lines under misspelled words.
Specifications

Version of Nativefier (run $ nativefier --version): v7.4.0
Version of Node.js (run $ node --version): v6.9.1
OS: macOS 10.12.5
Architecture x86

Duplicate of https://github.com/jiahaog/nativefier/issues/283 , closing.


double class md-gutter

<md-layout md-gutter>
    <md-layout md-flex="50"> .... </md-layout>
    <md-layout md-flex="50"> .... </md-layout>
</md-layout>

render to

 ...

 ...

Pay attention to the class md-gutter-md-gutter.
Probably cause in this part of the code mdLayout.vue at line 83:
classes['md-gutter-' + this.mdGutter] = true;

The reason for this effect was precompilation PUG
Boolean Attributes processed from div.md-layout(md-gutter) in `
https://pugjs.org/language/attributes.html#boolean-attributes

Yes on codepen its working fine, http://codepen.io/Samuellsk/pen/yMYabM

The problem can be avoid by using div.md-layout(md-gutter="") instead div.md-layout(md-gutter) in pug template


Align mesh with colmap pointcloud

Describe the bug
Greetings. I am trying to align my model with colmap output.
But the result of the alignment is poor.

To do that I first generate transforms.json from colmap with the following command:
/home/mscherbina/Documents/github_repos/sdfstudio/scripts/process_data.py images
--data
/home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global/images
--output-dir
/home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global
--skip-colmap

I then convert it from nerfstudio to sdfstudio:
/home/mscherbina/Documents/github_repos/sdfstudio/scripts/datasets/process_nerfstudio_to_sdfstudio.py

--data /home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global/ --output-dir
/home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global/sdfstudio-data
--data-type colmap --scene-type indoor --mono-prior --omnidata-path
/home/mscherbina/Documents/github_repos/neuralsim/omnidata/omnidata_tools/torch --pretrained-models
/home/mscherbina/Documents/github_repos/neuralsim/omnidata/omnidata_tools/torch/pretrained_models

I then run monosdf:
/home/mscherbina/Documents/github_repos/sdfstudio/scripts/train.py
monosdf --pipeline.model.sdf-field.use-grid-feature True --pipeline.model.sdf-field.use-appearance-embedding True
--pipeline.model.sdf-field.geometric-init True  --pipeline.model.sdf-field.bias 0.6 --pipeline.model.sdf-field.beta-init 0.1
--pipeline.datamanager.train-num-images-to-sample-from 1 --pipeline.datamanager.train-num-times-to-repeat-images 0
 --trainer.steps-per-eval-image 1000 --trainer.steps-per-save 2000 --trainer.save-only-latest-checkpoint False
--pipeline.model.background-model none --pipeline.model.sdf-field.inside-outside True
 --pipeline.datamanager.train-num-rays-per-batch 512
--pipeline.datamanager.eval-num-rays-per-batch  512 --pipeline.model.mono-depth-loss-mult 0.001 --pipeline.model.mono-normal-loss-mult 0.01  --machine.num-gpus 1
--pipeline.model.eval_num_rays_per_chunk 512 --vis wandb --trainer.max-num-iterations 15000
sdfstudio-data --data
/home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global/sdfstudio-data --include-mono-prior True

I then extract the mesh:
ns-extract-mesh --load-config /home/mscherbina/Documents/github_repos/sdfstudio/outputs/-home-mscherbina-Documents-sfm_deploynmnets-office_vhq-static-storage-reconstructions-global-sdfstudio-data/monosdf/2023-09-21_161733/config.yml  --output-path meshes/main_v2.ply

Then I visualize the mesh, I want it to align with my colmap point cloud.
I wrote a simple script to do that using open3d:
To do that, I apply stdfstudio metadata['worldtogt'] to the mesh model. This fixes the scale, but for some reason my model is rotated. I tried swapping axis, it does not help. Also tried negating the axis. Didn't help.
import open3d as o3d
import json
import numpy as np
import pycolmap

metadata_path = '/home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global/sdfstudio-data/meta_data.json'
colmap_path = '/home/mscherbina/Documents/sfm_deploynmnets/office_vhq/static/storage/reconstructions/global/outputs/ref/'
metadata = json.load(open(metadata_path))

def filter_points(rec: pycolmap.Reconstruction):
    bbs = rec.compute_bounding_box(0.01, 0.99)
    max_reproj_error = 6
    min_track_length = 2

    # Filter points, use original reproj error here
    points = [
        (p3D.xyz, p3D.color)
        for _, p3D in rec.points3D.items()
        if (
            (p3D.xyz >= bbs[0]).all()
            and (p3D.xyz <= bbs[1]).all()
            and p3D.error <= max_reproj_error
            and p3D.track.length() >= min_track_length
        )
    ]
    xyzs = np.array([i[0] for i in points])
    colors = np.array([i[1] for i in points]) / 255.0
    return xyzs, colors

refined = pycolmap.Reconstruction(colmap_path)
points_xyz, colors = filter_points(refined)

model = o3d.io.read_triangle_mesh('meshes/main_v2.ply')
coordinate_frame = o3d.geometry.TriangleMesh.create_coordinate_frame(size=1)
model.compute_vertex_normals()

# points_xzy = points_xyz[:, [1, 2, 0]]
# points_xzy = points_xyz[:, [1, 2, 0]]
points_xzy = points_xyz[:, [0, 1, 2]]
# points_xzy = points_xyz[:, [1, 0, 2]]
# points_xzy[:, 0] = -points_xzy[:, 0]
# points_xzy[:, 1] = -points_xzy[:, 1]
# points_xzy[:, 2] = -points_xzy[:, 2]

# Convert the swapped NumPy array back to an Open3D point cloud
swapped_point_cloud = o3d.geometry.PointCloud()
swapped_point_cloud.points = o3d.utility.Vector3dVector(points_xzy)

worldtogt = np.array(metadata['worldtogt'])
model.transform(worldtogt)

o3d.visualization.draw_geometries([model, swapped_point_cloud, coordinate_frame])

Expected behavior
After applying the transform, the mesh should align with the colmap point cloud

I will try to rotate the thing so that it matches the known camera poses, but this is a little weird

Well I could use opencv's cv.estimateAffine3D with camera poses on one hand

I plotted camera poses from sdfstudio-data/meta_data.json
Aligns well with the reconstructed mesh:

Which means the error is when we generate this sdfstudio-data/meta_data.json.
I will make a PR to fix this error tomorrow

Ah, interesting, in colmap_utils.py
         # Convert from COLMAP's camera coordinate system to ours
        c2w[0:3, 1:3] *= -1
        c2w = c2w[np.array([1, 0, 2, 3]), :]
        c2w[2, :] *= -1

Yes, getting rid of these lines perfectly fixed my issue:

In order to change back to colmap I multiplied my points with this matrix:
[[0.  1.  0.  0.]
 [ 1.  0. 0. 0.]
 [0. 0. 1.  0.]
 [ 0.  0.  0.  1.]]


update package-lock

Description
fix npm ci
Related Issues
no related issue
Check List

[X] I have formatted using npx turbo format
[X] I have checked the types using npx turbo type-check
[X] I have tested the build using npx turbo build
[X] I have covered the code with tests if necessary

NOTE: we should really have a ci. to unsure these style of error will not appear

Yes a CI runner would be better to catch these errors.

@SamTV12345 could you approve this pr. Just to fix. (openssf scorecard require approve)


Needs a minor dependency bump for ghc 8 + transformers 0.5 support

Fixed.  mmorph-1.0.5 increases the upper bound on transformers

Thanks!


Update the test cases so that they better reflect the current state of t…

…he application

Codecov Report

Merging #46 (d6747e4) into master (13deab9) will decrease coverage by 0.43%.
The diff coverage is 20.00%.

@@             Coverage Diff              @@
##             master      #46      +/-   ##
============================================
- Coverage     60.11%   59.68%   -0.44%
+ Complexity      408      406       -2
============================================
  Files            80       79       -1
  Lines          1404     1389      -15
  Branches        142      139       -3
============================================
- Hits            844      829      -15
- Misses          513      517       +4
+ Partials         47       43       -4

Impacted Files
Coverage Δ

.../java/seedu/address/model/util/SampleDataUtil.java
0.00% <0.00%> (-20.00%)
:arrow_down:

...rc/main/java/seedu/address/model/person/Email.java
91.66% <100.00%> (ø)

...c/main/java/seedu/address/model/person/Person.java
81.81% <100.00%> (-0.24%)
:arrow_down:

src/main/java/seedu/address/model/tag/Tag.java
88.23% <100.00%> (+0.73%)
:arrow_up:

...a/seedu/address/logic/parser/AddCommandParser.java
100.00% <0.00%> (+5.26%)
:arrow_up:

.../model/person/PersonContainsKeywordsPredicate.java
83.33% <0.00%> (+25.00%)
:arrow_up:

:mega: Codecov can now indicate which changes are the most critical in Pull Requests. Learn more


backup wallet

why do I need a backup my wallet card in wallet if I already had a magic link email sent on signup?

its different things. magic link is like a user password to get your pass phrase from the database.
the backup is your seed phrase which you can use to directly access your blockchain funds without our wallet


DevToys shouldn't register itself as a file picker

Remove from the manifest:
<uap:Extension Category="windows.fileOpenPicker">
    <uap:FileOpenPicker>
        <uap:SupportedFileTypes>
            <uap:SupportsAnyFileType/>
        </uap:SupportedFileTypes>
    </uap:FileOpenPicker>
</uap:Extension>

Hello,
Thanks for your feedback. This is required in order to allow customers to open any kind of file in the app using this kind of button that you find at multiple places in the app. Not sure if I can workaround that.

Hello,
Thanks for your feedback. This is required in order to allow customers to open any kind of file in the app using this kind of button that you find at multiple places in the app. Not sure if I can workaround that.

For that, you can just add "*" as a file type filter.

@veler I believe you are confusing the FileOpenPicker API with the Windows extension. The FileOpenPicker API that you are using throughout the app allows users to pick any file because you have correctly set FileOpenPicker.FileTypeFilter.Add("*").
Totally unrelated, the Windows extension exists so when users open a file picker from another app, they can select an app as if it were a folder and the app provides a file. Declaring <uap:SupportsAnyFileType /> is saying that DevToys should show up as a picker for every type of file in other UWP apps. But DevToys is not a picker (and so it should not declare that it is) and does not even implement the extension despite the declaration, so it just opens as a dead splash screen for every file type.
#747 should be merged. Users will still be able to open any file in DevToys, and they won’t see a broken DevToys entry cluttering other file pickers.
As you can see, any kind of file can still be opened in DevToys without that declaration.


providers  aliyun sms test send error

As shown in the above figure
select providers aliyun sms test send code  response  status error
but there is no other error prompt
there are  check Client ID Client secret and Template code  all right
please help me

Fixed by: https://github.com/casdoor/go-sms-sender/commit/f6dc61ae9e4b46ff46368868114cb705366f1115 and https://github.com/casbin/casdoor/commit/5521962e0c96e9a6e4266f5384531eda5a1b33c9

think you


How can I compute module completion ratios given a set of KEGG orthologs?

Hi Carlos,
First off, thank you so much for putting in all of the work to develop this tool.  I have been looking for something similar to this for years and I finally need to publish some papers that rely on this methodology.  I have my data in the following format in Python dictionaries:
organism_to_orthologs = {
"Species_A": {"K00855","K01601","K01602","K00927","K05298","K00150","K00134"},
...
}

keggmodule_to_definition = {
"M00357": "K00855 (K01601-K01602) K00927 (K05298,K00150,K00134) (K01623,K01624) (K03841,K02446,K11532,K01086) K00615 (K01623,K01624) (K01100,K11532,K01086) K00615 (K01807,K01808)"
...
}

Is there any way I can use any of your existing package or scripts to accomplish the following function:
def module_completion_ratio(definition:str, orthology_set:set):
   """
   definition: the KEGG module definition
   orthology_set: a set of KEGG orthologs for a particular grouping
  """
   # So much empty...
    mcr = None
    return mcr

Of course, anything I use from your package will be cited and any help will be acknowledged.
Any help would be greatly appreciated.
Thank you,
-Josh

Hi Josh,
Let me ask you a couple of questions to see if I understand correctly.

Are you interested in a particular subset of modules?
Do you need to access your organism_to_orthologs sirectly from the dictionary?
If you can export your organism_to_orthologs to an individual file per organism with a KO identifier per line, you could directly use the ko_mapper.py script within MicrobeAnnotator. It will assume each file is a organism and calculate the module completeness for all modules and report their completion.
If you need to access them directly from the dictionaries, what I would do is take the set of KO identifiers for each key (organism) and pass them directly to the functions called by global_mapper() inside ko_mapper.py (lines 459-471). You would need to slightly modify the functions because they expect a file and you would be passing directly the set.
I would recommend the first one because it is easier. However, if you need help with the second option let me know and I can include some changes in the code to accomodate for that.
Thanks for using MicrobeAnnotator!

Carlos

Hi Carlos,
I appreciate you getting back to me on this!

Are you interested in a particular subset of modules?
Not necessarily.  Our institute uses an older version of KEGG for some of the pipelines and I realized that many of the KEGG orthologs and modules were discontinued.  Last week I reannotated using the newest database from KEGG's KOFAMSCAN.  To get the modules associated with each ortholog, I wrote the following function which returns a  set modules associated with each ortholog (not very well documented, apologies):

import re
from urllib.error import HTTPError
from Bio.KEGG.REST import kegg_get

def get_module_from_ortholog(id_ko):
    try:
        text = kegg_get(f"ko:{id_ko}").read()
        module_lines = list(filter(lambda x:x.startswith("MODULE"), text.split("\n")))
        modules = set()
        for x in module_lines:
            match = re.search("M\d{5}", x)
            if match is not None:
                id_module = match.group()
                modules.add(id_module)
            else:
                print(x, file=sys.stderr)
        return modules
    except HTTPError:
        print(id_ko, file=sys.stderr)
        return None

Upon doing so, I checked the overlap of orthologs between your databases:
modules_associated_with_orthologs = {'M00001', 'M00003', 'M00004', 'M00005', 'M00008', 'M00009', 'M00012', 'M00013', 'M00014', 'M00015', 'M00016', 'M00017', 'M00018', 'M00019', 'M00020', 'M00021', 'M00022', 'M00023', 'M00024', 'M00025', 'M00026', 'M00027', 'M00028', 'M00029', 'M00030', 'M00033', 'M00034', 'M00035', 'M00036', 'M00038', 'M00039', 'M00044', 'M00045', 'M00046', 'M00047', 'M00048', 'M00049', 'M00050', 'M00051', 'M00052', 'M00053', 'M00055', 'M00059', 'M00060', 'M00061', 'M00063', 'M00064', 'M00066', 'M00075', 'M00076', 'M00078', 'M00079', 'M00081', 'M00082', 'M00083', 'M00086', 'M00087', 'M00088', 'M00089', 'M00091', 'M00093', 'M00095', 'M00096', 'M00097', 'M00098', 'M00099', 'M00114', 'M00115', 'M00116', 'M00117', 'M00118', 'M00119', 'M00120', 'M00121', 'M00122', 'M00123', 'M00124', 'M00125', 'M00126', 'M00127', 'M00129', 'M00131', 'M00133', 'M00134', 'M00135', 'M00136', 'M00140', 'M00144', 'M00151', 'M00153', 'M00154', 'M00155', 'M00156', 'M00157', 'M00159', 'M00165', 'M00168', 'M00169', 'M00173', 'M00175', 'M00176', 'M00307', 'M00345', 'M00346', 'M00356', 'M00357', 'M00358', 'M00364', 'M00373', 'M00374', 'M00375', 'M00377', 'M00417', 'M00432', 'M00525', 'M00526', 'M00527', 'M00528', 'M00529', 'M00530', 'M00532', 'M00533', 'M00540', 'M00545', 'M00546', 'M00548', 'M00549', 'M00550', 'M00552', 'M00554', 'M00555', 'M00564', 'M00565', 'M00567', 'M00569', 'M00570', 'M00572', 'M00575', 'M00577', 'M00579', 'M00596', 'M00609', 'M00615', 'M00616', 'M00627', 'M00631', 'M00632', 'M00642', 'M00651', 'M00652', 'M00698', 'M00705', 'M00714', 'M00718', 'M00725', 'M00726', 'M00740', 'M00769', 'M00778', 'M00793', 'M00824', 'M00835', 'M00842', 'M00846', 'M00847', 'M00848', 'M00849', 'M00850', 'M00855', 'M00867', 'M00872', 'M00875', 'M00876', 'M00878', 'M00880', 'M00881', 'M00883', 'M00892', 'M00897', 'M00898', 'M00899', 'M00903', 'M00909', 'M00911', 'M00916', 'M00922', 'M00923', 'M00924', 'M00925', 'M00926', 'M00930', 'M00931', 'M00936'}

modules_associated_with_orthologs - (set(regular_modules) | set(bifurcation_modules) | set(structural_modules))

Those "missing" modules were the following:
{'M00615','M00616','M00881','M00883','M00892','M00897','M00898','M00899','M00903','M00909','M00911','M00916','M00922','M00923','M00924','M00925','M00926','M00930','M00931','M00936'}

To answer your question, I'm not necessarily interested in particular modules mostly which modules were represented by a particular set of orthologs and how complete those modules were considering all of the orthologs in the grouping (e.g., a metagenome assembled genome [MAG]).  One tricky thing I've realized about KEGG is that its database is constantly changing adding and removing orthologs and modules.
My initial interest was to parse the actual KEGG DEFINITION string because of this variability between versions but upon finding your tool, it seems an unnecessary extra step on my end since you've already gone through the work of doing that.  That said, adding a definition parser function to your package would be pretty useful for the field in general because, other than you, I don't know of anyone or any package that actually implements this correctly!

Do you need to access your organism_to_orthologs sirectly from the dictionary?

It's always nice to avoid command line but I can absolutely format the files so they can be directly used!  How should the files be formatted? Is there a header?

If you can export your organism_to_orthologs to an individual file per organism with a KO identifier per line, you could directly use the ko_mapper.py script within MicrobeAnnotator. It will assume each file is a organism and calculate the module completeness for all modules and report their completion.

This is great!  Honestly, the only other tool I know that does this was MAPLE and that has been discontinued AFAIK.  I'm sure once your tool is published it will be very popular.  I will definitely implement it in a few institution-wide pipelines at my institute that other labs will use (we do a lot of metagenomics).

If you need to access them directly from the dictionaries, what I would do is take the set of KO identifiers for each key (organism) and pass them directly to the functions called by global_mapper() inside ko_mapper.py (lines 459-471). You would need to slightly modify the functions because they expect a file and you would be passing directly the set.

I'll probably give this a shot first and, if I'm successful, I'll post the code here so you can have it in case you ever need it or it would be useful for anyone else.

I would recommend the first one because it is easier. However, if you need help with the second option let me know and I can include some changes in the code to accomodate for that.

Will do!  Again, thanks for your help in all of this.  As I mentioned, this is such a key part of metagenomics and there are so few resources that have this capability.

This looks like it did the trick:
"""---1.0 Define Functions---"""

def ko_match(string):
    """ Looks if string has the form K[0-9]{5}

    Arguments:
        string {string} -- String to test

    Returns:
        [bool] -- String has form or not
    """
    if re.search(r'^K[0-9]{5}$', string) is not None:
        return 1
    else:
        return 0

def split_compound(string, comp_type):
    """[summary]

    Arguments:
        string {[type]} -- [description]
        comp_type {[type]} -- [description]

    Returns:
        [type] -- [description]
    """
    if comp_type == 'compound':
        return re.split('[-+]', string)
    elif comp_type == 'and_comp':
        return string.split('_')
    elif comp_type == 'or_comp':
        return string.split(',')

def process_compounds(string, comp_type, genome_annotation):
    string = split_compound(string, comp_type)
    proteins_required = len(string)
    proteins_present = 0
    for option in string:
        if option == '':
            proteins_required -= 1
        elif '+' in option or '-' in option:
            compound = split_compound(option, 'compound')
            proteins_in_compound = len(compound)
            present_in_compound = 0
            for sub_option in compound:
                if ko_match(sub_option) > 0 and sub_option in genome_annotation:
                    present_in_compound += 1
            proteins_present += present_in_compound/proteins_in_compound
        else:
            if ko_match(option) > 0 and option in genome_annotation:
                proteins_present += 1
    return proteins_present, proteins_required

def import_module_dict(dictionary_location):
    with open(dictionary_location,"rb") as pickle_in:
        dictionary = pickle.load(pickle_in)
    return dictionary

def regular_module_mapper(module_dictionary, genome_annotation_file):
    if not isinstance(genome_annotation_file, str):
        assert hasattr(genome_annotation_file, "__iter__"), "If `genome_annotation_file` is not a filepath then it must be an iterable of orthologs"
        genome_annotation = set(genome_annotation_file)

    else:
        assert isinstance(genome_annotation_file, str), "If `genome_annotation_file` is not an iterable of orthologs then it must be a string filepath"
        genome_annotation = annotation_file_parser(genome_annotation_file)

    regular_module_completenes = []
    for module, final_steps in module_dictionary.items():
        complete_steps = 0
        total_module_steps = len(final_steps)
        for proteins in final_steps.values():
            score_for_step = 0
            steps_per_option = 100
            match = False
            for option in proteins:
                match = False
                # Search for single gene option
                if ko_match(option) > 0:
                    if option in genome_annotation:
                        score_for_step = 1
                        match = True
                    if match == True:
                        steps_per_option = 1
                    elif 1 < steps_per_option:
                        steps_per_option = 1
                elif '%' in option:
                    option = option.replace(')', '')
                    option = option.split('-%')
                    mandatory = split_compound(option[0], 'compound')
                    proteins_required = len(mandatory) + 1
                    proteins_present = 0
                    for prot in mandatory:
                        if ko_match(prot) > 0 and prot in genome_annotation:
                            proteins_present += 1
                    for prot in option[1].split(','):
                        if ko_match(prot) > 0 and prot in genome_annotation:
                            proteins_present += 1
                            break
                    if proteins_present/proteins_required > score_for_step:
                        score_for_step = proteins_present/proteins_required
                        match = True
                    if match == True:
                        steps_per_option = 1
                    elif 1 < steps_per_option:
                        steps_per_option = 1
                elif '_' in option and ',' in option:
                    option = sorted(split_compound(option, 'and_comp'), key=len)
                    highest_score = 0
                    for element in option:
                        if ko_match(element) > 0 and element in genome_annotation:
                            highest_score += 1
                        elif ',' in element:
                            element = sorted(element.split(","), key=len)
                            for sub_element in element:
                                if ko_match(sub_element) > 0 and sub_element in genome_annotation:
                                    highest_score += 1
                                    break
                                elif '+' in sub_element:
                                    proteins_present, proteins_required = process_compounds(sub_element,
                                    'compound', genome_annotation)
                                    highest_score += proteins_present/proteins_required
                    if highest_score > score_for_step:
                        score_for_step = highest_score
                        match = True
                    if match == True:
                        steps_per_option = len(option)
                    elif len(option) < steps_per_option:
                        steps_per_option = len(option)
                elif len(option.split(",")) > 1:
                    match = False
                    option = sorted(option.split(","), key=len)
                    highest_score = 0
                    steps_to_add = 0
                    for sub_option in option:
                        if ko_match(sub_option) > 0 and sub_option in genome_annotation:
                            if 1 > highest_score:
                                highest_score = 1
                                steps_to_add = 1
                        elif '+' in sub_option or '-' in sub_option:
                            proteins_present, proteins_required = process_compounds(sub_option, 'compound', genome_annotation)
                            if proteins_present/proteins_required > highest_score:
                                highest_score = proteins_present/proteins_required
                                steps_to_add = 1
                    if highest_score > score_for_step:
                        score_for_step = highest_score
                        match = True
                    if match == True:
                        steps_per_option = steps_to_add
                    elif steps_to_add< steps_per_option:
                        steps_per_option = steps_to_add
                elif '_' in option:
                    match = False
                    proteins_present, proteins_required = process_compounds(option, 'and_comp', genome_annotation)
                    if proteins_present/proteins_required > score_for_step:
                        score_for_step = proteins_present
                        match = True
                    if match == True:
                        steps_per_option = proteins_required
                    elif proteins_required < steps_per_option:
                        steps_per_option = proteins_required
                elif "+" in option or "-" in option:
                    match = False
                    highest_score = 0
                    proteins_present, proteins_required = process_compounds(option, 'compound', genome_annotation)
                    if proteins_present/proteins_required > score_for_step:
                        score_for_step = proteins_present/proteins_required
                        match = True
                    if match == True:
                        steps_per_option = 1
                    elif proteins_required < steps_per_option:
                        steps_per_option = 1
                else:
                    print("Unreccognized module {}. Check your database.".format(option))
            complete_steps += score_for_step
            if steps_per_option > 50:
                steps_per_option = 1
            if steps_per_option > 1:
                total_module_steps += steps_per_option - 1
        regular_module_completenes.append((module, round((complete_steps/total_module_steps)*100, 2)))
    return regular_module_completenes

def bifurcating_module_mapper(module_dictionary, genome_annotation_file):
    if not isinstance(genome_annotation_file, str):
        assert hasattr(genome_annotation_file, "__iter__"), "If `genome_annotation_file` is not a filepath then it must be an iterable of orthologs"
        genome_annotation = set(genome_annotation_file)

    else:
        assert isinstance(genome_annotation_file, str), "If `genome_annotation_file` is not an iterable of orthologs then it must be a string filepath"
        genome_annotation = annotation_file_parser(genome_annotation_file)

    bifurcating_module_completenes = []
    for module, versions in module_dictionary.items():
        module_highest = 0
        for version, total_steps in versions.items():
            completed_steps = 0
            total_version_steps = len(total_steps)
            for proteins in total_steps.values():
                score_for_step = 0
                steps_per_option = 100
                match = False
                if isinstance(proteins, (list)):
                    protein = sorted(proteins, key=len)
                    for option in protein:
                        match = False
                        if ko_match(option) > 0:
                            if option in genome_annotation:
                                score_for_step = 1
                                match = True
                            if match == True:
                                steps_per_option = 1
                            elif 1 < steps_per_option:
                                steps_per_option = 1
                        elif '_' in option and ',' in option:
                            option = sorted(split_compound(option, 'and_comp'), key=len)
                            highest_score = 0
                            for element in option:
                                if ko_match(element) > 0 and element in genome_annotation:
                                    highest_score += 1
                                elif ',' in element:
                                    element = sorted(element.split(","), key=len)
                                    score_sub_option = 0
                                    for sub_element in element:
                                        if ko_match(sub_element) > 0 and sub_element in genome_annotation:
                                            highest_score += 1
                                            break
                                        elif '+' in sub_element:
                                            proteins_present, proteins_required = process_compounds(sub_element,
                                            'compound', genome_annotation)
                                            highest_score += proteins_present/proteins_required
                            if highest_score > score_for_step:
                                score_for_step = highest_score
                                match = True
                            if match == True:
                                steps_per_option = len(option)
                        elif '_' in option:
                            match = False
                            proteins_present, proteins_required = process_compounds(option, 'and_comp', genome_annotation)
                            if proteins_present/proteins_required > score_for_step:
                                score_for_step = proteins_present
                                match = True
                            if match == True:
                                steps_per_option = proteins_required
                            elif proteins_required < steps_per_option:
                                steps_per_option = proteins_required
                        elif '+' in option or '-' in option:
                            match = False
                            highest_score = 0
                            proteins_present, proteins_required = process_compounds(option, 'compound', genome_annotation)
                            if proteins_present/proteins_required > score_for_step:
                                score_for_step = proteins_present/proteins_required
                                match = True
                            if match == True:
                                steps_per_option = 1
                            elif proteins_required < steps_per_option:
                                steps_per_option = 1
                elif ko_match(proteins) > 0:
                    match = False
                    if proteins in genome_annotation:
                        score_for_step = 1
                        match = True
                    if match == True:
                        steps_per_option = 1
                    elif 1 < steps_per_option:
                        steps_per_option = 1
                elif ',' in proteins:
                    options = split_compound(proteins, 'or_comp')
                    for option in options:
                        if ko_match(option) > 0 and option in genome_annotation:
                            score_for_step = 1
                            match = True
                        if match == True:
                            steps_per_option = 1
                        elif 1 < steps_per_option:
                            steps_per_option = 1
                elif '+' in proteins or '-' in proteins:
                    match = False
                    highest_score = 0
                    proteins_present, proteins_required = process_compounds(proteins, 'compound', genome_annotation)
                    if proteins_present/proteins_required > score_for_step:
                        score_for_step = proteins_present/proteins_required
                        match = True
                    if match == True:
                        steps_per_option = 1
                    elif proteins_required < steps_per_option:
                        steps_per_option = 1
                else:
                    print("Unreccognized module {}. Check your database.".format(proteins))
                completed_steps += score_for_step
                if steps_per_option > 50:
                    steps_per_option = 1
                if steps_per_option > 1:
                    total_version_steps += steps_per_option - 1
            if completed_steps/total_version_steps > module_highest:
                module_highest = completed_steps/total_version_steps
        bifurcating_module_completenes.append((module, round(module_highest*100, 2)))
    return bifurcating_module_completenes

def structural_module_mapper(module_dictionary, genome_annotation_file):
    if not isinstance(genome_annotation_file, str):
        assert hasattr(genome_annotation_file, "__iter__"), "If `genome_annotation_file` is not a filepath then it must be an iterable of orthologs"
        genome_annotation = set(genome_annotation_file)

    else:
        assert isinstance(genome_annotation_file, str), "If `genome_annotation_file` is not an iterable of orthologs then it must be a string filepath"
        genome_annotation = annotation_file_parser(genome_annotation_file)

    structural_module_completenes = []
    for module, components in module_dictionary.items():
        score_for_components = 0
        module_proteins_present = 0
        module_proteins_required = 0
        for proteins in components:
            if isinstance(proteins, (list)):
                highest_score = 0
                proteins_to_add = 0
                steps_to_add = 100
                for option in proteins:
                    if '_' in option and ',' in option:
                        option = sorted(split_compound(option, 'and_comp'), key=len)
                        proteins_present_option = 0
                        proteins_required_option = 0
                        for element in option:
                            if ko_match(element) > 0:
                                if element in genome_annotation:
                                    proteins_present_option += 1
                                    proteins_required_option += 1
                                else:
                                    proteins_required_option += 1
                            elif ',' in element:
                                element = sorted(element.split(","), key=len)
                                score_sub_element = 0
                                proteins_present_sub_element = 0
                                proteins_required_sub_element = 0
                                for sub_element in element:
                                    if ko_match(sub_element) > 0:
                                        if sub_element in genome_annotation:
                                            score_sub_element = 1
                                            proteins_present_sub_element += 1
                                            proteins_required_sub_element += 1
                                        elif 1 < proteins_required_sub_element and score_sub_element == 0:
                                            proteins_required_sub_element = 1
                                    elif '+' in sub_element or '-' in sub_element:
                                        proteins_present, proteins_required = process_compounds(sub_element,
                                        'compound', genome_annotation)
                                        if proteins_present/proteins_required > score_sub_element:
                                            score_sub_element = proteins_present/proteins_required
                                            proteins_present_sub_element = proteins_present
                                            proteins_required_sub_element = proteins_required
                                        elif proteins_required < proteins_required_sub_element and score_sub_element == 0:
                                            proteins_required_sub_element = proteins_required
                                proteins_present_option += proteins_present_sub_element
                                proteins_required_option += proteins_required_sub_element
                        if proteins_present_option/proteins_required_option > highest_score:
                            highest_score = proteins_present_option/proteins_required_option
                            proteins_to_add = proteins_present_option
                            steps_to_add = proteins_required_option
                        elif proteins_required_option < steps_to_add and highest_score == 0:
                            steps_to_add = proteins_required_option
                    elif '+' in option or '-' in option:
                        proteins_present, proteins_required = process_compounds(option, 'compound', genome_annotation)
                        if proteins_present/proteins_required > highest_score:
                            highest_score = proteins_present/proteins_required
                            steps_to_add = proteins_required
                            proteins_to_add = proteins_present
                        elif proteins_required < steps_to_add and highest_score == 0:
                            steps_to_add = proteins_required
                module_proteins_present += proteins_to_add
                module_proteins_required += steps_to_add
            elif ko_match(proteins) > 0:
                if proteins in genome_annotation:
                        module_proteins_present += 1
                        module_proteins_required += 1
                else:
                    module_proteins_required += 1
            elif ',' in proteins:
                proteins = sorted(proteins.split(","), key=len)
                score = 0
                proteins_present_option = 0
                proteins_required_option = 100
                for element in proteins:
                    if ko_match(element) > 0:
                        if element in genome_annotation:
                            proteins_required_option = 1
                            proteins_present_option = 1
                            break
                        elif 1 < proteins_required_option and score == 0:
                            proteins_required_option = 1
                    elif '+' in element or '-' in element:
                        proteins_present, proteins_required = process_compounds(element, 'compound', genome_annotation)
                        if proteins_present/proteins_required > score:
                            score = proteins_present/proteins_required
                            proteins_present_option = proteins_present
                            proteins_required_option = proteins_required
                        elif proteins_required < proteins_required_option and score == 0:
                            proteins_required_option = proteins_required
                module_proteins_present += proteins_present_option
                module_proteins_required += proteins_required_option
            elif '+' in proteins or '-' in proteins:
                proteins_present, proteins_required = process_compounds(proteins, 'compound', genome_annotation)
                module_proteins_present += proteins_present
                module_proteins_required += proteins_required
            else:
                print("Unreccognized module {}. Check your database.".format(proteins))
        score_for_components = module_proteins_present/module_proteins_required
        structural_module_completenes.append((module, round(score_for_components*100, 2)))
    return structural_module_completenes

def global_mapper_from_dict(regular_modules, bifurcating_modules, structural_modules, grouping_to_orthologs):
    print("Mapping entries... ", end="")
    full_metabolic_completeness = {}

    for name, ortholog_set in grouping_to_orthologs.items():
#         genome_name = str(Path(file).name)
        regular_completeness = OrderedDict(regular_module_mapper(regular_modules, ortholog_set))
        bifurcating_completeness = OrderedDict(bifurcating_module_mapper(bifurcating_modules, ortholog_set))
        structural_completeness = OrderedDict(structural_module_mapper(structural_modules, ortholog_set))
        final_completeness = pd.concat([pd.Series(regular_completeness), pd.Series(bifurcating_completeness), pd.Series(structural_completeness)])
        full_metabolic_completeness[name] = final_completeness
    print("Done!\n")
    return pd.DataFrame(full_metabolic_completeness).T

And then I used sitepackages for the data directory:
# Import module data
import site
script_dir = site.getsitepackages()[0] #script_path.parent
data_folder = Path(script_dir) / "data"
# Import all modules from dictionaries
regular_modules = import_module_dict(data_folder / "01.KEGG_Regular_Module_Information.pickle")
bifurcation_modules = import_module_dict(data_folder / "02.KEGG_Bifurcating_Module_Information.pickle")
structural_modules = import_module_dict(data_folder / "03.KEGG_Structural_Module_Information.pickle")

Importing my pickled dictionary from another environment following the format: {"taxa_A":{"KEGG_ORTHOLOG_1", "KEGG_ORTHOLOG_2"..., "KEGG_ORTHOLOG_N"}
import pickle
with open("../../Caries/metaT/Data/annotations/caries.gt300.orfs.f_661740.kofamscan.significant.taxonomy.pkl", "rb") as f:
    organism_to_orthologs = pickle.load(f)
output = global_mapper_from_dict(regular_modules, bifurcation_modules, structural_modules, organism_to_orthologs)

Note the above code is just a quick hack but it appears to get the job done with the existing code and maintaining previous usage as well (i.e. it should work with files and ortholog sets)

This is awesome! I will try to implement this as well so it is easier to use with other pipelines directly. I am glad it worked out for you. I know these KEGG modules change a lot so I will probably need to update the modules I parsed.

Thanks!  I was trying to update the database with your 00.KEGG_Data_Scrapper.py but I didn't know how you made the 01.Bifurcating_List.txt and 02.Structural_List.txt  files.
Did you pull those from a database or manually categorize them?  Luckily your tool was available because I hadn't realized how complicated the modules are with the bifurcations and nested modules.
What category do "signature" modules fall under?
Would it be possible to add a small line file whenever a new database is created that says the date accessed? For example:
[Command] cat 00.Version.txt
[OUTPUT]
Version: XYZ
Accessed: 2021.03.22
URL: ftp/http://kegg..

This would be really useful for cross-referencing between different tools that use some version of KEGG.  For example, if I was using my KEGG mapping from 2016 it probably wouldn't have worked because so many of the orthologs/modules were deprecated.
Also, your webdriver and bs4 code is really clean.  I didn't know they could be used together like that!  Learned quite a bit when reading through your code.

Hi Josh!
Actually I think those bifurcating and structural were done manually because of the nested modules and bifurcations. I realized that most of the attempts I made to automate those broke others so I decided to do them manually for now. I think many of the signature ones fall in the regular modules because they are just list of KO identifiers so they were easy to parse with the regular ones. I will definitely add the version for the latest update.
Thanks for the complements! It was my first time using those libraries so I am glad what I did was somewhat decent!
Btw, if you want we can collaborate on the next release of the tool. I am thinking about including some tool changes to improve the speed and convenience of the tool.

Yes, I'm definitely interested in collaborating.  I've been doing some of this in random scripts here and there but it would be good to have it a bit more formalized.  Are the limiting factors to automating the database update getting the modules categorized?  If so, I'm wondering if we could use KEGG definition parser and create a networkx graph from each one to check if they are bifurcated.  Are the structural modules parsed differently than the regular modules?  If you could autodetect it from a definition, that could make automating the whole data download much easier.

I was about to ask a couple of question about ko_mapper.py. I've been using this library lately (we already cited it in an accepted paper ) and I happened to use the *Information.pickle files this package creates and used them to do a couple of things, but I didn't understand how they were created. An up vote for the options mentioned here.

@matrs I believe this is the script used https://github.com/cruizperez/MicrobeAnnotator/blob/master/data/01.KEGG_DB/00.KEGG_Data_Scrapper.py (@cruizperez Please correct me if I'm wrong).  It looks like the limiting factor to automating the database update is that the following are user-supplied:
https://github.com/cruizperez/MicrobeAnnotator/blob/master/data/01.KEGG_DB/00.Module_Names.txt
https://github.com/cruizperez/MicrobeAnnotator/blob/master/data/01.KEGG_DB/01.Bifurcating_List.txt
https://github.com/cruizperez/MicrobeAnnotator/blob/master/data/01.KEGG_DB/02.Structural_List.txt
The first can easily be acquired from the most current KEGG with the following:
from Bio.KEGG.REST import kegg_get

# Probably a better way to do this but I'm not go with regex
for line in kegg_get("md"): #md is the code for module
    line = line.strip()
    name = line.split(" ")[0]
    id = name[3:] # I think this is right.  You need to remove the "md:" prefix
    description = " ".join(line.split(" ")[1:])
    print(id, description)

The latter 2 are manually curated AFAIK.

hey @jolespin , thanks for your response. I do use Biopython and I already had some dictionaries with modules and KOs descriptions for example. I was curious about the manually curated ones (this thread informed me about those) and also wanted to use ko_mapper.py with other tools.
For example I did use 01.KEGG_Regular_Module_Information.pickle to get the list of KOs for each module, information that  I could't obtain easily with Biopytohn (of course you can always parse).

Hi @matrs and @jolespin,
Indeed the data scrapper was the script used to get most of the modules except for those that I manually supplied. Those were a little bit more cumbersome to parse so I decided to do them manually for the time being. This is on the list for improvements in future releases.

Just wanted to congratulate you on your recent pub!
https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-020-03940-5
This will make it much easier to cite now.

Thanks @jolespin!
I added a couple of changes to the new version, but I still need to improve on the retrieval of KO information.

Do you have any ideas on how that would even work? I looked up a few methods but to no avail. The bifurcated modules are tricky.

I know! I have been trying several things but it is not straightforward. Whats more weird is that some of the non-bifurcating, e.g., structural modules, appear to have some parenthesis missing in their definition, and this prevents me from writing a generalizable method to parse them. Still looking into it though. :/

Oh man this is bringing back some traumatizing memories of when I tried to make a generalizable parser a few months back before I found this tool.
Have you thought about reaching out the KEGG team about this?  I would hope at least one of their team members have made a reliable parser for these definitions.  Since MAPLE has been discontinued, your tool AFAIK is literally the only way to calculate module completion ratios. That would probably be really useful for them.


Add github actions to run cargo tests on all the commits.

Make sure to run cargo fmt --checked too.


compatability with next pytorch 1.12.1?

I get issues when I want to upgrade :( when can we upgrade torchemeta? :D :)

(meta_learning) ❯ pip install --upgrade torch
Requirement already satisfied: torch in /Users/brandomiranda/opt/anaconda3/envs/meta_learning/lib/python3.9/site-packages (1.9.1)
Collecting torch
  Using cached torch-1.12.1-cp39-none-macosx_10_9_x86_64.whl (133.8 MB)
Requirement already satisfied: typing-extensions in /Users/brandomiranda/opt/anaconda3/envs/meta_learning/lib/python3.9/site-packages (from torch) (4.3.0)
Installing collected packages: torch
  Attempting uninstall: torch
    Found existing installation: torch 1.9.1
    Uninstalling torch-1.9.1:
      Successfully uninstalled torch-1.9.1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
torchvision 0.10.1 requires torch==1.9.1, but you have torch 1.12.1 which is incompatible.
torchtext 0.10.1 requires torch==1.9.1, but you have torch 1.12.1 which is incompatible.
torchmeta 1.8.0 requires torch<1.10.0,>=1.4.0, but you have torch 1.12.1 which is incompatible.

any news on this front?


Fine grained service tokens

Currently, service tokens generated by prisma token are a JWT signed with the secret specified in prisma.yml. They grant full read/write access to the Prisma service, via the admin role: https://www.prismagraphql.com/docs/reference/prisma-api/concepts-utee3eiquo#authentication
This concept can be expanded to more roles and actions, here are a couple of ideas:

read vs. write
Prisma API vs. Deploy/Cluster API
logs

@marktani Do they have an expire date?

I would love to see some different secrets for read/write.

It would also be cool to separate the jet payload data for prisma in a specific key, so that a single token can be shared between prisma and other kind of apps.
Something like this:
{
  "data": {
        "prisma": {
            "service": "myservice@prod",
            "roles": [
                "admin"
            ]
        }
  },
  "iat":<PHONE_NUMBER>,
  "exp":<PHONE_NUMBER>
}

Is there any workaround for now to implement this ?


[occm] add annotation for real loadbalancer address cherry pick to 1.25

Cherry pick of #2097 on release-1.25.
#2097: add annotation for real address
For details on the cherry pick process, see the cherry pick requests page.
NONE

cc @jichenjc

/lgtm
/approve


Henry Ecker: Watch speedylinks.click

Henry Ecker requests the watch of the watch_keyword speedylinks\.click. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

speedylinks\.click has been seen in 1 true positive, 0 false positives, and 0 NAAs.

Rejected by Makyen in Charcoal HQ. Reason: 'Unfortunately, I didn't see the PR prior to watching it myself.'


Update bot.py

Changelog for User Agent Implementation
Added:
A list of user agents to mimic different browsers and devices.
This addition is aimed at enhancing the bot's ability to interact with websites in a manner that appears more human-like and less detectable as automated traffic.
Random selection of a user agent from the list for each instance of the bot. This variability helps to reduce the likelihood of being blocked or flagged as a bot by websites that monitor for repetitive access patterns. Implementation of the chosen user agent into the Selenium WebDriver options. By setting the --user-agent option, each session of the WebDriver will present itself with the randomly selected user agent, thus adopting the identity of different browsers/devices.
Purpose:
The primary purpose of implementing a rotating user agent feature in the bot is to enhance its stealth and efficiency in web scraping or automated interactions with web pages. Websites often employ measures to detect and block bots, including analyzing the consistency of the user agent string. By rotating through a list of realistic user agent strings, the bot mimics the behavior of different users from various devices and browsers, making it harder for websites to detect and block it based on the user agent string alone.
This approach can significantly improve the bot's ability to perform tasks such as data collection, automated testing, or any other automated interaction with web services without being impeded by anti-bot measures.
It's a crucial feature for ensuring the longevity and reliability of the bot's operations across diverse web environments.

Hello! Sorry for the super late reply.
I see this as a great feature! However I don't think that putting all the user agents in the script file is the best approach. Maybe put them in a txt file, each user agent on a line, and picking a random one on start? Easier code management and better user agent view and editing process. What do you think?

It's okay!
You are absolutely right, that it would make it a lot easier to manage and to add/delete user agents that way!

Perfect! Waiting for your commits.


ScheduleDelay does not work

When using delivery options the schedule delay it never waits to send the actual message, if it's 3 seconds or 24 hours, the receiver gets the message directly.
 var messages = new OutgoingMessages
        {
            new SetLeds { ReaderId = reader.Id, LedState = Led.Green }.ToTopic(reader.Id),
            new SetLeds { ReaderId = reader.Id, LedState = Led.Off }.ToTopic(reader.Id, new DeliveryOptions
            {
                ScheduleDelay = 1.Hours(),
            })
        };

Fixed by https://github.com/JasperFx/wolverine/commit/f7a440a89d031d5b39e389c9b10dbfd7bdcd89a9


make_flat script sets pragma solidity ^0.5.0 for Distribution_flat.sol

The reason is that the Distribution contract imports https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.3.0/contracts/ownership/Ownable.sol which contains pragma solidity ^0.5.0; instead of expected pragma solidity 0.5.10;.
We need to make solidity-flattener use the first pragma directive (the first line in the Distribution contract for this case).

@varasev @maxaleks I made a fix in solidity-flattener to correctly identify the first pragma occurrence. Please let me know if it works for you. If so, I will merge it to master.

@vbaranov now it's OK, thanks!

Let's wait for https://github.com/poanetwork/solidity-flattener/pull/32 to be merged before closing this issue.


Task denoising method dca

Submission type

[ ] This submission adds a new dataset
[x ] This submission adds a new method
[ ] This submission adds a new metric
[ ] This submission adds a new task
[ ] This submission adds a new Docker image
[ ] This submission fixes a bug (link to related issue: )
[ ] This submission adds a new feature not listed above

Testing

[x] This submission was written on a forked copy of SingleCellOpenProblems
[ ] GitHub Actions "Run Benchmark" tests are passing on this base branch of this pull request (include link to passed test: )
[x] If this pull request is not ready for review (including passing the "Run Benchmark" tests), I will open this PR as a draft (click on the down arrow next to the "Create Pull Request" button)

Submission guidelines

[x] This submission follows the guidelines in our Contributing document
[x] I have checked to ensure there aren't other open Pull Requests for the same update/change

PR review checklist
This PR will be evaluated on the basis of the following checks:

[x] The task addresses a valid open problem in single-cell analysis
[x] The latest version of master is merged and tested
[x] The methods/metrics are imported to __init__.py and were tested in the pipeline
[x] Method and metric decorators are annotated with paper title, year, author, code version, and date
[] The README gives an outline of the methods, metrics and datasets in the folder
[] The README provides a satisfactory task explanation (for new tasks)
[] The sample test data is appropriate to test implementation of all methods and metrics (for new tasks)

Error here: https://github.com/wes-lewis/SingleCellOpenProblems/runs/6865569744?check_suite_focus=true#step:12:664 it appears the version of keras/tf in openproblems-python-extras is incompatible with dca. See https://github.com/theislab/dca/blob/master/setup.py#L11.
Best best is probably to create a new image called openproblems-python-tf2.4 that inherits from openproblems and installs
'numpy>=1.7', 'keras>=2.4,<2.6', 'tensorflow>=2.0,<2.5'

and dca.

Per https://tower.nf/orgs/openproblems-bio/workspaces/openproblems-bio/watch/68u4bpRaHtl7, it looks like you'll need to get clever and mask missing genes.
  Traceback (most recent call last):
    File "/usr/local/bin/openproblems-cli", line 33, in <module>
      sys.exit(load_entry_point('openproblems', 'console_scripts', 'openproblems-cli')())
    File "/usr/src/singlecellopenproblems/openproblems/api/main.py", line 45, in main
      output = _main(args)
    File "/usr/src/singlecellopenproblems/openproblems/api/main.py", line 38, in _main
      return SUBCOMMANDS[args.subcommand].main(args)
    File "/usr/src/singlecellopenproblems/openproblems/api/run.py", line 25, in main
      adata = run_method(adata, args.task, args.name, args.test)
    File "/usr/src/singlecellopenproblems/openproblems/api/run.py", line 17, in run_method
      adata = fun(adata, test=test)
    File "/usr/src/singlecellopenproblems/openproblems/tools/decorators.py", line 80, in apply_method
      return func(*args, **kwargs)
    File "/usr/src/singlecellopenproblems/openproblems/tasks/denoising/methods/dca.py", line 33, in dca
      return _dca(adata, test=test, epochs=epochs)
    File "/usr/src/singlecellopenproblems/openproblems/tasks/denoising/methods/dca.py", line 18, in _dca
      dca(adata2, threads=1)
    File "/usr/local/lib/python3.8/site-packages/dca/api.py", line 164, in dca
      assert nonzero_genes.all(), 'Please remove all-zero genes before using DCA.'
  AssertionError: Please remove all-zero genes before using DCA.

Suggested fix will be something like
gene_sums = np.asarray(adata.obsm["train"].sum(axis=0)).flatten()
is_missing = gene_sums == 0
adata.obsm["train"][:,is_missing] = 1
# run dca
...
adata.obsm["denoised"][:.is_missing] = 0

Per https://tower.nf/orgs/openproblems-bio/workspaces/openproblems-bio/watch/68u4bpRaHtl7, it looks like you'll need to get clever and mask missing genes.
  Traceback (most recent call last):
    File "/usr/local/bin/openproblems-cli", line 33, in <module>
      sys.exit(load_entry_point('openproblems', 'console_scripts', 'openproblems-cli')())
    File "/usr/src/singlecellopenproblems/openproblems/api/main.py", line 45, in main
      output = _main(args)
    File "/usr/src/singlecellopenproblems/openproblems/api/main.py", line 38, in _main
      return SUBCOMMANDS[args.subcommand].main(args)
    File "/usr/src/singlecellopenproblems/openproblems/api/run.py", line 25, in main
      adata = run_method(adata, args.task, args.name, args.test)
    File "/usr/src/singlecellopenproblems/openproblems/api/run.py", line 17, in run_method
      adata = fun(adata, test=test)
    File "/usr/src/singlecellopenproblems/openproblems/tools/decorators.py", line 80, in apply_method
      return func(*args, **kwargs)
    File "/usr/src/singlecellopenproblems/openproblems/tasks/denoising/methods/dca.py", line 33, in dca
      return _dca(adata, test=test, epochs=epochs)
    File "/usr/src/singlecellopenproblems/openproblems/tasks/denoising/methods/dca.py", line 18, in _dca
      dca(adata2, threads=1)
    File "/usr/local/lib/python3.8/site-packages/dca/api.py", line 164, in dca
      assert nonzero_genes.all(), 'Please remove all-zero genes before using DCA.'
  AssertionError: Please remove all-zero genes before using DCA.

Suggested fix will be something like
gene_sums = np.asarray(adata.obsm["train"].sum(axis=0)).flatten()
is_missing = gene_sums == 0
adata.obsm["train"][:,is_missing] = 1
# run dca
...
adata.obsm["denoised"][:.is_missing] = 0

It looks like "adata.obsm["train"][:,is_missing] = 1" would set genes (columns) that are all zero to an integer 1, whereas we might instead want to add a count to just a single random index within that column for minimal impact on the overall object.
It also seems like DCA performance would be effected by setting the missing genes to 1 instead of removing. It seems a more performant fix would be to remove those columns, track their indices, and then reinsert the indices to the object. This seems easy on numpy arrays, but might not work as smoothly with large or sparse objects

You're right, removing the columns might be better. Won't be a problem with sparse matrices so long as you convert to CSC first. You'll probably want to

If sparse (scipy.sparse.issparse), convert to CSC (.tocsc())
Subset the matrix (X[:,~is_missing])
Run DCA
Ensure the result is dense
Create a new numpy array of the right shape
Set the submatrix to the denoised values (X_new[:,is_missing] = X_denoised)
Store and return

Shouldn't we just remove the 0 genes in the data loader already?

Hmm yeah now you mention it, it seems like a pretty reasonable expectation that datasets input to this task not have zero genes.

Actually, since adata.obsm['train'] is sampled randomly from adata.X, it's possible by design that there might be zero genes. We either need to a) require that genes have sufficient counts that the likelihood of sampling zero is vanishingly low; or b) require that methods be able to handle zeros. I lean towards the latter. We could however create a helper function to do what I suggested above so that the workflow would be
X_train, missing_idx = utils.filter_zero_genes(adata.obsm["train"])
X_out = my_denoising_function(X_train)
return utils.unfilter_zero_genes(X_out, missing_idx)

Just getting back to this... I think it's actually okay if methods can't deal with 0 genes... this seems like a filtering issue and not a denoising issue practically. I would probably go with just filtering them out after train-test split rather than doing fancy things and not trying to denoise them. In the latter case you would get a good result for genes you didn't take into account at all. Also, I think we do the same 0 filtering in other tasks like label projection as well.

@wes-lewis once you resolve the open comments, this should be ready to merge. Congrats!

This is super exciting! Thank you so much Scott

Thank you for all your work on this!


Question: how to define completion rule for a --option FILE option?

Hello, how can I define a completion rule for an option which accepts a file. The examples show that one can define option flags under a command, and <file> keywords under a command, but can I do --option <file>?
Also you should enable GitHub Discussions so people can submit questions there, instead of cluttering up the Issues.

Isn't this what you are looking for?
README > Suggesting flag arguments
It would then be something like this:
yourcli*--option:
- <file>

which you can test like this:
$ completely test "yourcli anything else --option "


Adding FAQ section

FAQ section here can be created to address common queries related to ordering, delivery ,etc.
assign this issue to me under GSSOC 24

Please consider assigning me this opportunity as I am eager to contribute to this field.

i would like to fix this issue

FAQ session will provide the details about the food delivery and order related common quires. Would love to add FAQ part. Please assign me to this work

I'm interested in working on issue and believe I can contribute effectively. Could you please assign it to me?

Hi, I want to work on this issue. Please assign this to me.

i would like to work on this issue under gssoc 24

Please assign this task to me . I will add FAQ section in this food ordering platform website.

we can add FAQ section in the web page with some 3-4 question . Additionally, i can add a chatbox through which we can communicate with users. @khushi-joshi-05, please assign this task to me.

@YUG-1092005 are you still up for the issue!

@YUG-1092005 are you still up for the issue!

Yes, I am.

Hi Singh,
Please provide me with the actual text of this FAQ section if possible,
otherwise, I will use it accordingly.
On Mon, Jun 3, 2024 at 1:44 AM Sukhbir Singh @.***>
wrote:

Assigned #101
https://github.com/khushi-joshi-05/Food-ordering-website/issues/101 to
@Rahman-Ali https://github.com/Rahman-Ali.
—
Reply to this email directly, view it on GitHub
https://github.com/khushi-joshi-05/Food-ordering-website/issues/101#event-13012952643,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/BCFFHOFGOMWP2YNVQYSUG6LZFN74FAVCNFSM6AAAAABHRSJTBOVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJTGAYTEOJVGI3DIMY
.
You are receiving this because you were assigned.Message ID:
<khushi-joshi-05/Food-ordering-website/issue/101/issue_event/13012952643@
github.com>

Here , I can add many thing inside the FAQ section here I have mentioned some points  : -

How do I place an order?
To place an order, simply browse our menu, select the items you want, and add them to your cart. Once you’ve made your selections, proceed to checkout, enter your delivery details, and make the payment. You will receive a confirmation email with your order details.

What payment methods do you accept?
We accept various payment methods including credit/debit cards, PayPal, Apple Pay, and Google Pay. You can select your preferred payment option during the checkout process.

How can I track my order?
After placing your order, you will receive a confirmation email with a tracking link. You can use this link to track the status of your order in real-time.

Can I schedule an order for a later time?
Yes, you can schedule your order for a later time or date. During the checkout process, you will have the option to select your preferred delivery time.

What if I have dietary restrictions or allergies?
Please mention any dietary restrictions or allergies in the special instructions box when placing your order. Our kitchen will take care to accommodate your needs.

How do I apply a promo code?
To apply a promo code, enter the code in the designated promo code box during the checkout process. The discount will be applied to your total amount.

What is your cancellation policy?
Orders can be canceled within 10 minutes of placing them. To cancel an order, go to your order history, select the order you wish to cancel, and click the cancel button. If you face any issues, please contact our customer support.

Do you offer contactless delivery?
Yes, we offer contactless delivery. You can select the contactless delivery option at checkout. Our delivery driver will leave your order at your doorstep and notify you when it has been delivered.

How do I provide feedback about my order?
We value your feedback! After your order is delivered, you will receive an email prompting you to leave a review. Alternatively, you can provide feedback through our website or app under the “Feedback” section.

How can I contact customer support?
For any inquiries or issues, you can contact our customer support team via email at<EMAIL_ADDRESS>or by calling . We are available 24*7 to assist you.

Hi Singh, Please provide me with the actual text of this FAQ section if possible, otherwise, I will use it accordingly.
…
On Mon, Jun 3, 2024 at 1:44 AM Sukhbir Singh @.***> wrote: Assigned #101 <#101> to @Rahman-Ali https://github.com/Rahman-Ali. — Reply to this email directly, view it on GitHub <#101 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/BCFFHOFGOMWP2YNVQYSUG6LZFN74FAVCNFSM6AAAAABHRSJTBOVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJTGAYTEOJVGI3DIMY . You are receiving this because you were assigned.Message ID: <khushi-joshi-05/Food-ordering-website/issue/101/issue_event/13012952643@ github.com>

What you would like to contribute is fine for me.

Hi Singh, Please provide me with the actual text of this FAQ section if possible, otherwise, I will use it accordingly.
…
On Mon, Jun 3, 2024 at 1:44 AM Sukhbir Singh @.***> wrote: Assigned #101 <#101> to @Rahman-Ali https://github.com/Rahman-Ali. — Reply to this email directly, view it on GitHub <#101 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/BCFFHOFGOMWP2YNVQYSUG6LZFN74FAVCNFSM6AAAAABHRSJTBOVHI2DSMVQWIX3LMV45UABCJFZXG5LFIV3GK3TUJZXXI2LGNFRWC5DJN5XDWMJTGAYTEOJVGI3DIMY . You are receiving this because you were assigned.Message ID: <khushi-joshi-05/Food-ordering-website/issue/101/issue_event/13012952643@ github.com>

What you would like to contribute is fine for me.

Well, I'll use it in the FAQ section. Thank you, Mr Singh.

yes, I just want to contribute and will add the FAQ section .


[Question]: Share Link

What is your question?
i using share link to facebook: Share.share(url)
when facebook app open, but i do not share link, i click button back,  but callback result status success
Even though I don't share it on the timeline
how to check cancel share on facebook app
Checklist before submitting a question

[X] I searched issues in this repository and couldn't find such bug/problem
[X] I Google'd a solution and I couldn't find it
[X] I searched on StackOverflow for a solution and I couldn't find it
[X] I read the README.md file of the plugin
[X] I am using the latest version of the plugin
[X] All dependencies are up to date with flutter pub upgrade
[X] I did a flutter clean
[X] I tried running the example project

The package README mentions the issues with Meta apps. Basically, they don't implement the sharing mechanism on their apps correctly, so sharing content to their apps is unreliable.


Correcting typo in setup.py

Thank you! Merged in: https://github.com/jonathanslenders/pyvim/commit/fddbac5c861db4470611b20aec923ceacd44d700


Removed hideChildrenAtBeginning option from datagrid

informations:

q
a

Fixed tickets
none

Related PRs
https://github.com/massiveart/husky/pull/589

BC breaks
none

Documentation PR
none

What is about this openToPath option? Shouldn't that also be the same on every screen?

@danrot fixed


Support S3 API implementations such as RiakCS / Swift

Thanks for sharing this great release!
I'm running a private CF instance which has not access to AWS S3, but local implementation of the S3 API: swift or RiakCS. It could be great if the base URL could be configureable to not always point on the default AWS S3 US enpoint, but potentially point on a private Swift/RiakCS endpoint.
gof3r seems to support a --endpoint option which defaults to s3.amazonaws.com
I guess supporting dump into RiakCS it would only take to add the --endpoint to the gof3r binary into https://github.com/cloudfoundry-community/postgresbackup-boshrelease/blob/1dcb4e3f8da571c7b2b725e8ab89b20e585bafa1/jobs/pgbackup/templates/bin/pgbackup#L35 and add a new corresponding property pgbackup.s3.endpoint property to https://github.com/cloudfoundry-community/postgresbackup-boshrelease/blob/master/jobs/pgbackup/spec#L54-L65
Do you see other potential problems to be careful about ? If not, I might give it a try in coming weeks.
/CC @poblin-orange

Guillaume,
Check out v2 - added the --endpoint option and support for multiple postgres versions.
Chris

thanks a lot @thegullion! I'll be testing this shortly against riakcs.


[e2e]: gradle workflow_dispatch main default slsa3

Repo: https://github.com/slsa-framework/example-package/tree/main
Run: https://github.com/slsa-framework/example-package/actions/runs/5909844877
Workflow file: https://github.com/slsa-framework/example-package/tree/main/.github/workflows/e2e.gradle.workflow_dispatch.main.default.slsa3.yml
Workflow runs: https://github.com/slsa-framework/example-package/actions/workflows/e2e.gradle.workflow_dispatch.main.default.slsa3.yml
Trigger: schedule
Branch: main
Date: Sat Aug 19 06:08:24 UTC 2023

bootstrap error, I think due to concurrent workflow runs trying to push. Updated the scheduled timed

Repo: https://github.com/slsa-framework/example-package/tree/main
Run: https://github.com/slsa-framework/example-package/actions/runs/5914314066
Workflow file: https://github.com/slsa-framework/example-package/tree/main/.github/workflows/e2e.gradle.workflow_dispatch.main.default.slsa3.yml
Workflow runs: https://github.com/slsa-framework/example-package/actions/workflows/e2e.gradle.workflow_dispatch.main.default.slsa3.yml
Trigger: workflow_dispatch
Branch: main
Date: Sun Aug 20 00:32:32 UTC 2023
Tests are passing now. Closing this issue.


Terraform Static Code Analysis - scheduled scan of all directories is failing

Expected Behavior
The daily SCA scan of all directories should run clean, like in this instance from about a week ago.
Errors:
Error: Invalid index

  on terraform/environments/core-vpc/transit-gateway-attachment.tf line 35, in module "vpc_attachment":
  35:   for_each = toset(keys(local.vpcs[terraform.workspace]))

with local.vpcs as object with 5 attributes,
     terraform.workspace as "default".

The given key does not identify an element in this collection value.

Actual Behavior
The daily SCA scan of all directories fails for tflint in the modernisation-platform/terraform/environments/core-vpc directory, like in this instance from today,
Steps to Reproduce the Problem
The workflow runs daily on schedule, see the failing alert generated daily in slack.
NOTE, the scheduled workflow run clean a week ago, so this is a new bug.
Version
for a failing workflow:
github.com/terraform-linters/tflint-ruleset-terraform, version: 0.2.1
tflint version installed on docker image in github-actions: 0.50.0
for a successful workflow:
github.com/terraform-linters/tflint-ruleset-terraform, version: 0.2.1
tflint version installed on docker image in github-actions: 0.49.0
Modules
No response
Account
No response

Tflint version 0.50.0 had breaking changes and introduced a bug in our terraform code, as now by default tf modules are run if they are local.
It can be turned off by setting --call-module-type=none, but the changes to allow it, must be made in the github-actions  code, before this can be implemented in our GH workflows.

Created a PR to fix the issue in the github-actions repo: https://github.com/ministryofjustice/github-actions/pull/226


Fix streaming into next session bug

Description
Streaming was not getting aborted on loading a new session
Fixed with global stream abort
To duplicate on current main, say "write me a long story", go to history, and then select a different session. It will continue streaming into the newly loaded sessioon

Resolved merge conflicts from my recent pushes

@Patrick-Erichsen I think PR checks are failing from the merge

Correct, pushed a fix for that.

thanks you


Can't add custom folder into source path

I hava some java file generated by maven thrfit plugin in target/generated-sources/thrift , these file haven't been add into java source path ,but strangly target/generated-sources/protobuf/java created by maven protobuf plugin was added .
I tried manualy add the path target/generated-sources/thrift by click the option "Add Folder to Java Source Path" in right-click menu ,it shows :

So I tried use build-helper-maven-plugin config like this:
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                        <goal>add-source</goal>
                        </goals>
                        <configuration>
                       <sources>
                            <source>src/java/main</source>
                            <source>src/java/generated-sources</source>
                        </sources>
                        </configuration>
                    </execution>
                </executions>
           </plugin>
but  it's still not work .
How can I add generated-sources folder into Java source path?

Please see: https://github.com/redhat-developer/vscode-java/issues/177#issuecomment-673333479


Add Permission Field to Role Entity

Since SessionService check with getUserChannelsPermissions for Permssion, Role entity is in need of permission field. If u go with creating Permission entity, ManytoMany relation is favorable since one permssion such asCreateCustomer could belong to one or more role such as Administrator, Assistant Manager.

I went with scalar list of prisma which store array as input and instead of creating Permission as entity, enum would be favorable since Role only entity which interact with permission.


broken example link in the readme

If I clink on the example in
The basic usage is shown below, check out the example to get an impression of the resulting page.
I land on black page

Thanks for reporting, there seems to be a problem with the html previewer. I try switching to raw.githack in #10 , hope that solves the problem.


all navbars except simple have a horizontal overflow when on mobile screen and the direction is RTL

all Navbars except simple have a horizontal overflow when on mobile screen and the direction is RTL + categories Navbar menu button is visible on lg

i fixed the issue on my fork at https://github.com/iam-omer-mahdi/merakiui

Thanks @iam-omer-mahdi, will fix it

Fixed!

Thanks @khatabwedaa


Can't install version 1.9 on Linux

General Summary
I downloaded the latest installers from the website and github, but couldn't get it to work. Trying now with enso-bundle
Steps to Reproduce
Download version 1.9 of the luna gui installer from the website, unzip and try to run it:
$ ./lunaInstaller
Error during loading electron application:
Luna installer finishes unsuccessfully

Error log:
 (
(electronLunaInstaller:1458673): Pango-ERROR **: 18:36:59.216: Harfbuzz version too old (1.4.2)

)
QFontDatabase: Cannot find font directory /home/ec2-user/dev/build-qt-static/lib/fonts.
Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig.

I also tried $ ./luna-manager install, but:
$ ~/.luna/bin/luna-studio/current/luna-studio
bin/public/luna-studio/luna-studio: symbol lookup error: /tmp/.mount_luna-sjQkdDt/usr/lib/librt.so.1: undefined symbol: __clock_nanosleep, version GLIBC_PRIVATE

I also tried to download the ide, but:
ide-2.0.0-alpha.1$ ./run start --skip-version-validation

----------------------
--- Initialization ---
----------------------

Installing build script dependencies.
Calling 'npm install'
audited 47 packages in 1.061s

3 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

Calling 'node /home/ben/docs/1.Projects/Enso/ide-2.0.0-alpha.1/build/run start --skip-version-validation'
fatal: not a git repository (or any of the parent directories): .git

$ uname -a
Linux cdodev 5.8.0-43-generic #49~20.04.1-Ubuntu SMP Fri Feb 5 09:57:56 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Expected Result
I would have expected that the installer would work, or that there would be instructions on required dependencies :-)
Actual Result
See errors above
Enso Version
1.9 (latest available from website)
2.0 beta of ide from github
I don't have anything that I can run enso --version on. What should I download to do this, and where from?

I also tried
$ ../enso/bin/enso --version
Enso Launcher
Version:    0.2.6
Built with: scala-2.13.5 for GraalVM <IP_ADDRESS>
Built from: enso-0.2.6 @ aec61292c467c3c52e2259ac9e8cd03670c77f15
Built on:   Linux (amd64)
Enso engine from project Playground:
Enso Compiler and Runtime
Version:    0.2.6
Built with: scala-2.13.5 for GraalVM <IP_ADDRESS>
Built from: enso-0.2.6 @ aec61292c467c3c52e2259ac9e8cd03670c77f15
Running on: OpenJDK 64-Bit Server VM, GraalVM Community, JDK 11.0.10+8-jvmci-21.0-b06
            Linux 5.8.0-43-generic (amd64)

Created a project, but enso run didn't seem to work. All I got was this in the terminal:
$ ../enso/bin/enso run
[info] [2021-03-04T19:01:21.859Z] [akka.event.slf4j.Slf4jLogger] Slf4jLogger started

Downloading the app image from here https://github.com/enso-org/ide/actions/runs/621925429 got me up and running, but all in all a pretty frustrating experience, which I would assume is losing you a lot of users :-)

Hey @commandodev,
Sorry for the rough experience - I'm afraid that's because of our outdated website, which has sent you bouncing between a couple of different projects.
Luna <1.9 was deprecated over a year ago, as 2.0 necessitated a completely fresh code base. The app image you're now using that's working is the alpha for 2.0, on that new codebase. Our new website will be up soon, which should prevent folks from winding up on that old, very deprecated version.
As for the problem you're running into here with blank output from the Enso run, that's actually a slightly different issue. Basically the default project template is optimised for the IDE, and so doesn't output anything to terminal (it doesn't contain print or anything like that). We'll look into a way to make the default project make sense from whichever environment (CLI or IDE) the user comes from.
Thanks again for persevering, and for the feedback!


[Misc] Redundant Study Clean-up

I have created the following redundant Org Studies and would like to clean them out:

GPC-MUIRB2057285-GROUSE-ALS
Test-S3-Sync-Under-OrgStudy-Song

Will tackle this today :)

Studies removed.


Open-Startup™ Metrics

Create publicly accessible metrics about paying members, new accounts, requests per day and more.
From Pieter Levels @ https://twitter.com/levelsio/status/1124013980803055616

To put on /open and link back to https://open-startup.com


Move babel and eslint configuration to package.json

It's easy to overlook .babelrc and .eslintrc when copying files, especially on Windows. So I think it makes sense to move them to package.json. Many other boilerplates use this approach as well.
What does everyone think?

Coverage remained the same at 95.283% when pulling 2e1b0940879f6e333be59ecb846e8d196fd54786 on move-babel-and-eslint-to-package-json into 0274261cc3215bcadc91d66e26939c9cacd3854e on master.

I'm fine with the change as well. Might as well stop causing headaches for Windows users.

The size of package.json wouldn't be bad if we dropped all the custom eslint rules. I'd like to consider dumping all custom rules and just use eslint's recommended as a basline. Thoughts on that?

I'm OK with that.
On Tue, Apr 4, 2017 at 9:36 AM Cory House<EMAIL_ADDRESS>wrote:
@coryhouse commented on this pull request.
In package.json
https://github.com/coryhouse/react-slingshot/pull/405#discussion_r109663120
:

@@ -1,6 +1,6 @@
{
"name": "react-slingshot",

"version": "5.0.0",

"version": "7.0.0",

Well embarrassingly, when I announced 6.0, I didn't update package.json to
reflect it. I would consider the config move a breaking change, so that's
why I went to 7. Make sense?
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
https://github.com/coryhouse/react-slingshot/pull/405#discussion_r109663120,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAy2z7j58eKvTR4zJ-RcclVxcUzwe1fYks5rskc4gaJpZM4My1Hv
.

I agree for the purposes of this repo a baseline/standard rule list may be better suited.
Any updates we can make to the babel config to make that cleaner? Maybe introduce babel-preset-env.

@coryhouse, I'll take a peek tonight at your PR.

@kwelch anything else to add before I merge?

I am good, I think there are few action items from this around the lint and babel configs. Should we open an issue for those to discuss?

@kwelch, yeah, can you open another issue for that?


add vietnamese translation

I had to look in PR #139 #195, and it uses unnatural language

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

bitcrazed May we have your approval or comment for this PR? Just have a little bit surprise why the last commit hasn't received any CLA sign.

Thanks for taking the time to contribute this localization pull request. However, we are not able to accept contributions to this historical reference repository at this time.


How to make this work in other platform，like windows？

How to make this work in other platform，like windows？

PhotoStudioPlayer is for macOS & iOS. Others I have searched on twitter seems to work with other platforms. Anyway, I don't like windows.


Enable CI for Gradle Plugin

Depends on https://github.com/playframework/.github/pull/65

I'm continuing 🏃♂
@mkurz Feel free to comment my PR's after merge 😉


Need search with subcollection

Need search with subcollection collection reference
if possible i will try to add it

dependencies:
  firestore_search:
    git:
      url: https://github.com/venky9885/firestore_search.git

created pr please merge it

Okay, I'll check it!


Enable goreleaser in the repo

This sets up goreleaser for this repo to deploy to docker and as a package for homebrew.  Try this out:
make goreleaser_test
docker run -it trussworks/find-guardduty-user:v0.0.0 version

You will see output like this:
v0.0.0-next

Similarly you can try one of the build artifacts for distribution:
./dist/find-guardduty-user_darwin_amd64/find-guardduty-user help

I'm unclear how to actually do the release for this. I have set up Docker and Github env vars in the circleci project settings. I have a sense that I need to tag this as v0.0.1 or something similar so that the release will happen. But do I tag before or after merging? This is something I could use advice on.

I'm going to pause on this for a bit and see if I can't look at a different deploy mechanism.

goreleaser docs suggest pushing a tag to mainline then running the utility.  How this has worked for me using CI, I would merge changes into mainline -> use the github UI to create a new release -> new release implicitly creates new tag on mainline -> new release triggers CI job specific to release (runs goreleaser) -> goreleaser interprets newest semver tag as new relase to build etc.
I hope that kinda helps clarify what it's doing.
As a nice to have, it might be good to have a check on the version noted in go before we run go releaser. maybe?
Did you do a pre-release using this config? I wanna sanitycheck the stuff it pushed into brew. We ran into some heartache cross platform builds but I'm hoping that's just cuz those utilities had to integrate with a keychain.

goreleaser docs suggest pushing a tag to mainline then running the utility. How this has worked for me using CI, I would merge changes into mainline -> use the github UI to create a new release -> new release implicitly creates new tag on mainline -> new release triggers CI job specific to release (runs goreleaser) -> goreleaser interprets newest semver tag as new relase to build etc.
I hope that kinda helps clarify what it's doing.

I think what you're advocating is that I tag v0.0.1 on my last git hash for this PR and push that to Github so that CircleCI picks it up and runs. Do I need to do that via the Github UI? Otherwise do I need to merge in the new release workflow to mainline to get it to work with the tag?

As a nice to have, it might be good to have a check on the version noted in go before we run go releaser. maybe?

You're advocating for me to build the binaries with goreleaser and then check the version matches the tag? We can probably do that via the docker check. I think I can do goreleaser build, test the version against the tag, and then goreleaser to release.

Did you do a pre-release using this config? I wanna sanitycheck the stuff it pushed into brew. We ran into some heartache cross platform builds but I'm hoping that's just cuz those utilities had to integrate with a keychain.

I have not done a pre-release yet. Are you suggesting that I do this from CircleCI or locally? This utility doesn't have any dependencies on osx keychain or the aws-vault storage backend so I think cross-compiling should be fine.

I tagged this branch as v0.0.1 and did a release manually from my machine. It updated homebrew and it was easily installable and worked:
$ find-guardduty-user help
Find Users that triggered GuardDuty findings

Usage:
  find-guardduty-user [command]

Available Commands:
  completion  Generates bash completion scripts
  find        Find Users that triggered GuardDuty findings
  help        Help about any command
  version     Print the version

Flags:
  -h, --help   help for find-guardduty-user

Use "find-guardduty-user [command] --help" for more information about a command.
$ find-guardduty-user version
0.0.1

Here's the release: https://github.com/trussworks/homebrew-tap/blob/master/find-guardduty-user.rb

Here's the release on Github: https://github.com/trussworks/find-guardduty-user/releases

I see the release code happening in circleci is stuck because I released already, which is fine. I believe the only thing not tested here is the dockerhub integration.

goreleaser docs suggest pushing a tag to mainline then running the utility. How this has worked for me using CI, I would merge changes into mainline -> use the github UI to create a new release -> new release implicitly creates new tag on mainline -> new release triggers CI job specific to release (runs goreleaser) -> goreleaser interprets newest semver tag as new relase to build etc.
I hope that kinda helps clarify what it's doing.

I think what you're advocating is that I tag v0.0.1 on my last git hash for this PR and push that to Github so that CircleCI picks it up and runs. Do I need to do that via the Github UI? Otherwise do I need to merge in the new release workflow to mainline to get it to work with the tag?

yes. you can do that either in the release workflow on the github UI or pushing a tag. You don't necessarily need to merge... if you release from the ui off of the working branch it should run as is in your PR

As a nice to have, it might be good to have a check on the version noted in go before we run go releaser. maybe?

You're advocating for me to build the binaries with goreleaser and then check the version matches the tag? We can probably do that via the docker check. I think I can do goreleaser build, test the version against the tag, and then goreleaser to release.

No actually... I think it would be nice in the circleci release job to validate that the build it's going to do will have matching tags and version strings.

Did you do a pre-release using this config? I wanna sanitycheck the stuff it pushed into brew. We ran into some heartache cross platform builds but I'm hoping that's just cuz those utilities had to integrate with a keychain.

I have not done a pre-release yet. Are you suggesting that I do this from CircleCI or locally? This utility doesn't have any dependencies on osx keychain or the aws-vault storage backend so I think cross-compiling should be fine.

I was confused you can try it either way... I think on CircleCi gets more complicated and if it works locally you might wanna check it on Circle.

Looks like that worked btw. I was able to brew install and run the version command.

LMK if you need help with the docker hub stuff... I think I documented it in engineering playbook here: https://github.com/trussworks/Engineering-Playbook/blob/master/developing/command-line-tools/HOW2GORELEASER.md#create-a-docker-repo

So it turns out the Dockerhub stuff didn't release because the github release blocked it. I'll try to push that out manually and then get this in.

Dockerhub is now updated: https://hub.docker.com/repository/docker/trussworks/find-guardduty-user/general
docker pull trussworks/find-guardduty-user:v0.0.1
docker run -it trussworks/find-guardduty-user:v0.0.1 version
0.0.1


Unsupported protocol scheme "file"

Hi, I am trying to use oauth2_proxy as an auth server + static server.
I can get it to auth, but it doesn't seem to server the static files properly. With this conf:
$ cat oauth2_proxy.cfg
upstreams = [
    "file:///Users/alex/Desktop/oauth2_proxy-2.0.1.darwin-amd64.go1.4.2/static/#/static/"
]

pass_basic_auth = true
pass_host_header = true

email_domains = [
     "xxx.com"
]

cookie_secure = false

I can access to http://<IP_ADDRESS>:4180/Users/alex/Desktop/oauth2_proxy-2.0.1.darwin-amd64.go1.4.2/static/index.html without getting a 404, but the console shows the following:
2015/12/28 18:57:36 reverseproxy.go:184: http: proxy error: unsupported protocol scheme "file"
<IP_ADDRESS> -<EMAIL_ADDRESS>[28/Dec/2015:18:57:36 +0100] <IP_ADDRESS>:4180 GET - "/Users/alex/Desktop/oauth2_proxy-2.0.1.darwin-amd64.go1.4.2/static/index.html" HTTP/1.1 "Mozilla/5.0 (Macintosh; Inte
l Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" 500 0 0.000

Solved using the current master instead the release file.


Raw text parser

Added a parser that just parses text, and I made this the default parser instead of the pdf one.

 Add parser for parsing text files instead of pdfs