text:
(zju_15) 提供 1 个新的风格模型

提供 1 个兼容 MajicmixRealistic_v6 的风格模型：雪山羽绒服风(Jacket in Snow Mountain)。

用于训练的人像

Jacket in Snow Mountain

I tested this style, the effect is pretty good. Can we continue to tune the prompt and parameters a bit, the multiplier_style can be lower.
My prompt and parameters:
'multiplier_style': 0.6,
'multiplier_human': 0.9,
'add_prompt_style': '1 girl, close-up, fur, ((jacket)), shirt, pants, winter, (bright sunny day, snow mountain, alpine slopes, snow), gyaru, fashion, trendy, gentle hair'

I tested this style, the effect is pretty good. Can we continue to tune the prompt and parameters a bit, the multiplier_style can be lower.
My prompt and parameters: 'multiplier_style': 0.6, 'multiplier_human': 0.9, 'add_prompt_style': '1 girl, close-up, fur, ((jacket)), shirt, pants, winter, (bright sunny day, snow mountain, alpine slopes, snow), gyaru, fashion, trendy, gentle hair'

Wow, your tune results works obviously better. Let us update those prompts and parameters after merge.

I tested this style, the effect is pretty good. Can we continue to tune the prompt and parameters a bit, the multiplier_style can be lower.
My prompt and parameters: 'multiplier_style': 0.6, 'multiplier_human': 0.9, 'add_prompt_style': '1 girl, close-up, fur, ((jacket)), shirt, pants, winter, (bright sunny day, snow mountain, alpine slopes, snow), gyaru, fashion, trendy, gentle hair'

Wow, your tune results works obviously better. Let us update those prompts and parameters after merge.

hi, @iotang if there's a better parameter & prompt, chould you change it first, and update your style showcase.

I updated parameter and prompts and the result is as shown below. Human LoRA may make the results different.
Style image has been updated too.

authors: hehaha68 iotang sunbaigui

repo: modelscope/facechain


text:
请问Swift可以实现多模态模型的dpo/simpo吗？

如题，swift可以实现多模态模型，比如qwen-vl, internvl-v1.5等的dpo/simpo吗？
我目前按照llm的dpo格式会报错：
AttributeError: 'Seq2SeqTrainingArguments' object has no attribute 'model_init_kwargs'

请问如果自己添加的话，有没有什么文档参考呢？

support

source: gharchive/issue

repo: modelscope/swift

license_type: permissive

license_source: github-api


text:
🛑 Plex is down

In c526e50, Plex ($PLEX_URL) was down:

HTTP code: 404
Response time: 446 ms

Resolved: Plex is back up in 10b2cda.

license: MIT


text:
🛑 Dozzle is down

In 540e29e, Dozzle ($DOZZLE_URL) was down:

HTTP code: 404
Response time: 381 ms

Resolved: Dozzle is back up in f8f68d3.


text:
Can't execute any Modin function (ValueError: tuple is not allowed for map key)

System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Windows 10
Modin version (modin.__version__): '0.7.0
Python version: 3.7.1
Code we can use to reproduce:

import os
os.environ["MODIN_ENGINE"] = "dask"
import modin.pandas as pd
import numpy as np
df = pd.DataFrame([1,2,3])

Describe the problem

I am a new user who just follows your installation page to install Modin and tried out a little bit. But I found that I couldn't even execute a simple function through your package (ValueError: tuple is not allowed for map key). I have installed packages by the following command.
pip install -U modin # -U for upgrade in case you have an older version
pip install modin[dask] # Install Modin dependencies and Dask to run on Dask

p.s. By the way, every time I imported the package (import modin.pandas as pd), the jupyter notebook would give me the following warning. I couldn't really figure out the cause.
UserWarning: The Dask Engine for Modin is experimental.
UserWarning:
Failed to start diagnostics server on port 8787. [WinError 10013] 嘗試存取通訊端被拒絕，因為存取權限不足。 ## This means the access is denied because the accuess authority is insufficient

Source code / logs

UserWarning: Distributing <class 'list'> object. This may take some time.
distributed.protocol.core - CRITICAL - Failed to deserialize
Traceback (most recent call last):
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\protocol\core.py", line 114, in loads
    header = msgpack.loads(header, use_list=False, **msgpack_opts)
  File "msgpack\_unpacker.pyx", line 195, in msgpack._cmsgpack.unpackb
ValueError: tuple is not allowed for map key
distributed.core - ERROR - tuple is not allowed for map key
Traceback (most recent call last):
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\core.py", line 297, in handle_comm
    msg = yield comm.read()
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\tornado\gen.py", line 1133, in run
    value = future.result()
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\tornado\gen.py", line 1141, in run
    yielded = self.gen.throw(*exc_info)
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\comm\tcp.py", line 206, in read
    deserializers=deserializers)
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\tornado\gen.py", line 1133, in run
    value = future.result()
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\tornado\gen.py", line 326, in wrapper
    yielded = next(result)
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\comm\utils.py", line 79, in from_frames
    res = _from_frames()
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\comm\utils.py", line 65, in _from_frames
    deserializers=deserializers)
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\protocol\core.py", line 114, in loads
    header = msgpack.loads(header, use_list=False, **msgpack_opts)
  File "msgpack\_unpacker.pyx", line 195, in msgpack._cmsgpack.unpackb
ValueError: tuple is not allowed for map key
distributed.protocol.core - CRITICAL - Failed to deserialize
Traceback (most recent call last):
  File "C:\Users\ADMIN\Anaconda3\lib\site-packages\distributed\protocol\core.py", line 114, in loads
    header = msgpack.loads(header, use_list=False, **msgpack_opts)
  File "msgpack\_unpacker.pyx", line 195, in msgpack._cmsgpack.unpackb
ValueError: tuple is not allowed for map key
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-1f9265289ca2> in <module>
      4 import modin.pandas as pd
      5 import numpy as np
----> 6 df = pd.DataFrame([1,2,3])
      7 # data_set = pd.read_csv(data_path+'/'+data_file)

~\Anaconda3\lib\site-packages\modin\pandas\dataframe.py in __init__(self, data, index, columns, dtype, copy, query_compiler)
     84                 data=data, index=index, columns=columns, dtype=dtype, copy=copy
     85             )
---> 86             self._query_compiler = from_pandas(pandas_df)._query_compiler
     87         else:
     88             self._query_compiler = query_compiler

~\Anaconda3\lib\site-packages\modin\pandas\utils.py in from_pandas(df)
     21     from .dataframe import DataFrame
     22
---> 23     return DataFrame(query_compiler=BaseFactory.from_pandas(df))
     24
     25

~\Anaconda3\lib\site-packages\modin\data_management\factories.py in from_pandas(cls, df)
     26     @classmethod
     27     def from_pandas(cls, df):
---> 28         return cls._determine_engine()._from_pandas(df)
     29
     30     @classmethod

~\Anaconda3\lib\site-packages\modin\data_management\factories.py in _from_pandas(cls, df)
     30     @classmethod
     31     def _from_pandas(cls, df):
---> 32         return cls.io_cls.from_pandas(df)
     33
     34     @classmethod

~\Anaconda3\lib\site-packages\modin\engines\base\io\io.py in from_pandas(cls, df)
     12     @classmethod
     13     def from_pandas(cls, df):
---> 14         return cls.query_compiler_cls.from_pandas(df, cls.frame_cls)
     15
     16     @classmethod

~\Anaconda3\lib\site-packages\modin\backends\pandas\query_compiler.py in from_pandas(cls, df, data_cls)
     59     @classmethod
     60     def from_pandas(cls, df, data_cls):
---> 61         return cls(data_cls.from_pandas(df))
     62
     63     index = property(_get_axis(0), _set_axis(0))

~\Anaconda3\lib\site-packages\modin\engines\base\frame\data.py in from_pandas(cls, df)
   1181         new_columns = df.columns
   1182         new_dtypes = df.dtypes
-> 1183         new_frame, new_lengths, new_widths = cls._frame_mgr_cls.from_pandas(df, True)
   1184         return cls(
   1185             new_frame,

~\Anaconda3\lib\site-packages\modin\engines\base\frame\partition_manager.py in from_pandas(cls, df, return_dims)
    307                 for j in range(0, len(df.columns), col_chunksize)
    308             ]
--> 309             for i in range(0, len(df), row_chunksize)
    310         ]
    311         if not return_dims:

~\Anaconda3\lib\site-packages\modin\engines\base\frame\partition_manager.py in <listcomp>(.0)
    307                 for j in range(0, len(df.columns), col_chunksize)
    308             ]
--> 309             for i in range(0, len(df), row_chunksize)
    310         ]
    311         if not return_dims:

~\Anaconda3\lib\site-packages\modin\engines\base\frame\partition_manager.py in <listcomp>(.0)
    305             [
    306                 put_func(df.iloc[i : i + row_chunksize, j : j + col_chunksize].copy())
--> 307                 for j in range(0, len(df.columns), col_chunksize)
    308             ]
    309             for i in range(0, len(df), row_chunksize)

~\Anaconda3\lib\site-packages\modin\engines\dask\pandas_on_dask_futures\frame\partition.py in put(cls, obj)
    135         """
    136         client = _get_global_client()
--> 137         return cls(client.scatter(obj, hash=False))
    138
    139     @classmethod

~\Anaconda3\lib\site-packages\distributed\client.py in scatter(self, data, workers, broadcast, direct, hash, maxsize, timeout, asynchronous)
   1872                              broadcast=broadcast, direct=direct,
   1873                              local_worker=local_worker, timeout=timeout,
-> 1874                              asynchronous=asynchronous, hash=hash)
   1875
   1876     @gen.coroutine

~\Anaconda3\lib\site-packages\distributed\client.py in sync(self, func, *args, **kwargs)
    671             return future
    672         else:
--> 673             return sync(self.loop, func, *args, **kwargs)
    674
    675     def __repr__(self):

~\Anaconda3\lib\site-packages\distributed\utils.py in sync(loop, func, *args, **kwargs)
    275             e.wait(10)
    276     if error[0]:
--> 277         six.reraise(*error[0])
    278     else:
    279         return result[0]

~\Anaconda3\lib\site-packages\six.py in reraise(tp, value, tb)
    691             if value.__traceback__ is not tb:
    692                 raise value.with_traceback(tb)
--> 693             raise value
    694         finally:
    695             value = None

~\Anaconda3\lib\site-packages\distributed\utils.py in f()
    260             if timeout is not None:
    261                 future = gen.with_timeout(timedelta(seconds=timeout), future)
--> 262             result[0] = yield future
    263         except Exception as exc:
    264             error[0] = sys.exc_info()

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1131
   1132                     try:
-> 1133                         value = future.result()
   1134                     except Exception:
   1135                         self.had_exception = True

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1139                     if exc_info is not None:
   1140                         try:
-> 1141                             yielded = self.gen.throw(*exc_info)
   1142                         finally:
   1143                             # Break up a reference to itself

~\Anaconda3\lib\site-packages\distributed\client.py in _scatter(self, data, workers, broadcast, direct, local_worker, timeout, hash)
   1734                                              client=self.id,
   1735                                              broadcast=broadcast,
-> 1736                                              timeout=timeout)
   1737
   1738         out = {k: Future(k, self, inform=False) for k in data}

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1131
   1132                     try:
-> 1133                         value = future.result()
   1134                     except Exception:
   1135                         self.had_exception = True

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1139                     if exc_info is not None:
   1140                         try:
-> 1141                             yielded = self.gen.throw(*exc_info)
   1142                         finally:
   1143                             # Break up a reference to itself

~\Anaconda3\lib\site-packages\distributed\core.py in send_recv_from_rpc(**kwargs)
    578             try:
    579                 comm = yield self.live_comm()
--> 580                 result = yield send_recv(comm=comm, op=key, **kwargs)
    581             except (RPCClosed, CommClosedError) as e:
    582                 raise e.__class__("%s: while trying to call remote method %r"

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1131
   1132                     try:
-> 1133                         value = future.result()
   1134                     except Exception:
   1135                         self.had_exception = True

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1139                     if exc_info is not None:
   1140                         try:
-> 1141                             yielded = self.gen.throw(*exc_info)
   1142                         finally:
   1143                             # Break up a reference to itself

~\Anaconda3\lib\site-packages\distributed\core.py in send_recv(comm, reply, serializers, deserializers, **kwargs)
    455         yield comm.write(msg, serializers=serializers, on_error='raise')
    456         if reply:
--> 457             response = yield comm.read(deserializers=deserializers)
    458         else:
    459             response = None

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1131
   1132                     try:
-> 1133                         value = future.result()
   1134                     except Exception:
   1135                         self.had_exception = True

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1139                     if exc_info is not None:
   1140                         try:
-> 1141                             yielded = self.gen.throw(*exc_info)
   1142                         finally:
   1143                             # Break up a reference to itself

~\Anaconda3\lib\site-packages\distributed\comm\tcp.py in read(self, deserializers)
    204                 msg = yield from_frames(frames,
    205                                         deserialize=self.deserialize,
--> 206                                         deserializers=deserializers)
    207             except EOFError:
    208                 # Frames possibly garbled or truncated by communication error

~\Anaconda3\lib\site-packages\tornado\gen.py in run(self)
   1131
   1132                     try:
-> 1133                         value = future.result()
   1134                     except Exception:
   1135                         self.had_exception = True

~\Anaconda3\lib\site-packages\tornado\gen.py in wrapper(*args, **kwargs)
    324                 try:
    325                     orig_stack_contexts = stack_context._state.contexts
--> 326                     yielded = next(result)
    327                     if stack_context._state.contexts is not orig_stack_contexts:
    328                         yielded = _create_future()

~\Anaconda3\lib\site-packages\distributed\comm\utils.py in from_frames(frames, deserialize, deserializers)
     77         res = yield offload(_from_frames)
     78     else:
---> 79         res = _from_frames()
     80
     81     raise gen.Return(res)

~\Anaconda3\lib\site-packages\distributed\comm\utils.py in _from_frames()
     63             return protocol.loads(frames,
     64                                   deserialize=deserialize,
---> 65                                   deserializers=deserializers)
     66         except EOFError:
     67             if size > 1000:

~\Anaconda3\lib\site-packages\distributed\protocol\core.py in loads(frames, deserialize, deserializers)
    112
    113         header = frames.pop()
--> 114         header = msgpack.loads(header, use_list=False, **msgpack_opts)
    115         keys = header['keys']
    116         headers = header['headers']

msgpack\_unpacker.pyx in msgpack._cmsgpack.unpackb()

ValueError: tuple is not allowed for map key

Hi @HiIamJeff, thanks for the report!
This is related to https://github.com/dask/distributed/issues/3491. The fix is to pip install msgpack<1.0.

Thanks Devin. It works like charm! Much appreciate it.

authors: HiIamJeff devin-petersohn

repo: modin-project/modin


text:
[Boards] test

System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
Modin installed from (source or binary):
Modin version:
Python version:
Exact command to reproduce:

Test from Github

New test from Github


text:
self._query_compiler.columns RecursionError: maximum recursion depth exceeded while calling a Python object

System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04):
Modin version (modin.__version__):
Python version:
Code we can use to reproduce:

Describe the problem

Source code / logs

Hi @deepalib-cuelogic thanks for posting!
We need more information to reproduce and fix this issue. Can you share the code that produced this error? Thanks!

Closing due to lack of information/reproducer.


text:
Create physics module

Closes #40

Codecov Report

Merging #52 (14f50af) into main (71779df) will increase coverage by 99.96%.
The diff coverage is 99.52%.

@@            Coverage Diff            @@
##           main      #52       +/-   ##
=========================================
+ Coverage      0   99.96%   +99.96%
=========================================
  Files         0       38       +38
  Lines         0     3148     +3148
=========================================
+ Hits          0     3147     +3147
- Misses        0        1        +1

Impacted Files
Coverage Δ

crates/modor/src/actions.rs
100.00% <ø> (ø)

crates/modor/src/entities.rs
100.00% <ø> (ø)

crates/modor/src/system_runner.rs
100.00% <ø> (ø)

crates/modor_physics/src/lib.rs
100.00% <ø> (ø)

crates/modor/src/testing.rs
99.20% <95.23%> (ø)

...rates/modor_physics/src/components/acceleration.rs
100.00% <100.00%> (ø)

crates/modor_physics/src/components/position.rs
100.00% <100.00%> (ø)

crates/modor_physics/src/components/scale.rs
100.00% <100.00%> (ø)

crates/modor_physics/src/components/velocity.rs
100.00% <100.00%> (ø)

crates/modor_physics/src/entities/delta_time.rs
100.00% <100.00%> (ø)

... and 33 more

Continue to review full report at Codecov.

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

source: gharchive/pull-request

authors: Nicolas-Ferre codecov-commenter

repo: modor-engine/modor


text:
🛑 Plus Repo is down

In ca7cd8b, Plus Repo (https://repo.plus) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Plus Repo is back up in 4d931eb after 17 minutes.

repo: moechs/upptime


text:
Add support for Tomcat 10

With Tomcat 10, the expression Engine (within el-api.jar) moved to the jakarta.el package, thus the payload for tomcat does no longer work on Tomcat 10.
We need to create a new Controller that handles this cases. Actual change would be minimal.

Basically, simple change "javax.el.ELProcessor to "jakarta.ex.ELProcessor".
 //prepare payload that exploits unsafe reflection in org.apache.naming.factory.BeanFactory
ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "",
             true, "org.apache.naming.factory.BeanFactory", null);
ref.add(new StringRefAddr("forceString", "x=eval"));
ref.add(new StringRefAddr("x", payload));

Hello! I would like to contribute to this issue. Could you please assign it to me? :)

Hi! It's already done, see d46724f677330653463b748ee7e284a94be58c0e.

authors: h0ng10 hyeok-kong theGEBIRGE

repo: mogwailabs/rogue-jndi-ng


text:
npm module requires 'lame' module, but it's not listed as a depndency

When you try to require('timbre') it throws the following error.
Warning: Cannot find module 'lame' from '/Users/jorgesilva/Sites/2014/clickOnJorge/node_modules/timbre' Use --force to continue.

This seems to be because this package is not listed as a dependency in the package.json.
Should be as simple as:
npm install lame --save

if yall are getting this error when using timbre.js with browserify, you can use the --ignore-missing to skip the unresolved requires for lame, ogg, and vorbis

authors: data-doge thejsj

license: mit

license_source: bigquery


text:
Documents doubts and improvements requests

Hi,
First, thanks for the initiative, i also have used the old nestjs-zod and had no idea it were fully discontinued.
Does your generator uses the same structure than nest-zod-prisma ?
Would be nice to have it better described on how to use it

Hi, I am very sorry I didn't see your Issue
Yes,It uses the same generator but I have applied some improvements described in the docs such as nullable and nullish, and repeated Enum import in schemas and so on
I actually would love to write a good description but I really don't have a lot of time for now, So I would appreciate any PR
If you needed any more information about the package you can reach me in a discord call and I would love to explain what is foggy for you so you can PR here.
appreciate it!
@yangricardo
@timseriakov

Tho I think it is more clear with this changes I made to the README
Please check that so I can close this

authors: mohrazzak yangricardo

repo: mohrazzak/better-nestjs-zod-prisma


text:
Add an example to show how to run pending tasks in an interval

Split from https://github.com/moka-rs/moka/issues/349#issuecomment-1819114103

Hi. It does not have to be run_pending_tasks method, but you need to call some of the cache methods such as get, get_with, insert, or remove to drive eviction_listener.
Before v0.12.0, Moka had its own global thread pool to periodically run pending tasks. Some users did not like it, so we removed it. You will find more details here when pending tasks (internal maintenance tasks) will be executed: https://github.com/moka-rs/moka/blob/main/MIGRATION-GUIDE.md#the-maintenance-tasks

but i want the eviction_listener() to be called exactly at the time of eviction, not some time later,
can you please help me to understand what should i do?

You can spawn a thread and make it to call run_pending_tasks with some interval (e.g. 0.1 secs). If you need some code samples, I could write one for you.

CC: @unikzforce

Thanks

Hi! would it be good to add in the public doc about this behavior when it's described how to create an eviction listener? I feel it'd be good to say explicitly that the listener is not called automatically but it's linked to some cache operations, and perhaps bring the section in https://github.com/moka-rs/moka/blob/main/MIGRATION-GUIDE.md#the-maintenance-tasks to the pub doc as well?

authors: agiuliano tatsuya6502 unikzforce

repo: moka-rs/moka


text:
Problem getting started

Hi,
This looks awesome and I'd love getting it up and running.
Please tell me if I'm missing something.
I've compiled it using make under Linux. Everything checks out OK and I can properly discover my Tellsticknet on the network running the command python3 -m tellsticknet -vv discover
That's about it. I want to use it in conjunction with Home Assistanst using the mqtt option. However, I run into the following problems:

Using the provided example configuration, the command python3 -m tellsticknet -vv devices throws the following error:

18-08-22 23:45.09 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet_api/tellsticknet/tellsticknet.conf
18-08-22 23:45.09 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet_api/tellsticknet/.tellsticknet.conf
18-08-22 23:45.09 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet.conf
- Door
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/__main__.py", line 162, in <module>
    for e in (e for e in read_config() if e['class'] == 'command'):
  File "/home/homeassistant/tellsticknet_api/tellsticknet/__main__.py", line 162, in <genexpr>
    for e in (e for e in read_config() if e['class'] == 'command'):
KeyError: 'class'

Commenting out the class setting nor deleting it resolves the issue.
2. Trying to turn on a light (using the house and unit from telldus live), python3 -m tellsticknet -vv send protocol=arctech model=selflearning house=5092673 unit=1 cmd=turnon  throws the following error:
18-08-22 23:59.29 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet.conf
method not found

Doesn't matter if cmd=on, ON, turnon, turnoff etc. same result.

Trying to connect to a local mqtt broker using python3 -m tellsticknet -vv mqtt with .config/mosquitto_pub containing the following information:

-h localhost
-p 1883
-username test
-pw test

results in the following error:
18-08-23 00:07.58 DEBUG (MainThread) [tellsticknet.mqtt] Connecting
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/__main__.py", line 208, in <module>
    run(config, host=host)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/mqtt.py", line 574, in run
    port=int(credentials['port']))
  File "/usr/local/lib/python3.6/dist-packages/paho_mqtt-1.3.1-py3.6.egg/paho/mqtt/client.py", line 768, in connect
    return self.reconnect()
  File "/usr/local/lib/python3.6/dist-packages/paho_mqtt-1.3.1-py3.6.egg/paho/mqtt/client.py", line 927, in reconnect
    sock.do_handshake()
  File "/usr/lib/python3.6/ssl.py", line 1068, in do_handshake
    self._sslobj.do_handshake()
  File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
    self._sslobj.do_handshake()
ConnectionResetError: [Errno 104] Connection reset by peer

I can sucessfully publish to the mqtt broker using Node-red.
I'm suspecting that I'm missing something crucial here since you've got it running just fine.
Looking forward to your response.

Happy to hear you want to use my code, thanks for testing and finding bugs!

Is fixed here
I noticed that I actually never implemented specifying params on the command line this way. Clarified it now. If you have a valid config file you should be able to do tellsticknet send livingroom on, tellsticknet send kitchen dim 50, etc.
I believe this is because the code currently only supports connecting to the MQTT broker using SSL. I'm running my broker with SSL enabled on port 8883 and it works. So your options are to enable non-SSL in the client code (should not be to hard), or to enable SSL in your MQTT broker.

Thank you for the quick response! Are Nexa switches supported? Trying to turn on a Nexa switch using the device name throws an error about not finding "nexa.encode".
I can provide you a debug log when I get home.

Here is the log as promised:
18-08-23 20:35.09  INFO (MainThread) [tellsticknet.discovery] Discovering tellstick devices ...
18-08-23 20:35.09  INFO (MainThread) [tellsticknet.discovery] Found TellStickNet device with firmware 17 at 192.168.1.216
18-08-23 20:35.09 DEBUG (MainThread) [tellsticknet.controller] creating controller with address 192.168.1.216 (ACCA5400218D)
18-08-23 20:35.09 DEBUG (SenderThread) [tellsticknet.controller] Waiting for command forever
18-08-23 20:35.09 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet_api/tellsticknet/tellsticknet.conf
18-08-23 20:35.09 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet_api/tellsticknet/.tellsticknet.conf
18-08-23 20:35.09 DEBUG (MainThread) [__main__] checking for config file /home/homeassistant/tellsticknet.conf
18-08-23 20:35.09 DEBUG (MainThread) [tellsticknet.controller] Sending time 1
18-08-23 20:35.09 DEBUG (MainThread) [tellsticknet.protocol] Encoding for protocol nexa
Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/__main__.py", line 203, in <module>
    controller.execute(device, method, param=param)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/controller.py", line 135, in execute
    self._execute(device, method, param)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/controller.py", line 115, in _execute
    packet = encode(**device, method=method, param=param)
  File "/home/homeassistant/tellsticknet_api/tellsticknet/protocol.py", line 314, in encode
    return protocol.encode(**device)
AttributeError: module 'tellsticknet.protocols.nexa' has no attribute 'encode'

Should python3 -m tellsticknet -vv listen generate something more than this?
18-08-23 20:37.59  INFO (MainThread) [tellsticknet.discovery] Discovering tellstick devices ...
18-08-23 20:37.59  INFO (MainThread) [tellsticknet.discovery] Found TellStickNet device with firmware 17 at 192.168.1.216
18-08-23 20:37.59 DEBUG (MainThread) [tellsticknet.controller] creating controller with address 192.168.1.216 (ACCA5400218D)
18-08-23 20:37.59 DEBUG (SenderThread) [tellsticknet.controller] Waiting for command forever
18-08-23 20:37.59 DEBUG (MainThread) [tellsticknet.controller] Listening for signals from 192.168.1.216
18-08-23 20:37.59  INFO (MainThread) [tellsticknet.controller] Registering self as listener for device at 192.168.1.216
18-08-23 20:37.59 DEBUG (MainThread) [tellsticknet.controller] Sending packet to controller 192.168.1.216:42314 <b'B:reglistener'>

Have you specified protocol, model, house, unit in tellsticknet.conf?
Like:
controller: abc123
name: Sovrum
component: light
protocol: arctech
model: selflearning
unit: 15
house: 45213512
---
... etc

You can find out what parameters to use by starting tellsticknet -vv listen and then start pressing buttons on your Nexa controller. Then you should get decoded packets displayed in the console.

Great! I got it working with one of my Nexa switches. The one I got working is just a regular power outlet. I've got another Nexa device supposed to be mounted behind a regular wall switch which doesn't work. It's called "self-learning Pro" in Telldus live. Any idea?
Have you tried Jula's Anslut?
Sorry for all the questions. When I get the time I'll try to sniff out the packages sent from Telldus live to the Tellstick and compare them.

Ok, I ended up programming it myself using Node-red. Analysing the packages sent using tcpdump I found that Nexa Pro and Julia are the same and very similar to Nexa (built-in arctech). The Nexa (arctech) house code is 26 bits and Jula's/Nexa Pro are 26 bits and has to end in 10. Telldus live had a problem early on where Jula's Anslut wouldn't work if you didn't pick a house code which ended in 10(binary). It seems like if the house code doesn't end correctly it just zero pads it to 24 bits and adds 10 to the end of it, making it 26 bits.

Closing for now. Feel free to provide suggestions for changes as PRs.

authors: mannerydhe molobrakos

repo: molobrakos/tellsticknet


text:
Weird Decimal Conversion Issue

Here's a simple scenario. I have the following Json:
{"Amount": 11.11}

When I run "Pretty-print current JSON file", the number changes from 11.11 to 11.109999999999999.

This is not a bug per se, but rather an unfortunate consequence of my fix to #78.
Since loss of precision (that issue) means unrecoverable and unnecessary loss of information, whereas your issue is merely an unnecessarily ugly string representation of a number, I will leave this unfixed.
If you're confused, I recommend that you Google "floating point imprecision" to help you understand why some imprecision is unavoidable.

It seems fundamentally wrong that a plugin that is supposed to "pretty print" Json ends up manipulating the json data. That means that I can't use and trust your plugin's output because this is absolutely not just an "ugly string representation." 11..11 and 11.1099999xxx are completely different numbers, and "close enough" does not work in the real world of business and science.

@KeanuTang
I recommend that you stop wasting your breath chiding me for this issue. I will not fix it myself, because as I already explained I don't believe that the alternative solutions are acceptable or feasible to implement, as they involve (a) massive refactoring and loss of performance to pivot from double-precision floating point numbers to decimal numbers, (b) loss of precision when pretty-printing other numbers and thus a regression on #78, or (c) implementing my own (undoubtedly bug-ridden) algorithm that somehow fixes your issue while still using doubles.
You are welcome to submit a PR that would fix this issue, but don't be surprised if I reject it because I don't like the tradeoffs you made.
There are other JSON plugins you can try if you don't like this one. There is a strong likelihood that they will have the same issue that mine does, because almost everyone uses double-precision floating point number to represent real numbers because, again, the alternative solutions are much harder to use and less performant.

The reason I said this is not a bug in my original commend is that 11.11 is not "close enough" to 11.109999999999999 as far as double-precision floating point numbers are concerned; it is equal. By contrast, the earlier algorithm I was using was changing the string representation in a way that would be parsed to a non-equal double. Decimals are not a reasonable substitute because the maximum value for a decimal is far less (7.9e28) than the maximum value for a double (1.8e308).
Any alternative with no rounding errors for any number of reasonable size would require me to fish for some third-party library that provides a higher-precision numeric specification while still having comparable performance and memory usage to doubles and an equally generous range of acceptable values, and then tediously change every double parameter, return type, and variable initialization in the entire plugin to the different type.

@KeanuTang
I hope that JSON Viewer meets your needs, and I'm sorry if I came across as a jerk. But be warned; that plugin also uses doubles to represent real numbers, and I have no idea how their double-to-decimal and decimal-to-double algorithms compare to the one I'm using. They may be strictly better, or it may just make a different set of tradeoffs than the one I'm using. Regardless, since they use the same data type, they are subject to the same fundamental limitations as my plugin.
The only thing I know for sure is that if I try to implement these conversion algorithms myself, I will almost certainly do a worse job than the standard library and introduce many subtle bugs. If you think you can do a better job than the C# standard library, or point me to a library that you are extremely confident does better than the standard library, I would consider a fix.

@KeanuTang
This commit should address this issue. If you follow my instructions for downloading an unreleased version, you can test out this fix and see if it is too your liking.
As I noted in the changelog, this fix comes at the cost of noticeably worse performance when reformatting very large files (say, several megabytes or more). At some point I will see if I can implement a more performant solution.
Please let me know if you have any thoughts. If you are satisfied with this fix, I will be including it in v8.2 of JsonTools, which I aim to release in the next few weeks.
I must extend my sincerest apology to you for effectively gaslighting you and trying to trivialize what was in fact a real and substantial issue with my plugin.

JsonTools version 8.2, incorporating a fix for this issue, is now live. I will soon submit a PR to include v8.2 in the plugins manager.

authors: KeanuTang molsonkiko

repo: molsonkiko/JsonToolsNppPlugin


text:
[feat] [while spin] Show the nams in plain text

Hello 👋
Thanks for the great work!
Is it possible to shuffle the names above the wheel in plain text?
Because when we add +200 name, you won't be able to read the names from the wheel.
https://youtu.be/yL5clbrvmyY?t=480
Thanks

Thank you for the proposal, Asim!
Could add some more details? I don't think I understand, but i would like
to.
On Sun, May 17, 2020 at 6:39 PM Asim M Al Twijry notifications@github.com
wrote:

Hello 👋
Thanks for the great work!
Is it possible to shuffle the names above the wheel in plain text?
Because when we add +200 name, you won't be able to read the names from
the wheel.
https://youtu.be/yL5clbrvmyY?t=480
Thanks
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/momander/wheel-spinner/issues/6, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAD2AIJUP3CV6464GS6IQVLRSCGUHANCNFSM4NDU4F7Q
.

Here's an example
https://drive.google.com/file/d/1Ewh_kkJ98dipRevxCilRH2a8KeqUK7iT/view?usp=drivesdk
On Mon, 18 May 2020, 05:18 Martin Omander, notifications@github.com wrote:

Thank you for the proposal, Asim!
Could add some more details? I don't think I understand, but i would like
to.
On Sun, May 17, 2020 at 6:39 PM Asim M Al Twijry <notifications@github.com

wrote:

Hello 👋
Thanks for the great work!
Is it possible to shuffle the names above the wheel in plain text?
Because when we add +200 name, you won't be able to read the names from
the wheel.
https://youtu.be/yL5clbrvmyY?t=480
Thanks
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/momander/wheel-spinner/issues/6, or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AAD2AIJUP3CV6464GS6IQVLRSCGUHANCNFSM4NDU4F7Q
.

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/momander/wheel-spinner/issues/6#issuecomment-629909724,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA3U36LQXRS6GM2FLY6HCBLRSCLGFANCNFSM4NDU4F7Q
.

Ah, very good, now I get it. Thank your for sending this! I think it looks
great. Will add it to the list of things to build next.
On Sun, May 17, 2020 at 8:02 PM Asim M Al Twijry notifications@github.com
wrote:

Here's an example
https://drive.google.com/file/d/1Ewh_kkJ98dipRevxCilRH2a8KeqUK7iT/view?usp=drivesdk
On Mon, 18 May 2020, 05:18 Martin Omander, notifications@github.com
wrote:

Thank you for the proposal, Asim!
Could add some more details? I don't think I understand, but i would like
to.
On Sun, May 17, 2020 at 6:39 PM Asim M Al Twijry <
notifications@github.com

wrote:

Hello 👋
Thanks for the great work!
Is it possible to shuffle the names above the wheel in plain text?
Because when we add +200 name, you won't be able to read the names from
the wheel.
https://youtu.be/yL5clbrvmyY?t=480
Thanks
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/momander/wheel-spinner/issues/6, or unsubscribe
<

https://github.com/notifications/unsubscribe-auth/AAD2AIJUP3CV6464GS6IQVLRSCGUHANCNFSM4NDU4F7Q

.

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<
https://github.com/momander/wheel-spinner/issues/6#issuecomment-629909724
,
or unsubscribe
<
https://github.com/notifications/unsubscribe-auth/AA3U36LQXRS6GM2FLY6HCBLRSCLGFANCNFSM4NDU4F7Q
.

—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/momander/wheel-spinner/issues/6#issuecomment-629920018,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAD2AINVBRJ5MJYBTXV6SETRSCQM3ANCNFSM4NDU4F7Q
.

The Wheel has a method getNameAtPointer().
Naive approach would be to call a function at an interval and update DOM innerText, depending upon the interval, the value will not be in exact sync with entry at the pointer. Also updating DOM innerText too frequently will have performance implications.
A slightly better performance approach would be to raise events as the value at pointer changes, however, this will still have issues at the high speed of wheel rotating. Unless the values are not updated at high speed and only updated at certain low speed.
The correct way to solve this would be to use the same animation approach used to spin the wheel. That way both the name at the pointer and the name value will be always in sync, as the browser paints them.

Excellent analysis, johnberry09! Thank you.

authors: AsimNet johnberry09 momander

repo: momander/wheel-spinner


text:
Possible to get week number relative to month?

week() returns the week number according to year, what i'd like to get is week number relative to month. Is it possible?

It's not built-in, but basically you can subtract the week number of the start of the month from the week number of the date in question.
function weekOfMonth(m) {
  return m.week() - moment(m).startOf('month').week() + 1;
}

Note that week function is locale specific, so in some cases you might want to use isoWeek instead.  (See the docs).

If someone wants to add this to moment, a PR with the above function (or similar) and related unit tests would be appreciated.

Tracking in PR #2965.  Thanks!

What about adding this ability to format function?

It's not built-in, but basically you can subtract the week number of the start of the month from the week number of the date in question.
function weekOfMonth(m) {
  return m.week() - moment(m).startOf('month').week() + 1;
}

Note that week function is locale specific, so in some cases you might want to use isoWeek instead. (See the docs).
moment("2018-12-31") -> weekOfMonth = -48

In some years week() will return 1 for the last days of the year, see #4019. So it messes up the calculations as @Knjaz89 mentioned.
Therefore the right way to calculate the weekOfMonth is:
function weekOfMonth(date) {
  let weekInYearIndex = date.week();
   if (date.year() !== date.weekYear()) {
	weekInYearIndex = date.clone().subtract(1,'week').week() + 1;
    }
    const weekIndex = weekInYearIndex - moment(date).startOf('month').week() + 1;
  }

weekOfMonth(moment('2018-12-31T00:00:00.000Z')); // return 6
weekOfMonth(moment('2019-01-01T00:00:00.000Z')); // return 1

It up a 2020, weekly index it was difficult to calculate the number,
but settled with the help of the @eitanfr
Thank you.

I did it in this way:
const weekOfMonth = (date) => {
    const dayInMonth = moment(date).date();
    return Math.floor(dayInMonth / 7);
}

In some years week() will return 1 for the last days of the year, see #4019. So it messes up the calculations as @Knjaz89 mentioned.
Therefore the right way to calculate the weekOfMonth is:
function weekOfMonth(date) {
  let weekInYearIndex = date.week();
   if (date.year() !== date.weekYear()) {
	weekInYearIndex = date.clone().subtract(1,'week').week() + 1;
    }
    const weekIndex = weekInYearIndex - moment(date).startOf('month').week() + 1;
  }

weekOfMonth(moment('2018-12-31T00:00:00.000Z')); // return 6
weekOfMonth(moment('2019-01-01T00:00:00.000Z')); // return 1

For 02.01.2020 it will return -52, so I fixed that case:
function getWeekOfMonth(dateObj) {
const date = m(dateObj);
const weekInYear = date.isoWeek();
const result = weekInYear - date.startOf('month').isoWeek();
return result < 0 ? weekInYear : result;

}

It's not built-in, but basically you can subtract the week number of the start of the month from the week number of the date in question.
function weekOfMonth(m) {
  return m.week() - moment(m).startOf('month').week() + 1;
}

Note that week function is locale specific, so in some cases you might want to use isoWeek instead. (See the docs).

Awesome (y)

FYI @M7Arman doesn't work for 2020-08-30, your function reports week 4, but we're in week 6.

FYI @M7Arman doesn't work for 2020-08-30, your function reports week 4, but we're in week 6.

@michaelhayman you mean we are in week 5 ?

This doesn't work if the last week of month is common with next yeah e.g. 31 Dec 2020 is Tuesday  and its is considered week 1 in the new year.
this was my solution to the problem
`
function getWeekIndexInMonth(day) {
const startOfMonth = moment(day).startOf('month');
const endOfMonth = moment(day).endOf('month');
let currentMomentDate = moment(startOfMonth);
const weeks = [];
while (currentMomentDate.isBefore(endOfMonth)) {
weeks.push(currentMomentDate.week());
currentMomentDate.add(1, "weeks").startOf("week");
}
return weeks.indexOf(day.week())
}
`

function weekOfMonth(m) {
  return m.week() - moment(m).startOf('month').week() + 1;
}

Just FYI, if I don't set the locale I get unexpected results.
Here's an example where I don't set the locale and I get unexpected results (negative week of months):
import moment from "moment";

function weekOfMonth(m) {
    return m.week() - moment(m).startOf('month').week() + 1;
}

const m = moment();
m.set({year: 2021, month: 11, date: 1}); // (months are 0-based, days are 1-based)

const decNumDays = m.daysInMonth();
console.log("Number of days in December:", decNumDays);

const result = [];
for (let date = 1; date <= decNumDays; date++) {
    m.set('date', date);
    result.push({
        dayName: m.format("dddd"),
        dayOfMonth: date,
        weekOfMonth: weekOfMonth(m)
    })
}

console.log(result)

Result:
[
  { dayName: 'Wednesday', dayOfMonth: 1, weekOfMonth: 1 },
  { dayName: 'Thursday', dayOfMonth: 2, weekOfMonth: 1 },
  { dayName: 'Friday', dayOfMonth: 3, weekOfMonth: 1 },
  { dayName: 'Saturday', dayOfMonth: 4, weekOfMonth: 1 },
  { dayName: 'Sunday', dayOfMonth: 5, weekOfMonth: 2 },
  { dayName: 'Monday', dayOfMonth: 6, weekOfMonth: 2 },
  { dayName: 'Tuesday', dayOfMonth: 7, weekOfMonth: 2 },
  { dayName: 'Wednesday', dayOfMonth: 8, weekOfMonth: 2 },
  { dayName: 'Thursday', dayOfMonth: 9, weekOfMonth: 2 },
  { dayName: 'Friday', dayOfMonth: 10, weekOfMonth: 2 },
  { dayName: 'Saturday', dayOfMonth: 11, weekOfMonth: 2 },
  { dayName: 'Sunday', dayOfMonth: 12, weekOfMonth: 3 },
  { dayName: 'Monday', dayOfMonth: 13, weekOfMonth: 3 },
  { dayName: 'Tuesday', dayOfMonth: 14, weekOfMonth: 3 },
  { dayName: 'Wednesday', dayOfMonth: 15, weekOfMonth: 3 },
  { dayName: 'Thursday', dayOfMonth: 16, weekOfMonth: 3 },
  { dayName: 'Friday', dayOfMonth: 17, weekOfMonth: 3 },
  { dayName: 'Saturday', dayOfMonth: 18, weekOfMonth: 3 },
  { dayName: 'Sunday', dayOfMonth: 19, weekOfMonth: 4 },
  { dayName: 'Monday', dayOfMonth: 20, weekOfMonth: 4 },
  { dayName: 'Tuesday', dayOfMonth: 21, weekOfMonth: 4 },
  { dayName: 'Wednesday', dayOfMonth: 22, weekOfMonth: 4 },
  { dayName: 'Thursday', dayOfMonth: 23, weekOfMonth: 4 },
  { dayName: 'Friday', dayOfMonth: 24, weekOfMonth: 4 },
  { dayName: 'Saturday', dayOfMonth: 25, weekOfMonth: 4 },
  { dayName: 'Sunday', dayOfMonth: 26, weekOfMonth: -47 },
  { dayName: 'Monday', dayOfMonth: 27, weekOfMonth: -47 },
  { dayName: 'Tuesday', dayOfMonth: 28, weekOfMonth: -47 },
  { dayName: 'Wednesday', dayOfMonth: 29, weekOfMonth: -47 },
  { dayName: 'Thursday', dayOfMonth: 30, weekOfMonth: -47 },
  { dayName: 'Friday', dayOfMonth: 31, weekOfMonth: -47 }
]

And here's an example where I get correct results when I set the locale:
import moment from "moment";

moment.locale('en-au');

function weekOfMonth(m) {
    return m.week() - moment(m).startOf('month').week() + 1;
}

const m = moment();
m.set({year: 2021, month: 11, date: 1}); // (months are 0-based, days are 1-based)

const decNumDays = m.daysInMonth();
console.log("Number of days in December:", decNumDays);

const result = [];
for (let date = 1; date <= decNumDays; date++) {
    m.set('date', date);
    result.push({
        dayName: m.format("dddd"),
        dayOfMonth: date,
        weekOfMonth: weekOfMonth(m)
    })
}

console.log(result)

Result:
[
  { dayName: 'Wednesday', dayOfMonth: 1, weekOfMonth: 1 },
  { dayName: 'Thursday', dayOfMonth: 2, weekOfMonth: 1 },
  { dayName: 'Friday', dayOfMonth: 3, weekOfMonth: 1 },
  { dayName: 'Saturday', dayOfMonth: 4, weekOfMonth: 1 },
  { dayName: 'Sunday', dayOfMonth: 5, weekOfMonth: 2 },
  { dayName: 'Monday', dayOfMonth: 6, weekOfMonth: 2 },
  { dayName: 'Tuesday', dayOfMonth: 7, weekOfMonth: 2 },
  { dayName: 'Wednesday', dayOfMonth: 8, weekOfMonth: 2 },
  { dayName: 'Thursday', dayOfMonth: 9, weekOfMonth: 2 },
  { dayName: 'Friday', dayOfMonth: 10, weekOfMonth: 2 },
  { dayName: 'Saturday', dayOfMonth: 11, weekOfMonth: 2 },
  { dayName: 'Sunday', dayOfMonth: 12, weekOfMonth: 3 },
  { dayName: 'Monday', dayOfMonth: 13, weekOfMonth: 3 },
  { dayName: 'Tuesday', dayOfMonth: 14, weekOfMonth: 3 },
  { dayName: 'Wednesday', dayOfMonth: 15, weekOfMonth: 3 },
  { dayName: 'Thursday', dayOfMonth: 16, weekOfMonth: 3 },
  { dayName: 'Friday', dayOfMonth: 17, weekOfMonth: 3 },
  { dayName: 'Saturday', dayOfMonth: 18, weekOfMonth: 3 },
  { dayName: 'Sunday', dayOfMonth: 19, weekOfMonth: 4 },
  { dayName: 'Monday', dayOfMonth: 20, weekOfMonth: 4 },
  { dayName: 'Tuesday', dayOfMonth: 21, weekOfMonth: 4 },
  { dayName: 'Wednesday', dayOfMonth: 22, weekOfMonth: 4 },
  { dayName: 'Thursday', dayOfMonth: 23, weekOfMonth: 4 },
  { dayName: 'Friday', dayOfMonth: 24, weekOfMonth: 4 },
  { dayName: 'Saturday', dayOfMonth: 25, weekOfMonth: 4 },
  { dayName: 'Sunday', dayOfMonth: 26, weekOfMonth: 5 },
  { dayName: 'Monday', dayOfMonth: 27, weekOfMonth: 5 },
  { dayName: 'Tuesday', dayOfMonth: 28, weekOfMonth: 5 },
  { dayName: 'Wednesday', dayOfMonth: 29, weekOfMonth: 5 },
  { dayName: 'Thursday', dayOfMonth: 30, weekOfMonth: 5 },
  { dayName: 'Friday', dayOfMonth: 31, weekOfMonth: 5 }
]

authors: Assem-Hafez InstanceOfMichael Knjaz89 M7Arman behrangsa bonesoul daniaaalarshad eitanfr michaelhayman mj1856 samslow

repo: moment/moment


text:
Fix inconsistent output on new year

Comparing last week of year N and first week of year N+1 produced wrong result

Coverage remained the same at 94.647% when pulling 9844b4476ef1a63f9ece2dde061d685aa75cc1fb on kylekatarnls:patch-2 into 2e2a5b35439665d4b0200143d808a7c26d6cd30f on moment:develop.

@kylekatarnls - please add a test case documenting what you are trying to change.

You get inconsistency on year overlap:
moment('2017-12-31').locale('ja').calendar(moment('2018-01-03'))
// "日曜日 00:00"
moment('2018-01-06').locale('ja').calendar(moment('2018-01-09'))
// "先週土曜日 00:00"

Both should return "先週土曜日 00:00"
You can see on this PR the week comparison is currently done with < which fails for 52(2017) < 1(2018)

authors: coveralls kylekatarnls marwahaha


text:
chore(main): release momento 0.4.9

:robot: I have created a release beep boop
0.4.9 (2024-04-30)
Bug Fixes

remove token and specify email for the redundant tag (#168) (c119376)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/momentohq/client-sdk-ruby/releases/tag/momento/v0.4.9 :sunflower:

repo: momentohq/client-sdk-ruby


text:
chore: add heartbeat support

Bumping the SDK version for heartbeart support. Interrupted
will now happen for this class of timeout instead of a stream
read error.
Here's a fresh subscription receiving a heartbeat on subscribe:
$ momento -p alpha topic subscribe asd --cache roflmao --verbose
[2023-02-16T00:42:56Z DEBUG momento::utils::user] Token already expired at: 2022-06-02 23:54:38 UTC
[2023-02-16T00:42:56Z DEBUG momento::utils::user] No session found in .momento_session profile...
[2023-02-16T00:42:56Z DEBUG rustls::anchors] add_parsable_certificates processed 166 valid and 0 invalid certs
[2023-02-16T00:42:56Z DEBUG hyper::client::connect::dns] resolving host="cache.cell-alpha-dev.preprod.a.momentohq.com"
[2023-02-16T00:42:56Z DEBUG hyper::client::connect::http] connecting to 54.186.170.81:443
[2023-02-16T00:42:56Z DEBUG hyper::client::connect::http] connected to 54.186.170.81:443
[2023-02-16T00:42:56Z DEBUG rustls::client::hs] No cached session for DnsName(DnsName(DnsName("cache.cell-alpha-dev.preprod.a.momentohq.com")))
[2023-02-16T00:42:56Z DEBUG rustls::client::hs] Not resuming any session
[2023-02-16T00:42:56Z DEBUG rustls::client::hs] Using ciphersuite Tls13(Tls13CipherSuite { suite: TLS13_AES_256_GCM_SHA384, bulk: Aes256Gcm })
[2023-02-16T00:42:56Z DEBUG rustls::client::tls13] Not resuming
[2023-02-16T00:42:56Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [Protocols([PayloadU8([104, 50])])]
[2023-02-16T00:42:56Z DEBUG rustls::client::hs] ALPN protocol is Some(b"h2")
[2023-02-16T00:42:56Z DEBUG h2::client] binding client connection
[2023-02-16T00:42:56Z DEBUG h2::client] client connection bound
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_write] send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384 }
[2023-02-16T00:42:56Z DEBUG h2::proto::connection] Connection; peer=Client
[2023-02-16T00:42:56Z DEBUG tower::buffer::worker] service.ready=true message=processing request
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_write] send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 5177345 }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_write] send frame=Headers { stream_id: StreamId(1), flags: (0x4: END_HEADERS) }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_write] send frame=Data { stream_id: StreamId(1) }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_write] send frame=Data { stream_id: StreamId(1), flags: (0x1: END_STREAM) }
[2023-02-16T00:42:56Z DEBUG rustls::client::tls13] Ticket saved
[2023-02-16T00:42:56Z DEBUG rustls::client::tls13] Ticket saved
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_read] received frame=Settings { flags: (0x0), header_table_size: 4096, max_concurrent_streams: 100, initial_window_size: 1048576, enable_connect_protocol: 0 }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_write] send frame=Settings { flags: (0x1: ACK) }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_read] received frame=WindowUpdate { stream_id: StreamId(0), size_increment: 983041 }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_read] received frame=Settings { flags: (0x1: ACK) }
[2023-02-16T00:42:56Z DEBUG h2::proto::settings] received settings ACK; applying Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384 }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_read] received frame=Headers { stream_id: StreamId(1), flags: (0x4: END_HEADERS) }
[2023-02-16T00:42:56Z DEBUG h2::codec::framed_read] received frame=Data { stream_id: StreamId(1) }
[2023-02-16T00:42:56Z DEBUG momento::preview::topics] received a heartbeat

Here's what happens (--verbose) now on a subscription timeout regardless of
whether something was published:
[2023-02-16T00:45:12Z DEBUG momento::preview::topics] received a heartbeat
[2023-02-16T00:46:12Z DEBUG h2::codec::framed_read] received frame=Reset { stream_id: StreamId(1), error_code: NO_ERROR }
[2023-02-16T00:46:12Z DEBUG tonic::codec::decode] decoder inner stream error: Status { code: Unknown, message: "error reading a body from connection: stream error received: not a result of an error", source: Some(hyper::Error(Body, Error { kind: Reset(StreamId(1), NO_ERROR, Remote) })) }
[2023-02-16T00:46:12Z DEBUG momento::response::error] translating raw status to error: Status { code: Unknown, message: "error reading a body from connection: stream error received: not a result of an error", source: Some(hyper::Error(Body, Error { kind: Reset(StreamId(1), NO_ERROR, Remote) })) }
The subscription ended: the request was interrupted by the server without an error
detail: TonicStatus(Status { code: Unknown, message: "error reading a body from connection: stream error received: not a result of an error", source: Some(hyper::Error(Body, Error { kind: Reset(StreamId(1), NO_ERROR, Remote) })) })

rebased for the restructure - it's a small enough pr I just force pushed.

repo: momentohq/momento-cli


text:
SakeDokoへのエクスポート

Why/ 背景
SakeDoko というサービスがある。
酒の種類と買った場所を登録してマイマップを作れる。
What/ 何をしたいか
SAKAZUKIに登録した酒ページに、SakeDokoへの登録リンクをおけないか？
銘柄、銘柄詳細、買った日付くらいをいれれると便利そう。

How/ どうやって実現するか
SakeDoko、param受け入れてるかから調査。

そもそも/posts/newへダイレクトにアクセスすると、/mypagesに飛ばされちゃうな。
ぴえん。

ダメそう

repo: momocus/sakazuki


text:
酒indexのデザインを新しくした！

after #469
fix #405
ついに新たな酒indexとなったぞ！
やったこと

酒indexを新たなデザインにした

カードデザインを採用した
画面サイズによって3列・2列・1列が切り替わる
グラフは4x3ですべて固定した

各種RSpecを修正した

構造が大きく変わったので、testidの振り方を修正
変更箇所のみリファクタ

ここ揃ってないんだけど、Cardでいい感じに揃える方法がわからん～～～～

どこ揃えにしても空白が目立つな・・・

やっぱ下に揃えよう

これ、新しくなったのでますますsort機能いらないな。
実際使ってないし。


text:
Corneal transplant term questions

I am having difficulties finding specific definitions and differences in some of these terms. It seems to me that some of them have overlapping meaning or are synonymous, but I haven't found a resources that defines all of them.

Corneal transplant

corneal patch graft

traditional,  full thickness cornea transplant (also known as penetrating keratoplasty, or   PK)

back layer cornea transplant (also known as endothelial keratoplasty, or EK)

Anterior lamellar keratoplasty (ALK)

@pnrobinson Do you know the difference?

Without more input or a use case, I'll just update a couple of synonyms and close.

repo: monarch-initiative/MAxO


text:
Add superclass to pregnancy loss, recurrent, 4

close #6867
@sabrina
I'm not totally certain about this. This superclass makes sense per Megan's suggestion (based on what is in the OMIM description) but it seems to be weird to have a disease that is a susceptibility and a disease. But it does seem to make sense in this case.
I wonder if maybe should remove the superclass 'fertility disorder'. Looks like I am the source and obviously, i am not an expert.

@nicolevasilevsky I agree that it is weird, but we have other examples of terms that are both diseases and susceptibilities.
What is weird here is the disease and the susceptibility are both for "pregnancy loss, recurrent".
I would suggest that we keep both these parents (susceptibility and disease), and that we review this in the context of a branch review, when we talk to experts.

authors: nicolevasilevsky sabrinatoro

repo: monarch-initiative/mondo


text:
new maxo annotation example

This is a new maxo annotation example for PMID 31078652, in a new subfolder  under cases called hannah_manual_annotations.

Thanks @hannahblau

authors: caufieldjh hannahblau

repo: monarch-initiative/ontogpt-experiments


text:
Fix floating point casting to integer in PHP calculator

Fixes #455

@chekalskiy can you please check if this solves the issue for you?

Yup, it did.

I'll check a bit later. Thank you

I've tested and now my test case looks fine. 👍
But shouldn't we add castString() to add(), subtract(), absolute() and mod() methods?

No, as they don't involve casting float to string:

add: adding two integers will result in an integer anyway
subtract: subtracting one integer from another will result in an integer
absolute: there is no calculation related to precision
mod: there is no calculation related to precision

But I've just found other places where the tests break. I added a new test case for running all tests with russian UTF8 locale for the php calculator.

@frederikbosch see the separate commit with the breaking tests. Solution pushed in a separate commit.

Merging this as it fixes the problem, but I'm going to do some refactoring around the number class. I feel that there is too many string casting here and there.

Totally agree. In my perception, in version 4 we should use Number everwhere internally. That means only accepting Number or directly do the conversion on every numeric parameter.

authors: chekalskiy frederikbosch sagikazarmark

repo: moneyphp/money


text:
Ability to parse UUID

https://github.com/mongkok/fastapi-debug-toolbar/blob/3552b0bbb8e1a86a4f5eaaf214e6916d52c941ef/debug_toolbar/panels/sql.py#L120-L121
Using UUID field raise an exception
*** TypeError: Object of type UUID is not JSON serializable
I suggest, adding UUID serialization, by cast to str
if isinstance(obj, UUID):
    return str(obj)

Or allow setting encoder on json.dumps method

For anyone finding this issue, I bumped into the same situation and managed to find a workaround using FastAPI's jsonable_encoder:
from debug_toolbar.panels.sqlalchemy import SQLAlchemyPanel as Base
from fastapi.encoders import jsonable_encoder

class SQLAlchemyPanel(Base):
    def after_execute(self, *args) -> None:  # type: ignore
        # HACK: base SQL panel calls json.dumps(parameters) at some point.
        # Ensure values such as UUIDs can be dumped.
        parameters = args[3]
        args = (*args[:3], jsonable_encoder(parameters), *args[4:])
        return super().after_execute(*args)

It can then be used by passing panels=["path.to.panels.SQLAlchemyPanel"].

Hey @deby22 , issue is fixed using jsonable_encoder() as suggested by @florimondmanca , see #23 and v0.3.0.

authors: deby22 florimondmanca mongkok

repo: mongkok/fastapi-debug-toolbar


text:
Does not work with latest models

It does not produce response with text-embedding-3-small and gpt-4o combination

can you provide more information about the error that you're getting so we can help debug?
as a first step, you can try to lower the minScore in the FindContentFunc. the .9 that we have as a default in the quick start works well for ada-02 but is often too high for text-embedding-3-small.
const findContent = makeDefaultFindContent({
  embedder,
  store: embeddedContentStore,
  findNearestNeighborsOptions: {
    k: 5,
    path: "embedding",
    indexName: VECTOR_SEARCH_INDEX_NAME,
    // Start low to make sure all is working, and work your way up to a higher score if it's suiting.
    minScore: 0.1,
  },
});

Followed your suggestion to lower the minScore to 0.1 and that worked. Thank you!

authors: hasaketa mongodben

repo: mongodb/chatbot


text:
test: remove tests for deprecated command

Proposed changes
Remove tests for deprecated command, this commands have been deprecated for a while and they are starting to flake so better to remove them
Checklist

[x] I have added tests that prove my fix is effective or that my feature works
[x] I have added any necessary documentation (if appropriate)
[x] I have updated e2e/E2E-TESTS.md (if a new command or e2e test has been added)
[x] I have run make fmt and formatted my code

is there an entry that needs to be removed/changed in E2e-TESTS.md as a result of this?

good call, I deleted the entries as we don't even document these commands any more, we should plan some time to start deleting some of the deprecated stuff

repo: mongodb/mongocli


text:
Cannot insert a field with '.' ('dot') in field name

Summary:
Cannot insert any Map that contains e.g. mail (with dot) as a key. Tested on Morphia 1.3.2.
Steps to reproduce:

Create class containing map, e.g.:

class MyObjectWithMap {
        Map<String, String> map = Maps.newHashMap();
}

Try to save object:

MyObjectWithMap obj = new MyObjectWithMap();
obj.map.put("keyOk", "OK");
getDs().save(obj); // Works well
obj.map.put("key.notOK", "notOK");
getDs().save(obj); // Throws exception

See result:

java.lang.IllegalArgumentException: Invalid BSON field name key.notOK
	at org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:532)
	at com.mongodb.DBObjectCodec.encodeMap(DBObjectCodec.java:221)
	at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:198)
	at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:130)
	at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:61)
	at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
	at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
	at com.mongodb.operation.BulkWriteBatch$WriteRequestEncoder.encode(BulkWriteBatch.java:392)
(... cut ...)

Additional info:
MongoDB docs ( https://docs.mongodb.com/manual/reference/limits/#Restrictions-on-Field-Names ) allows "." char. Also adding a document containing field with "." from Mongo shell works well.
This is same problem to #827, but this time MongoDB (at least from 3.6) allows to use "." char in field names.

Updates title and description to reflect reality - it is again about "."  (dot) char...

Run into the same issue right now. We've got 2018 and MongoDB nor Morphia is able to store a darn dot in the key. 💢👿 😡

This complaint is actually coming from the driver and not morphia.  morphia just passes the name down to the driver which is rejecting the name.  Consider filing a bug there.  You might also try a new version fo the java driver and see if that behavior persists.

@evanchooly You're right! Sorry for messing up and filling it here. Closing it and going to complain on Mongo bug tracker. ;-)

For everybody running into same problem - there is an issue on Mongo tracker:
https://jira.mongodb.org/browse/JAVA-2810

repo: mongodb/morphia


text:
Mongoid support for non-rack applications

I'm using Mongoid in a non-rack application, and after updating to 2.4.0 I started receiving the error "Mongoid attempted to find the appropriate environment but no Rails.env, Sinatra::Base.environment, or RACK_ENV could be found" as soon as i load the configuration.
Is Mongoid going to support only rack based applications?

Sorry about that... Can you just use RACK_ENV for now and then I'll get this fixed for 2.4.1?

How exactly are you determining what environment you are running under?

I'm not determining it, I know it's a bare eventmachine ... the app is not running within any external environment, it's self contained.

authors: danielemilan durran

repo: mongoid/mongoid


text:
sub-document virtuals in nested arrays don't get attached when specified

Do you want to request a feature or report a bug?
Bug
What is the current behaviour?
The virtuals of sub-documents in nested arrays aren't attached to the result when I specify the virtual paths { virtuals: [...] }. It works fine when I lean the query with { virtuals: true }
If the current behaviour is a bug, please provide the steps to reproduce.
import mongoose from "mongoose";
import { mongooseLeanVirtuals } from "mongoose-lean-virtuals";

mongoose.plugin(mongooseLeanVirtuals);

const NameSchema = new mongoose.Schema({
  first: { type: String, required: true },
  last: String,
});

NameSchema.virtual("full").get(function () {
  return `${this.first} ${this.last ?? ""}`.trim();
});

const ChildSchema = new mongoose.Schema({
  age: { type: Number, required: true },
  name: { type: NameSchema, required: true },
}, { _id: false });

const ParentModel = mongoose.model(
  "Parent",
  new mongoose.Schema({
    name: { type: NameSchema, required: true },
    child: ChildSchema,
    nested: new mongoose.Schema({
      children: [ChildSchema],
    }),
  })
);

async function run() {
  await mongoose.connect("...");

  await ParentModel.create({
    name: { first: "Homer", last: "Simpson" },
    child: { age: 10, name: { first: "Bart", last: "Simpson" } },
    nested: {
      children: [
        { age: 6, name: { first: "Lisa", last: "Simpson" } },
        { age: 3, name: { first: "Baby" } },
      ],
    },
  });

  const result = await ParentModel.find({})
    .populate("child")
    .populate("nested.children")
    .lean({
      virtuals: ["name.full", "child.name.full", "children.name.full"],
    });

  assert.equal(result.name.full, "Homer Simpson"); // Pass
  assert.equal(result.child.name.full, "Bart Simpson"); // Pass
  assert.equal(result.children[0].name.full, "Lisa Simpson"); // Fail
  assert.equal(result.children[1].name.full, "Baby"); // Fail
}

run().catch(console.error)

What is the expected behaviour?
For the virtuals of the sub-documents in nested arrays to be attached.
What are the versions of Node.js, mongoose-lean-getters, and Mongoose are you are using? Note that "latest" is not a version.

Package
Version

mongoose
6.4.3

mongoose-lean-getters
N/A

Node.js
18.6.0

You need to specify nested.children.name.full. The script you provided fails, but the below script works:
const mongoose = require('mongoose');
const mongooseLeanVirtuals = require('mongoose-lean-virtuals');
const assert = require('assert');

mongoose.plugin(mongooseLeanVirtuals);

const NameSchema = new mongoose.Schema({
  first: { type: String, required: true },
  last: String,
});

NameSchema.virtual("full").get(function () {
  return `${this.first} ${this.last ?? ""}`.trim();
});

const ChildSchema = new mongoose.Schema({
  age: { type: Number, required: true },
  name: { type: NameSchema, required: true },
}, { _id: false });

const ParentModel = mongoose.model(
  "Parent",
  new mongoose.Schema({
    name: { type: NameSchema, required: true },
    child: ChildSchema,
    nested: new mongoose.Schema({
      children: [ChildSchema],
    }),
  })
);

async function run() {
  await mongoose.connect("mongodb://localhost:27017/test");
  await mongoose.connection.dropDatabase();

  const { _id } = await ParentModel.create({
    name: { first: "Homer", last: "Simpson" },
    child: { age: 10, name: { first: "Bart", last: "Simpson" } },
    nested: {
      children: [
        { age: 6, name: { first: "Lisa", last: "Simpson" } },
        { age: 3, name: { first: "Baby" } },
      ],
    },
  });

  const result = await ParentModel.findById(_id)
    .populate("child")
    .populate("nested.children")
    .lean({
      virtuals: ["name.full", "child.name.full", "nested.children.name.full"], // <-- note the 'nested.'
    });

  assert.equal(result.name.full, "Homer Simpson"); // Pass
  assert.equal(result.child.name.full, "Bart Simpson"); // Pass
  assert.equal(result.nested.children[0].name.full, "Lisa Simpson"); // Pass
  assert.equal(result.nested.children[1].name.full, "Baby"); // Pass
  console.log('Done');
}

run().catch(console.error)

Also works fine if you remove the 'nested'

Hey @vkarpov15, forgive my invalid script. I'll try to explain my actual use case and give an excuse for why my script had errors.
I have a model with 2 discriminator schemas applied to it. The ParentModel.child and ParentModel.nested... was meant to show the field I'm trying to populate between them. They both point to the same model it just doesn't work with virtuals on the array of sub-documents.
So I created a repro script to use here with populating the fields, and it didn't work. So I tried to check if it affected other schema definitions as well. That's why my original script has .populate("...") calls when the fields don't need it and the values aren't correctly checked.
This is another script that I'm pretty sure will show my issue. Thanks again for your putting up with me and all your efforts across all the mongoose packages.
import assert from "node:assert";

import mongoose from "mongoose";
import { mongooseLeanVirtuals } from "mongoose-lean-virtuals";

async function run() {
  mongoose.plugin(mongooseLeanVirtuals);
  await mongoose.connect("...");

  const NameSchema = new mongoose.Schema({
    first: { type: String, required: true },
    last: String,
  });

  NameSchema.virtual("full").get(function () {
    return `${this.first} ${this.last ?? ""}`.trim();
  });

  const ChildModel = mongoose.model(
    "Child",
    new mongoose.Schema({
      age: { type: Number, required: true },
      name: { type: NameSchema, required: true },
    })
  );

  const ParentModel = mongoose.model(
    "Parent",
    new mongoose.Schema({
      name: { type: NameSchema, required: true },
      child: { type: mongoose.Types.ObjectId, ref: "Child" },
      nested: {
        type: [new mongoose.Schema({ item: { type: mongoose.Types.ObjectId, ref: "Child" } })],
      },
    })
  );

  const [child_1, child_2, child_3] = await ChildModel.create([
    { age: 10, name: { first: "Bart", last: "Simpson" } },
    { age: 6, name: { first: "Lisa", last: "Simpson" } },
    { age: 3, name: { first: "Baby" } },
  ]);

  await ParentModel.create({
    name: { first: "Homer", last: "Simpson" },
    child: child_1._id,
    nested: [{ item: child_3._id }, { item: child_2._id }],
  });

  const result = await ParentModel.findOne({})
    .populate("child")
    .populate("nested.item")
    .orFail(new Error("DOC!"))
    .lean({ virtuals: ["name.full", "child.name.full", "nested.item.name.full"] });

  assert.equal(result.name.full, "Homer Simpson"); // Pass
  assert.equal(result.child?.name.full, "Bart Simpson"); // Pass
  assert.equal(result.nested[0].item?.name.full, "Baby"); // Fail
  assert.equal(result.nested[1].item?.name.full, "Lisa Simpson"); // Fail
}

run();

Also, did you mean to close #36? The PR you linked didn't have an effect because you used the Fix keyword on #37

We took a closer look and this proves to be tricky to implement in general with how Mongoose populate works. Without hooking more closely into Mongoose populate, handling cases like discriminators isn't really feasible. However, there is a simple workaround:
  const result = await ParentModel.findOne({})
    .populate("child")
    .populate({ path: "nested.item", options: { lean: { virtuals: ['name.full'] } } }) // <-- add the `name.full` virtual here
    .orFail(new Error("DOC!"))
    .lean({ virtuals: ["name.full", "child.name.full"] }); // <-- instead of here

repo: mongoosejs/mongoose-lean-virtuals


text:
🛑 Lobembe is down

In cc33316, Lobembe (https://lobembe.mongulu.cm) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Lobembe is back up in d2175b4 after 15 minutes.

repo: mongulu-cm/uptime


text:
⚠ Quirk Club Argentina (API endpoint) has degraded performance

In a8cb0e6, Quirk Club Argentina (API endpoint) (https://us-central1-quirkclub-dev.cloudfunctions.net/api/check/api) experienced degraded performance:

HTTP code: 200
Response time: 7418 ms

Resolved: Quirk Club Argentina (API endpoint) performance has improved in 62cf923.


text:
Update silencer-plugin to 1.7.16 in series/4.x

About this PR
📦 Updates com.github.ghik:silencer-plugin from 1.7.8 to 1.7.16
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.github.ghik", artifactId = "silencer-plugin" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.github.ghik", artifactId = "silencer-plugin" }
}]

labels: library-update, early-semver-patch, semver-spec-patch, commit-count:1

Superseded by #1838.

repo: monix/monix


text:
Usage with Scala version 2.13

When running with Scala 2.13 it turns up with java.lang.ClassNotFoundException: scala.Serializable using monix shade version "io.monix" % "shade_2.12" % "1.10.0".
But works if we use with Scala version 2.12.
Do we have a way to use with Scala 2.13 or this library to be compiled to 2.13?

This'll add support for Scala 2.13 - https://github.com/monix/shade/pull/67

authors: kr-pawan xBATx

repo: monix/shade


text:
Problem generating correct Entrypoint for method.

I'm using templates on Linux, using the CLI.exe to generate C# and the correct -Symbols.cpp files. I added the following to the CppCharp.Generator#Setup(Driver) method:
        driver.Options.GenerateClassTemplates = true;

My simple class:
#include <string>
class Example
{
public:
  Example() {};
  void print(std::string &x);
};

I use the following command:
mono --debug ~/src/CppSharp/build/gmake/lib/Release_x64/CppSharp.CLI.exe -ax64  -o=build/cppsharp Example.hpp Example.cpp

This problem is that the following lines get generated in the cppsharp.cs file:
[SuppressUnmanagedCodeSecurity]
[DllImport("cppsharp", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
   EntryPoint="_ZN7Example5printERSs")]
internal static extern void print(global::System.IntPtr __instance, global::System.IntPtr x);

The actual entry point to this function in the libcppsharp.so file is
_ZN7Example5printERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE.
Changing the _ZN7Example5printERSs in the cppsharp.cs file to the above value rectifies this problem.
Is there a way to get this entry point to generate correctly?

@ddobrev Any idea about this?

I imagine finding the mangled name has to be done by types somewhere. I imagine "RSs" meaning "Reference to Standard string", but as @ddobrev mentioned,  std::string is defined as std::basic_string<char, std::allocator<char>> on all platforms.
I added another `std::string`` parameter:
   print(std::string &x, std::string &y);

and corresponding mangled names are:
_ZN7Example5printERSsS0_
and the correct one is:
_ZN7Example5printERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_
.

@polar If you run nm on the native library, does _ZN7Example5printERSsS0_  show up as a symbol?

No, it does not.
0000000000000e11 T Example_Example
0000000000000e65 T Example__Example
0000000000000e3e T Example_Example___1__S_Example
0000000000000daa T _ZN7Example5printERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_
0000000000000f20 W _ZN7ExampleaSEOS_
0000000000000f0e W _ZN7ExampleaSERKS_
0000000000000f02 W _ZN7ExampleC1Ev
0000000000000f02 W _ZN7ExampleC2Ev

I don't really know why. It seems that std::string is supposed to mangle to "Ss".
Maybe I have a bad option in compiling these?

I have compiled Example.cpp with c++, g++, and clang++ with absolutely no options, and I get the same complicated mangled name for print.

Never mind. I needed "--c++11" in the flags, which got the proper ABI configured for the parser.

authors: polar tritao

repo: mono/CppSharp


text:
[FEATURE] Adding metadata properties to JPEG images when using SKPixmap.Encode()

Is your feature request related to a problem? Please describe.
JPEG images and other image file types can have additional metadata properties that can enhance how the picture is interpreted by renderers.  An example is the
"/xmp/{wstr=http://ns.google.com/photos/1.0/panorama/}:ProjectionType" = "equirectangular" property which identifies an image as a 360 panoramic projection image.
You can easily use the exiftool app https://exiftool.org/gui/ to add the metadata but I need to add it in the code of my app.
Describe the solution you'd like
Add a dictionary property to SKJpegEncoderOptions to enable setting metadata properties when encoding JPEG images.
Describe alternatives you've considered
None known.
Additional context

Any thoughts around this?

PNG format has metadata as well which should be writable.

authors: BenMcLean andreasbrostencab mscherotter

repo: mono/SkiaSharp


text:
Colab 환경에서 KobertTokenizer 사용 시 AttributeError: token2idx 에러

부모클래스 생성자함수 super().init() 부분에서 get_vocab() 메서드를 호출하게 되는데, 이것이 초기화되어있지 않아 발생하는 오류가 있습니다.

사실 순서만 바꿔서 token2dix를 초기화한 뒤 부모클래스 생성자를 실행하면 해결됩니다.

간단하게 해결이 가능한 이슈이기도 하고, 테스트해보면 학습도 잘 되는것 같아요.

사용이 급하신 분들은 #12 Pull Request의 tokenization_kobert.py 파일을 가져다가 사용하시면 됩니다.

repo: monologg/KoBERT-Transformers


text:
Unexpected start of next frame

Connection between XBee client and TCP server is not stable.
Before TCP connection drop The warning "unexpected start of next frame" is printed.

Byte processing is fixed. End of the frame will not be missed anymore.

repo: monstrenyatko/butler-xbee-gateway


text:
ReferenceError cordova is not defined

Tried to follow instrutctions given here : https://docs.moodle.org/dev/Setting_up_your_development_environment_for_Moodle_Mobile_2
but i keep getting "cordova is not defined" when trying to connect to moodle.

Hi,
we've identified this error and we've opened an issue to fix it:
https://tracker.moodle.org/browse/MOBILE-1219
Thanks,
Dani

Hello, I Tried to follow instrutctions, but I have this problem, please help me.  Thanks :)

Closing this issue, please follow-up in the tracker

authors: carloscallahuayapa dpaloucva hitteshahuja jleyva


text:
Package implement?

Hey could you implement a package system so we can use this program in our software? chrome, err := Recovery(browser, "text.json", history,password,cookie)

ok, I would add this feature today or tomorrow.

Thank you, would it be possible to make it so you can choose only windows function so build is smaller?

@Dontmindmes compiling for windows only seems impossible!  And this tool is best used as a command-line tool.
I've added two new interface structs. The functions in these two interfaces will hopefully help you to use them in your own projects.
type Browser interface {
	InitSecretKey() error
	GetName() string
	GetSecretKey() []byte
	GetAllItems(itemName string) ([]common.Item, error)
}

type Item interface {
	ChromeParse(key []byte) error
	FirefoxParse() error
	OutPut(format, browser, dir string) error
	CopyItem() error
	Release() error
}


text:
🛑 THORN Website is down

In 6b769a6, THORN Website (https://www.thorn.so) was down:

HTTP code: 0
Response time: 0 ms

Resolved: THORN Website is back up in cd24f3f.

repo: mooncyan/Status


text:
Project name

Some words to play with:

learning
education
resonance
engineering
computation
frequency
vibration
oscillation
damping
natrual frequency
phase shift
degree of freedom
mass spring damper
mode shape
mode
eigen*
stability

Going with resonance.

repo: moorepants/resonance


text:
🛑 plex server is down

In 12e83f9, plex server ($PLEX_URL/identity) was down:

HTTP code: 0
Response time: 0 ms

Resolved: plex server is back up in 8175106 after 5 minutes.

repo: mooseburgr/kmj-wtf-upptime


text:
Reduce Jaro term proximity

We can roughly assume terms should match within a few positions relative to each other. Queries should contain as many terms as possible and ideally would have rough ordering similar to indexed terms.

Codecov Report

Merging #511 (53d1fd2) into master (766a672) will decrease coverage by 0.01%.
Report is 1 commits behind head on master.
The diff coverage is 0.00%.

:exclamation: Current head 53d1fd2 differs from pull request most recent head 489fc9e. Consider uploading reports for the commit 489fc9e to get more accurate results

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff            @@
##           master    #511      +/-   ##
=========================================
- Coverage    8.27%   8.26%   -0.01%
=========================================
  Files          44      44
  Lines        3492    3496       +4
=========================================
  Hits          289     289
- Misses       3180    3184       +4
  Partials       23      23

authors: adamdecaf codecov-commenter

repo: moov-io/watchman


text:
Support macOS 11 Big Sur Binary Downloads

There was some compatibility code for Golang versions less than 1.4.3 that broke installs on Big Sur. Prior to 1.4.3, there were two versions for osx10.8 and osx10.6. 1.4.3 introduced a unified amd64 version. When OS X changed the major version from 10 to 11, that logic broke.
This patch moves that compatibility logic into the "less than 1.4.3" check, and now checks both the major and minor version of macOS.
I tried a different patch that would download go1.4.2.darwin-amd64-osx10.8.pkg on Big Sur, and it installed successfully, but go version printed a stack trace, so I adjusted the patch to print Binary Go unavailable for this platform. I tested, go1.4.2 and it installs, but also crashes. go1.5 installed and passed my go version test. We could write more code to protect Big Sur users from this, but I doubt many developers are still trying to use a Golang from 2015 on Big Sur, and I don't think my go version test is a comprehensive compatibility test anyways.
PS: I included a whitespace-only commit, as a few lines used spaces for indentation while the overwhelming majority of the file used tabs.

I just noticed that https://github.com/moovweb/gvm/pull/364 is largely the same patch. Moving the macOS specific checks into the 1.4.x check is slightly better (since they only matter if that check passes), but it's a very minor optimization.

repo: moovweb/gvm


text:
get toplist not working, len of list is empty

toplist = self.session.get_toplist(type=spotify.ToplistType.TRACKS, region='US')
toplist.load()
print len(toplist.tracks)
-> 0
print len(toplist.artists)
-> 0
Tell me how to fix this issue?
thanks!

Toplists seems to work as expected:
In [1]: import spotify

In [2]: session = spotify.Session()

In [3]: session.login('user', 'secret')

In [4]: loop = spotify.EventLoop(session)

In [5]: loop.start()

In [6]: toplist = session.get_toplist(type=spotify.ToplistType.TRACKS, region='US')

In [7]: toplist.load()
Out[7]: Toplist(type=<ToplistType.TRACKS: 2>, region='US', canonical_username=None)

In [8]: len(toplist.tracks)
Out[8]: 100

In [9]: len(toplist.artists)
Out[9]: 0

Closing, as I assume you haven't been waiting for a solution for 3.5y.

authors: hoangphuongcs jodal

repo: mopidy/pyspotify


text:
recording never starts but screenshot works

Honor 6X - Android 7
Mac OS High Sierra
Version 1.65
Just installed the latest version and recording never starts. It displays "recording finished" as soon as video recording button pressed.

Same here:

Nokia 3 - Android 7.1.1
macOS Sierra 10.12.6
AndroidTool 1.66 (1)

However sometimes clicking the video button seemingly does nothing (no indication of recording started), and sometimes it just says "recorded finished" immediately as for @redhatjobin.
No video files are created in the screen recordings either (screenshots work though).

Same for me
Samsung galaxy note 10.1 2010  Android 4.1
Mac Os/X
Screenshot is working fine
Screencast, just turn as a red square and then nothing is happening.
Here under is visible when I start by hand androidtool from my terminal window
remote object '/sdcard/capture.mp4' does not exist
mv: rename capture.mp4 to p4noteltexdJZO54Kcourtox03242018145957.mp4: No such file or directory
ffmpeg version 2.6.1 Copyright (c) 2000-2015 the FFmpeg developers
built with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
configuration: --prefix=/Volumes/Ramdisk/sw --enable-gpl --enable-pthreads --enable-version3 --enable-libspeex --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-avfilter --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-filters --enable-libgsm --enable-libvidstab --enable-libx265 --disable-doc --arch=x86_64 --enable-runtime-cpudetect
libavutil      54. 20.100 / 54. 20.100
libavcodec     56. 26.100 / 56. 26.100
libavformat    56. 25.101 / 56. 25.101
libavdevice    56.  4.100 / 56.  4.100
libavfilter     5. 11.102 /  5. 11.102
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
libpostproc    53.  3.100 / 53.  3.100

authors: courtox emmiep redhatjobin

repo: mortenjust/androidtool-mac


text:
Added --quiet option.

Suppresses most messages. Test failures will still print and the 'Total: Passed X/Y tests' line will still print.

This is a great idea. The only issue is that with test suites with only one describe, like the example project, the total isn't printed, because it wolud be wasteful to print both vector: Passed 6/7 tests and Total: Passed 6/7 tests.
I'll merge this PR, and then fix that by making it always print the total when --quiet is provided.

This is a great idea. The only issue is that when there's only one describe, which is the case in the example project, no total is printed, because it would look weird to print both vector: Passed 6/7 tests and Total: Passed 6/7 tests.
I'll make it always print the total when the --quiet option is passed.

https://github.com/mortie/snow/commit/13feeb0f129ad0754095af2403348a0392e47e8b

Thanks!

repo: mortie/snow


text:
Mosaic doesn't expand when resizing the terminal window and it panics

OS: mac-os
terminal: alacritty
When I run Mosaic inside Alaacritty, I get into a situation where mosaic pane size is stuck (and sometimes panics).
Reconstruct:

Open Alacritty to not take full-screen area.
run mosaic
resize alacritty to full screen
notice that Mosaic is still somewhat in original size and doesn't reflow.
notice that vim didn't stretch after the resize.

I think this is: https://github.com/mosaic-org/mosaic/issues/34?

I think you are correct.

authors: imsnif qballer

repo: mosaic-org/mosaic


text:
Make wandb checkpoint logging compatible with wandb model registry

What does this PR do?
This PR modifies wandb_logger.py to instantiate model checkpoints as type "model" instead of ".pt", to allow compatibility with W&B's new model registry feature, which MosaicML and WandB are cross-promoting with a demo/webinar next week.
Before submitting

[x] Have you read the contributor guidelines?
[ ] Is this change a documentation change or typo fix? If so, skip the rest of this checklist.
[ ] Was this change discussed/approved in a GitHub issue first? It is much more likely to be merged if so.
[x] Did you update any related docs and document your change?
[x] Did you update any related tests and add any new tests related to your change? (see testing)
[x] Did you run the tests locally to make sure they pass?
[x] Did you run pre-commit on your change? (see the pre-commit section of prerequisites)

@eracah

LGTM. Just curious: do you have a link to a wandb run that used this?
Why yes I do

repo: mosaicml/composer


text:
Fix wandb errror with autoresume issue

What does this PR do?
The new wandb release (0.15.5) changes it's error messages for artifact downloading failures. Our WandBLogger is designed to be EAFP instead of LBYL, so it relies on catching an exact error to prevent autoresume from trying to download checkpoints from wandb that aren't actually there.
This PR makes it so the check is not so specific (i.e. it catches all wandb CommErrors instead of just ones with specific messages). As a result, the EAFP code will then work with the new wandb install.

Unfortunately this didn't make it into v0.15.1. Will it be part of the next release?

authors: antoinebrl eracah


text:
Error in ResNet ImageNet examples

While training ResNet with the "mild" ImageNet recipe, I realized that the call to config.update(recipe_config) doesn't actually work. See these lines.
recipe_config is an OmegaConf dictionary config with keys that include dots in the name:
{
    'model.loss_name': 'binary_cross_entropy',
    'train_dataset.crop_size': 176,
    'eval_dataset.resize_size': 232,
     'max_duration': '36ep'
}

When you call config.update(recipe_config), it adds these keys to the config object directly, instead of updating theconfig.train_dataset nested-dictionary. This means the max_duration is actually 36ep because it's a top-level key, but the crop sizes will not be changed and the model loss is still cross entropy instead of the binary variant.
You can fix it like this:
for key, value in recipe_config.items():
    OmegaConf.update(config, key, value)

OmegaConf.update respects the dots in the key names.

Thanks for identifying this and providing a fix! We will merge the fix in a PR soon. Apologies for the bug 😅

authors: Landanjs samuelstevens

repo: mosaicml/examples


text:
Switch entrypoints to functions that load classes

PR Summary:
Small change post-#282 per suggestions of @uppittu11 and @ahy3nz https://github.com/mosdef-hub/foyer/pull/282#issuecomment-547144491 https://github.com/mosdef-hub/forcefield_perfluoroethers/pull/4/files#r339807274
Instead of the entrypoint being an instance of the force field, it's a function that grabs it. This cleans up the import such that the user more discretely instantiates the object. It also prevents the loading from happening upon import foyer and should save some time on imports. A quick local check saved ~0.3 seconds, no promises this is accurate.
PR Checklist

[ ] Includes appropriate unit test(s)
[ ] Appropriate docstring(s) are added/updated
[ ] Code is (approximately) PEP8 compliant
[ ] Issue(s) raised/addressed?

Looks like the last test is being skipped now (it wasn't before). Should we drop it or fix it?
foyer/tests/test_validator.py::test_forcefields[ff_file0] SKIPPED

https://travis-ci.org/mosdef-hub/foyer/jobs/605218247?utm_medium=notification&utm_source=github_status

We should remove this test because there are no forcefield xmls in foyer/forcefields/.

I put them in foyer/forcefields/xml/ but didn't update the glob in that path

Maybe we could have a function that detects which plugins are installed when you import foyer (it could save/print the list of plugins too). And this can be used to iterate through all the plugins for this test. We can stick this in another PR if that’s appropriate.
On Oct 30, 2019, at 7:20 PM, Matt Thompson notifications@github.com wrote:

@mattwthompson commented on this pull request.

In foyer/tests/test_plugin.pyhttps://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmosdef-hub%2Ffoyer%2Fpull%2F288%23discussion_r340915935&data=02|01|p.shama%40vanderbilt.edu|94ec9de2f6004448d14108d75d981e67|ba5a7f39e3be4ab3b45067fa80faecad|0|0|637080780257946600&sdata=nl%2Fm2ArV9W%2FIOC7wpOHS40UGG3qqr0BSAXYmfnvOOWM%3D&reserved=0:

@@ -6,9 +6,9 @@ def test_basic_import():
assert 'forcefields' in dir(foyer)

-@pytest.mark.parametrize('ff_name', ['OPLSAA', 'TRAPPE_UA'])
-def test_forcefields_exist(ff_name):

ff_name in dir(foyer.forcefields)
+@pytest.mark.parametrize('ff_loader', ['load_OPLSAA', 'load_TRAPPE_UA'])
+def test_forcefields_exist(ff_loader):

assert ff_loader in dir(foyer.forcefields)

What's the purpose of this test?
It's just to make sure those loader functions are there, which ...
I thought we are trying to move opls and trappe to their own repos, like PFE.
assumes, for now that we are shipping these force fields with the main repo.
I like your idea for iterating through the loaders that are in the entry point group gets at what I was going for but isn't this self-assuring? Since it only iterates through the loaders it finds, is there even a way for it to fail? I guess it could fail if the loader is bad, but the point was to check to see the loaders that we hope are there indeed exist.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fmosdef-hub%2Ffoyer%2Fpull%2F288%3Femail_source%3Dnotifications%26email_token%3DAH77TWMFWDJEOLZVFK2PV7DQRIQELA5CNFSM4JHARGS2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCJ2AH2Q%23discussion_r340915935&data=02|01|p.shama%40vanderbilt.edu|94ec9de2f6004448d14108d75d981e67|ba5a7f39e3be4ab3b45067fa80faecad|0|0|637080780257946600&sdata=ZsQx6%2FpzFNU%2Byrf5WE8W0j39fHG3J%2BE%2FeNXVO3PnJEY%3D&reserved=0, or unsubscribehttps://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAH77TWIJYP5SDIYKPVFIE3TQRIQELANCNFSM4JHARGSQ&data=02|01|p.shama%40vanderbilt.edu|94ec9de2f6004448d14108d75d981e67|ba5a7f39e3be4ab3b45067fa80faecad|0|0|637080780257956591&sdata=FM9tHEIvcK8QQddDe%2Be4C3mpw95JBI4I0%2BpWiZO82WQ%3D&reserved=0.

>>> funcs = [func for func in dir(foyer.forcefields) if 'load' in func and '__' not in func]
>>> funcs
['load_OPLSAA', 'load_TRAPPE_UA']
>>> [eval('foyer.forcefields.' + func)() for func in funcs]
[<foyer.forcefield.Forcefield object at 0x11ab12470>, <foyer.forcefield.Forcefield object at 0x11a89aa58>]

I think this accomplishes what you suggested. I also noticed that even though we're checking these functions exist, we're not checking to see that they work. Above should fix that, I think.
https://codecov.io/gh/mosdef-hub/foyer/src/update-entrypoints/foyer/forcefields/forcefields.py

@rsdefever try to update gaff with these functions

@rsdefever try to update gaff with these functions

Check out this PR too for inspiration. https://github.com/mosdef-hub/forcefield_perfluoroethers/pull/7

@ahy3nz @uppittu11 take a look at my GAFF-foyer repo. I think it is now working with the latest entry points in foyer.

repo: mosdef-hub/foyer


text:
Return periodic torsion params, regardless of k value

PR Summary:
See #470 for further details. Previously, we didn't return any parameters if the value of k == 0. This PR attempts to fix that. Resolves #470.
PR Checklist

[x] Includes appropriate unit test(s)
[x] Appropriate docstring(s) are added/updated
[x] Code is (approximately) PEP8 compliant
[x] Issue(s) raised/addressed?

/azp run

/azp run

authors: justinGilmer umesh-timalsina


text:
Modify pentaneUA statepoints for flexible and constrained

In order to compare between MD and MC treatments of pentaneUA, we need to have both rigid and flexible models for pentaneUA.
*Lammps-VU and lammps-UD can not do constrained bonds
*All MC engines and HOOMD + Gromacs can do constrained bonds
*All MC engines cannot do flexible bonds
*All MD engines can do flexible bonds

This PR updates the statepoints from init.py with two pentane "molecules"; 1 that will be treated flexibly, and one that will be treated constrained.

I looked through the rest of the files, and I think we're good now. I added pentaneUA : Pentane() to the get_molecule function in system_builder, so it should work regardless of the name for the pentane molecule, such as the one used in the spe-subproject. Good catch @jennyfothergill


text:
vscode addon for formatting and highlighting

it would be nice if you made a vscode addon for Nilesoft Shell Script (.shl).
it would add simple text highlighting and support for:

collapsing {...} and multi-line items
maybe IntelliSense

(also, it would be nice if you had a discord server👍)

i'm looking into it and i think i might beable to do it myself.

This would be a really great contribution

@moudey could you create a discord server so we could chat about this on there?

authors: Natejoestev moudey

repo: moudey/Shell