Add handling for when TKK is already rendered

Randomly the TKK value is coming back already rendered. This will handle that case.

Coverage decreased (-8.5%) to 90.204% when pulling 7b7a0d0206b56e55a3edfddc7165ca260f91949e on BoseCorp:master into 48653332effe76d0a034a730abdba1e96cd56d8a on ssut:master.

Coverage decreased (-8.5%) to 90.204% when pulling 7b7a0d0206b56e55a3edfddc7165ca260f91949e on BoseCorp:master into 48653332effe76d0a034a730abdba1e96cd56d8a on ssut:master.

Here is another version of the fix, it is a bit cleaner:
    RE_TKK = re.compile(r'TKK=eval\(\'\(\(function\(\)\{(.+?)\}\)\(\)\)\'\);',
                        re.DOTALL)
    RE_RAWTKK = re.compile(r'TKK=\'([^\']*)\';',re.DOTALL)

    def __init__(self, tkk='0', session=None, host='translate.google.com'):
        self.session = session or requests.Session()
        self.tkk = tkk
        self.host = host if 'http' in host else 'https://' + host

    def _update(self):
        """update tkk
        """
        # we don't need to update the base TKK value when it is still valid
        now = math.floor(int(time.time() * 1000) / 3600000.0)
        if self.tkk and int(self.tkk.split('.')[0]) == now:
            return

        r = self.session.get(self.host, verify=False)

        rawtkk = self.RE_RAWTKK.search(r.text)
        if rawtkk:
            self.tkk = rawtkk.group(1)
            return

@Darkblader24 Yes much cleaner, updated using your solution.

Here is another version of the fix, it is a bit cleaner:
    RE_TKK = re.compile(r'TKK=eval\(\'\(\(function\(\)\{(.+?)\}\)\(\)\)\'\);',
                        re.DOTALL)
    RE_RAWTKK = re.compile(r'TKK=\'([^\']*)\';',re.DOTALL)

    def __init__(self, tkk='0', session=None, host='translate.google.com'):
        self.session = session or requests.Session()
        self.tkk = tkk
        self.host = host if 'http' in host else 'https://' + host

    def _update(self):
        """update tkk
        """
        # we don't need to update the base TKK value when it is still valid
        now = math.floor(int(time.time() * 1000) / 3600000.0)
        if self.tkk and int(self.tkk.split('.')[0]) == now:
            return

        r = self.session.get(self.host, verify=False)

        rawtkk = self.RE_RAWTKK.search(r.text)
        if rawtkk:
            self.tkk = rawtkk.group(1)
            return

It worked for me. Thank you very much.

>         r = self.session.get(self.host, verify=False)

This will cause InsecureRequestWarning warnings, no need for the "verify"

@Darkblader24 after applying your solution i got below error..
380             obj, end = self.scan_once(s, idx)
381         except StopIteration:
382             raise ValueError("No JSON object could be decoded")
383         return obj, end

ValueError: No JSON object could be decoded

@hrishikeshpatel that appears unrelated to these changes. I can't find that code block in the library.

But i got this type of error only after making these changes..
Please see detailed error if you can help
ValueError                                Traceback (most recent call last)
 in ()
1 translator = Translator()
----> 2 t=translator.translate('hello', dest='hi')
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/site-packages/googletrans/client.pyc in translate(self, text, dest, src)
170
171         origin = text
--> 172         data = self._translate(text, dest, src)
173
174         # this code will be updated when the format is changed.
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/site-packages/googletrans/client.pyc in _translate(self, text, dest, src)
79         r = self.session.get(url, params=params)
80
---> 81         data = utils.format_json(r.text)
82         return data
83
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/site-packages/googletrans/utils.pyc in format_json(original)
60         converted = json.loads(original)
61     except ValueError:
---> 62         converted = legacy_format_json(original)
63
64     return converted
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/site-packages/googletrans/utils.pyc in legacy_format_json(original)
52             text = text[:p] + states[j][1] + text[nxt:]
53
---> 54     converted = json.loads(text)
55     return converted
56
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/json/init.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
337             parse_int is None and parse_float is None and
338             parse_constant is None and object_pairs_hook is None and not kw):
--> 339         return _default_decoder.decode(s)
340     if cls is None:
341         cls = JSONDecoder
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/json/decoder.pyc in decode(self, s, _w)
362
363         """
--> 364         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
365         end = _w(s, end).end()
366         if end != len(s):
/home/hrishikesh/anaconda3/envs/MTP_IITM/lib/python2.7/json/decoder.pyc in raw_decode(self, s, idx)
380             obj, end = self.scan_once(s, idx)
381         except StopIteration:
--> 382             raise ValueError("No JSON object could be decoded")
383         return obj, end
ValueError: No JSON object could be decoded

Here is r.text after using the fix listed here.  Looks like its returning a 403:
`

Error 403 (Forbidden)!!1

403. That’s an error.
Your client does not have permission to get URL /translate_a/single?client=t&sl=auto&tl=en&hl=en&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=1&ssel=0&tsel=0&tk=684737.684737&q=test from this server.  That’s all we know.`

Yes. Same for me. Response 403 from google, Tried it at server that couldn't be banned.

It works perfectly fine for me. Maybe this is somehow regional?

I live in EU and I tried a VPN from USA to check if this regional. But I've encountered this in both cases. My script that uses this library is able to translate a couple of characters, but then it starts to fail with this JSON error. Is it possible that somehow it fails to renegociate the token or something?

If it's restricting by ip, there's no way to bypass it other than cycle ips. Do you know what the limit is?

I've saturated my IP address after about 14k characters.

For those getting a 403, you'll see the same issue if you use curl (curl -A GET https://translate.google.com). There's most likely a limit being placed by Google when making multiple queries from the same IP. Keep in mind that the Google Translate API is a paid service now: https://cloud.google.com/translate/pricing

Yeah, after applying this fix, it seems to work fine for me. I know that #47 is also related to getting a 403 when using certain emojis (which causes it to generate the wrong token). I applied this PR as a workaround and it seemed to fix that for me too.

Hi,
I am experiencing the same problem as below. I changed the code in the gtoken.py module, but I receive now these errors:
File "C:\Anaconda3\lib\site-packages\googletrans\client.py", line 172, in translate
data = self._translate(text, dest, src)
File "C:\Anaconda3\lib\site-packages\googletrans\client.py", line 81, in translate
data = utils.format_json(r.text)
File "C:\Anaconda3\lib\site-packages\googletrans\utils.py", line 62, in format_json
converted = legacy_format_json(original)
File "C:\Anaconda3\lib\site-packages\googletrans\utils.py", line 54, in legacy_format_json
converted = json.loads(text)
File "C:\Anaconda3\lib\json_init.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Anaconda3\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Anaconda3\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
I made the curl command without any failure. I followed the conversation but I did not see how to solve this problem. Is it possible to be blocked by google? Thanks.

@piotrglazar Yes I'm aware. My point being that the 403 is out of scope for this PR and that the behavior change that people are seeing could very well be a change from Google's end to limit the free unlimited usage of the translate API.

@Guy-Dipietro-Bose I agree that this is out of the scope of this PR. I just wanted to piggyback the question how to bypass Google's limit - maybe someone figured out how to solve this problem.

I am using time delay between queries and it works for me

@asanchez126
Could you post the curl that you executed?
@Guy-Dipietro-Bose
BTW Google translate was paid a long time ago. I've started using googletrans lib like a year ago and GT was already a paid service.

Finally, I used the paid service and it worked fine, so for me it is fine. Thanks.

Here is another version of the fix, it is a bit cleaner:
    RE_TKK = re.compile(r'TKK=eval\(\'\(\(function\(\)\{(.+?)\}\)\(\)\)\'\);',
                        re.DOTALL)
    RE_RAWTKK = re.compile(r'TKK=\'([^\']*)\';',re.DOTALL)

    def __init__(self, tkk='0', session=None, host='translate.google.com'):
        self.session = session or requests.Session()
        self.tkk = tkk
        self.host = host if 'http' in host else 'https://' + host

    def _update(self):
        """update tkk
        """
        # we don't need to update the base TKK value when it is still valid
        now = math.floor(int(time.time() * 1000) / 3600000.0)
        if self.tkk and int(self.tkk.split('.')[0]) == now:
            return

        r = self.session.get(self.host)

        rawtkk = self.RE_RAWTKK.search(r.text)
        if rawtkk:
            self.tkk = rawtkk.group(1)
            return

Edit: Removed verify=False from r = self.session.get(self.host, verify=False)

where canI find this file to make this change?

This works for me when I run my code in PyCharm, but after creating an .exe with PyInstaller it doesnt work. Does anyone know how to fix this?

@asanchez126
I encountered the same problem.
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

It can be reproduced on my environment when original text to be translated has more than 5,000 characters. I don`t know why it happens, but I solved this problem by separating every 5,000 characters and translating each of them.

hey folks, any updates on when this is going to be merged?

Haven't heard from the repo owner, not sure that it will get merged. I've been using the fork, we may need to completely fork it and publish to Pypi.

@Guy-Dipietro-Bose please consider claiming ownership on pipy

@Guy-Dipietro-Bose please make a fork :)

Until this is released, you can also install the code of this PR over git:
pip install git+https://github.com/BoseCorp/py-googletrans.git --upgrade

I am using time delay between queries and it works for me

@loopdigga98 How much delay did you put between each query ?
My IP is blocked by Google. How can I unblock it ?

The only thing to do is wait. You should be able to use it after ca. 24 hours. I'm using 1 second delay between queries and it works for me.

uninstall already installed googletrans package
pip install git+https://github.com/BoseCorp/py-googletrans.git --upgrade
and you are done !

much easier solution !

@umairqadir97 Did that work for you? I've tried that earlier today and got
 in raw_decode     raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

@umairqadir97 Did that work for you? I've tried that earlier today and got
 in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

yes it's working for me. This is something i'm trying with it:

translator = Translator()
translator.detect("string to be detected").lang

@umairqadir97 Did that work for you? I've tried that earlier today and got
 in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

@boing102 yes it's working for me. This is something i'm trying with it:

translator = Translator()
translator.detect("string to be detected").lang

I've tried both detect() and translate() functions, both yielding the same error. Also in the brand new venv, guess I just have to wait.

@umairqadir97 Did that work for you? I've tried that earlier today and got
 in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

@boing102 yes it's working for me. This is something i'm trying with it:

translator = Translator()
translator.detect("string to be detected").lang

I've tried both detect() and translate() functions, both yielding the same error. Also in the brand new venv, guess I just have to wait.

@boing102 Have you installed it from above mentioned git Repo? Can you sendyour snippet plus error it's showing ?

@umairqadir97 Yep, I used that repo to install.
Here is the stacktrace:
`

translator.detect("string to be detected").lang
Traceback (most recent call last):
File "", line 1, in
File "/tmp/py_venv/try/lib/python3.6/site-packages/googletrans/client.py", line 249, in detect
data = self._translate(text, dest='en', src='auto')
File "/tmp/py_venv/try/lib/python3.6/site-packages/googletrans/client.py", line 81, in _translate
data = utils.format_json(r.text)
File "/tmp/py_venv/try/lib/python3.6/site-packages/googletrans/utils.py", line 62, in format_json
converted = legacy_format_json(original)
File "/tmp/py_venv/try/lib/python3.6/site-packages/googletrans/utils.py", line 54, in legacy_format_json
converted = json.loads(text)
File "/usr/lib/python3.6/json/init.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
`

In my opinion, Google may block web api that py-googletrans uses.
Using debug logging level, I found http web API.  That API responsed 503.
In detail, I made a curl call for that url. Response was that google blocks invalid request.
Although I have figured out the cause, but there is no solution.
I looking for free translate API in Python.
I hope that this issue will be resolved.
= Logging for py-googletrans
$ python
Python 3.5.1 (default, Apr  7 2018, 08:31:07)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import http.client as http_client
>>> http_client.HTTPConnection.debuglevel = 1
>>> from googletrans import Translator
>>> translator = Translator()
>>> translator.translate('안녕하세요.')
send: b'GET / HTTP/1.1\r\nHost: translate.google.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
header: Date header: Expires header: Cache-Control header: Pragma header: X-Frame-Options header: Content-Type header: Content-Language header: P3P header: X-Content-Type-Options header: Content-Encoding header: Server header: X-XSS-Protection header: Set-Cookie header: Alt-Svc header: Transfer-Encoding send: b'GET /translate_a/single?q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.&hl=en&tl=en&sl=auto&otf=1&ssel=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&client=t&tk=9673.437582&oe=UTF-8&ie=UTF-8&tsel=0 HTTP/1.1\r\nHost: translate.google.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\nConnection: keep-alive\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nCookie: NID=144=oQwUK0rMolJ4wc4g8u-w_Uw_iSl5Nm1wg69-SmsZ8RPW9kM3T72Tpf714EvxNuwI-5Q9VVCGoh0DmNoGr4tj-1vrIIKOXCROTJuAVeh249mFHr1FNZyR6QNfvSLtLtKGfUq7QfGk9YYmPKVvDisz13GwjXPps4j-iSJp3ehzJ-E\r\n\r\n'
reply: 'HTTP/1.1 503 Service Unavailable\r\n'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/wskim/apps/pic_crawing_1/venv/lib/python3.5/site-packages/googletrans/client.py", line 172, in translate
    data = self._translate(text, dest, src)
  File "/home/wskim/apps/pic_crawing_1/venv/lib/python3.5/site-packages/googletrans/client.py", line 81, in _translate
    data = utils.format_json(r.text)
  File "/home/wskim/apps/pic_crawing_1/venv/lib/python3.5/site-packages/googletrans/utils.py", line 62, in format_json
    converted = legacy_format_json(original)
  File "/home/wskim/apps/pic_crawing_1/venv/lib/python3.5/site-packages/googletrans/utils.py", line 54, in legacy_format_json
    converted = json.loads(text)
  File "/usr/local/lib/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.5/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
header: Date header: Pragma header: Expires header: Cache-Control header: Content-Type header: Server header: Content-Length header: X-XSS-Protection header: Alt-Svc
>>>

= Curl call
$ curl -v 'https://translate.google.com:443/translate_a/single?q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.&hl=en&tl=en&sl=auto&otf=1&ssel=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&client=t&tk=9673.437582&oe=UTF-8&ie=UTF-8&tsel=0'
* About to connect() to translate.google.com port 443 (#0)
*   Trying <IP_ADDRESS>... connected
* Connected to translate.google.com (<IP_ADDRESS>) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* 	subject: CN=*.google.com,O=Google LLC,L=Mountain View,ST=California,C=US
* 	start date: Oct 16 11:37:00 2018 GMT
* 	expire date: Jan 08 11:37:00 2019 GMT
* 	common name: *.google.com
* 	issuer: CN=Google Internet Authority G3,O=Google Trust Services,C=US
> GET /translate_a/single?q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.&hl=en&tl=en&sl=auto&otf=1&ssel=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&client=t&tk=9673.437582&oe=UTF-8&ie=UTF-8&tsel=0 HTTP/1.1
> User-Agent: curl/7.19.7 (i386-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: translate.google.com
> Accept: */*
>
< HTTP/1.1 503 Service Unavailable
< Date: Mon, 05 Nov 2018 08:01:24 GMT
< Pragma: no-cache
< Expires: Fri, 01 Jan 1990 00:00:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Content-Type: text/html
< Server: HTTP server (unknown)
< Content-Length: 2341
< X-XSS-Protection: 1; mode=block
< Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"
<
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="initial-scale=1"><title>https://translate.google.com/translate_a/single?q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.&hl=en&tl=en&sl=auto&otf=1&ssel=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&client=t&tk=9673.437582&oe=UTF-8&ie=UTF-8&tsel=0</title>

Our systems have detected unusual traffic from your computer network.  Please try your request again later.  Why did this happen?

This page appears when Google automatically detects requests coming from your computer network which appear to be in violation of the Terms of Service. The block will expire shortly after those requests stop.

This traffic may have been sent by malicious software, a browser plug-in, or a script that sends automated requests.  If you share your network connection, ask your administrator for help — a different computer using the same IP address may be responsible.  Learn more

Sometimes you may see this page if you are using advanced terms that robots are known to use, or sending requests very quickly.

IP address: <IP_ADDRESS>
Time: 2018-11-05T08:01:24Z
URL: https://translate.google.com/translate_a/single?q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.&hl=en&tl=en&sl=auto&otf=1&ssel=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&client=t&tk=9673.437582&oe=UTF-8&ie=UTF-8&tsel=0

* Connection #0 to host translate.google.com left intact
* Closing connection #0
$

@tgi01054 Goslate is working for me at the time of writing.

Worked for me
`class TokenAcquirer(object):
"""Google Translate API token generator
translate.google.com uses a token to authorize the requests. If you are
not Google, you do have this token and will have to pay for use.
This class is the result of reverse engineering on the obfuscated and
minified code used by Google to generate such token.

The token is based on a seed which is updated once per hour and on the
text that will be translated.
Both are combined - by some strange math - in order to generate a final
token (e.g.<PHONE_NUMBER>82) which is used by the API to validate the
request.

This operation will cause an additional request to get an initial
token from translate.google.com.

Example usage:
    >>> from googletrans.gtoken import TokenAcquirer
    >>> acquirer = TokenAcquirer()
    >>> text = 'test'
    >>> tk = acquirer.do(text)
    >>> tk
<PHONE_NUMBER>46
"""
RE_TKK = re.compile(r'tkk:\'(.+?)\'')

def __init__(self, tkk='0', session=None, host='translate.google.com'):
    self.session = session or requests.Session()
    self.tkk = tkk
    self.host = host if 'http' in host else 'https://' + host

def _update(self):
    """update tkk
    """
    # we don't need to update the base TKK value when it is still valid
    r = self.session.get(self.host)

    self.tkk = self.RE_TKK.findall(r.text)[0]

    now = math.floor(int(time.time() * 1000) / 3600000.0)
    if self.tkk and int(self.tkk.split('.')[0]) == now:
        return

    # this will be the same as python code after stripping out a reserved word 'var'
    code = unicode(self.RE_TKK.search(r.text).group(1)).replace('var ', '')
    # unescape special ascii characters such like a \x3d(=)
    if PY3:  # pragma: no cover`

Request returnes new format of tkk field in return page

I try to make a translator and this error comes.
please give me a solution.
thankyou
##############################################
exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Mowgli\anaconda3\lib\tkinter_init_.py", line 1883, in call
return self.func(*args)
File "", line 12, in trans
speech=trans.txt
AttributeError: 'Translated' object has no attribute 'txt'

@1998Suraj I suspect you made a typo: speech=trans.text.


Adding the ability for couchdb to get a view name

@johnhof

@gsquire

@gsquire Corrected the changes suggested. Let me know if you have more.

@gsquire Corrected the comments. Thanks


Deserialization fails at the third time

Hi there and first of all thank you for the great work on json2typescript.
I ran into one issue which I try to solve since quiet a while and it only happens in the context of one specific class (all other objects I serialize or deserialize do not have this issue).
When ever I request the below explained object from the server, the first 2 requests are successfully deserialized. The 3rd request always fails with a fatal error. The server response is always 100% the same.
Thank you for any suggestions or guidance.
BEGIN OF ERROR MESSAGE
Fatal error in JsonConvert. Failed to map the JSON object to the JavaScript class "ItineraryCalendar" because of a type error.
DataController.ts:271
Class property:
itineraryCalendarItemArray
Expected type:
[ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem,ItineraryCalendarItem]
JSON property:
ItineraryCalendarItemList
JSON type:
[object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object,object]
JSON value:
[{"CalendarDate":"2017-11-17T00:00:00","ItineraryCount":24365},{"CalendarDate":"2017-11-18T00:00:00","ItineraryCount":14705},{"CalendarDate":"2017-11-19T00:00:00","ItineraryCount":12783},{"CalendarDate":"2017-11-20T00:00:00","ItineraryCount":13422},{"CalendarDate":"2017-11-21T00:00:00","ItineraryCount":13560},{"CalendarDate":"2017-11-22T00:00:00","ItineraryCount":12673},{"CalendarDate":"2017-11-23T00:00:00","ItineraryCount":11028},{"CalendarDate":"2017-11-24T00:00:00","ItineraryCount":9538},{"CalendarDate":"2017-11-25T00:00:00","ItineraryCount":8396},{"CalendarDate":"2017-11-26T00:00:00","ItineraryCount":9674},{"CalendarDate":"2017-11-27T00:00:00","ItineraryCount":12766},{"CalendarDate":"2017-11-28T00:00:00","ItineraryCount":13921},{"CalendarDate":"2017-11-29T00:00:00","ItineraryCount":14283},{"CalendarDate":"2017-11-30T00:00:00","ItineraryCount":13767},{"CalendarDate":"2017-12-01T00:00:00","ItineraryCount":11128},{"CalendarDate":"2017-12-02T00:00:00","ItineraryCount":8211},{"CalendarDate":"2017-12-03T00:00:00","ItineraryCount":8239},{"CalendarDate":"2017-12-04T00:00:00","ItineraryCount":9658},{"CalendarDate":"2017-12-05T00:00:00","ItineraryCount":10306},{"CalendarDate":"2017-12-06T00:00:00","ItineraryCount":10358},{"CalendarDate":"2017-12-07T00:00:00","ItineraryCount":9737},{"CalendarDate":"2017-12-08T00:00:00","ItineraryCount":8392},{"CalendarDate":"2017-12-09T00:00:00","ItineraryCount":6506},{"CalendarDate":"2017-12-10T00:00:00","ItineraryCount":6309},{"CalendarDate":"2017-12-11T00:00:00","ItineraryCount":7130},{"CalendarDate":"2017-12-12T00:00:00","ItineraryCount":7325},{"CalendarDate":"2017-12-13T00:00:00","ItineraryCount":7325},{"CalendarDate":"2017-12-14T00:00:00","ItineraryCount":6850},{"CalendarDate":"2017-12-15T00:00:00","ItineraryCount":5864},{"CalendarDate":"2017-12-16T00:00:00","ItineraryCount":4624},{"CalendarDate":"2017-12-17T00:00:00","ItineraryCount":4133},{"CalendarDate":"2017-12-18T00:00:00","ItineraryCount":4193},{"CalendarDate":"2017-12-19T00:00:00","ItineraryCount":4197},{"CalendarDate":"2017-12-20T00:00:00","ItineraryCount":4172},{"CalendarDate":"2017-12-21T00:00:00","ItineraryCount":3922},{"CalendarDate":"2017-12-22T00:00:00","ItineraryCount":3589},{"CalendarDate":"2017-12-23T00:00:00","ItineraryCount":3144},{"CalendarDate":"2017-12-24T00:00:00","ItineraryCount":2939},{"CalendarDate":"2017-12-25T00:00:00","ItineraryCount":3010},{"CalendarDate":"2017-12-26T00:00:00","ItineraryCount":3219},{"CalendarDate":"2017-12-27T00:00:00","ItineraryCount":3180},{"CalendarDate":"2017-12-28T00:00:00","ItineraryCount":2909},{"CalendarDate":"2017-12-29T00:00:00","ItineraryCount":2930},{"CalendarDate":"2017-12-30T00:00:00","ItineraryCount":2601},{"CalendarDate":"2017-12-31T00:00:00","ItineraryCount":2538},{"CalendarDate":"2018-01-01T00:00:00","ItineraryCount":2484},{"CalendarDate":"2018-01-02T00:00:00","ItineraryCount":2558},{"CalendarDate":"2018-01-03T00:00:00","ItineraryCount":2474},{"CalendarDate":"2018-01-04T00:00:00","ItineraryCount":2369},{"CalendarDate":"2018-01-05T00:00:00","ItineraryCount":2334},{"CalendarDate":"2018-01-06T00:00:00","ItineraryCount":2272},{"CalendarDate":"2018-01-07T00:00:00","ItineraryCount":2519},{"CalendarDate":"2018-01-08T00:00:00","ItineraryCount":2821},{"CalendarDate":"2018-01-09T00:00:00","ItineraryCount":2844},{"CalendarDate":"2018-01-10T00:00:00","ItineraryCount":2868},{"CalendarDate":"2018-01-11T00:00:00","ItineraryCount":2783},{"CalendarDate":"2018-01-12T00:00:00","ItineraryCount":2569},{"CalendarDate":"2018-01-13T00:00:00","ItineraryCount":2202},{"CalendarDate":"2018-01-14T00:00:00","ItineraryCount":2193},{"CalendarDate":"2018-01-15T00:00:00","ItineraryCount":2258},{"CalendarDate":"2018-01-16T00:00:00","ItineraryCount":2189},{"CalendarDate":"2018-01-17T00:00:00","ItineraryCount":2181},{"CalendarDate":"2018-01-18T00:00:00","ItineraryCount":2159},{"CalendarDate":"2018-01-19T00:00:00","ItineraryCount":2082},{"CalendarDate":"2018-01-20T00:00:00","ItineraryCount":1842},{"CalendarDate":"2018-01-21T00:00:00","ItineraryCount":1876},{"CalendarDate":"2018-01-22T00:00:00","ItineraryCount":1968},{"CalendarDate":"2018-01-23T00:00:00","ItineraryCount":1891},{"CalendarDate":"2018-01-24T00:00:00","ItineraryCount":1859},{"CalendarDate":"2018-01-25T00:00:00","ItineraryCount":1786},{"CalendarDate":"2018-01-26T00:00:00","ItineraryCount":1702},{"CalendarDate":"2018-01-27T00:00:00","ItineraryCount":1547},{"CalendarDate":"2018-01-28T00:00:00","ItineraryCount":1530},{"CalendarDate":"2018-01-29T00:00:00","ItineraryCount":1630},{"CalendarDate":"2018-01-30T00:00:00","ItineraryCount":1570},{"CalendarDate":"2018-01-31T00:00:00","ItineraryCount":1590},{"CalendarDate":"2018-02-01T00:00:00","ItineraryCount":1569},{"CalendarDate":"2018-02-02T00:00:00","ItineraryCount":1463},{"CalendarDate":"2018-02-03T00:00:00","ItineraryCount":1260},{"CalendarDate":"2018-02-04T00:00:00","ItineraryCount":1287},{"CalendarDate":"2018-02-05T00:00:00","ItineraryCount":1458},{"CalendarDate":"2018-02-06T00:00:00","ItineraryCount":1474},{"CalendarDate":"2018-02-07T00:00:00","ItineraryCount":1389},{"CalendarDate":"2018-02-08T00:00:00","ItineraryCount":1261},{"CalendarDate":"2018-02-09T00:00:00","ItineraryCount":1225},{"CalendarDate":"2018-02-10T00:00:00","ItineraryCount":1163},{"CalendarDate":"2018-02-11T00:00:00","ItineraryCount":1189},{"CalendarDate":"2018-02-12T00:00:00","ItineraryCount":1229},{"CalendarDate":"2018-02-13T00:00:00","ItineraryCount":1175},{"CalendarDate":"2018-02-14T00:00:00","ItineraryCount":1138},{"CalendarDate":"2018-02-15T00:00:00","ItineraryCount":1103},{"CalendarDate":"2018-02-16T00:00:00","ItineraryCount":1086},{"CalendarDate":"2018-02-17T00:00:00","ItineraryCount":999},{"CalendarDate":"2018-02-18T00:00:00","ItineraryCount":979},{"CalendarDate":"2018-02-19T00:00:00","ItineraryCount":1000},{"CalendarDate":"2018-02-20T00:00:00","ItineraryCount":998},{"CalendarDate":"2018-02-21T00:00:00","ItineraryCount":1008},{"CalendarDate":"2018-02-22T00:00:00","ItineraryCount":989},{"CalendarDate":"2018-02-23T00:00:00","ItineraryCount":990},{"CalendarDate":"2018-02-24T00:00:00","ItineraryCount":952},{"CalendarDate":"2018-02-25T00:00:00","ItineraryCount":906}]
Fatal error in JsonConvert. Failed to map the JSON object to the JavaScript class "ItineraryCalendarItem" because of a type error.
Class property:
itineraryCount
Expected type:
number
JSON property:
ItineraryCount
JSON type:
number
JSON value:
24365
Cannot read property 'deserialize' of undefined.
END OF ERROR MESSAGE
This is how I create JsonConvert:
this.jsonConvert=new JsonConvert();
this.jsonConvert.operationMode = OperationMode.LOGGING; // print some debug data
this.jsonConvert.ignorePrimitiveChecks = false; // don't allow assigning number to string etc.
this.jsonConvert.valueCheckingMode = ValueCheckingMode.ALLOW_NULL; // allow null

This is where I deserialize the failing json object I receive via SignalR (remember the first 2 times doing this is perfectly fine with exactly the same json data)
public loadItineraryCalendar(){
        let fromDate = this.getDateString(currentDate);
        this.signalRService.dataProxy.invoke('LoadItineraryCalendar', fromDate ).done((result:any) => {
            let r = this.jsonConvert.deserialize(result,ItineraryCalendar);
            this.itineraryCalendarReceivedSubject.next(r);
        });
    }

This is the class 'ItineraryCalendar' being used:
import {JsonObject, JsonProperty} from "json2typescript";
import {ItineraryCalendarItem} from './ItineraryCalendarItem';
@JsonObject
export class ItineraryCalendar {
    @JsonProperty('ItineraryCalendarItemList', [ItineraryCalendarItem], true)
    public itineraryCalendarItemArray:ItineraryCalendarItem[];
    @JsonProperty('EntityId', Number, true)
    public entityId:number;
    @JsonProperty('EntityType', Number, true)
    public entityType:number; //currently can be polygon(1),hotel(3),country(4),region(5)
    @JsonProperty('CountryCode', String, true)
    public countryCode:string;
    @JsonProperty('RegionCodeList', [String], true)
    public regionCodeArray:string;

    constructor(){
        this.itineraryCalendarItemArray=undefined;
        this.entityId=undefined;
        this.entityType=undefined;
        this.countryCode=undefined;
        this.regionCodeArray=undefined;
    }
}

And this is the class 'ItineraryCalendarItem' being used:
import {JsonObject, JsonProperty} from "json2typescript";
import {DateConverter} from '../converters/jsonConverters';

@JsonObject
export class ItineraryCalendarItem {
    @JsonProperty('CalendarDate', DateConverter, true)
    public calendarDate:Date;
    @JsonProperty('ItineraryCount', Number, true)
    public itineraryCount:number;

    constructor(){
        this.calendarDate=undefined;
        this.itineraryCount=undefined;
    }
}

The DateConverter is defined like this:
@JsonConverter
class DateConverter implements JsonCustomConvert<Date> {
    serialize(date: Date): string {
        let yyyy=date.getFullYear().toString();
        let mm=(date.getMonth() + 1).toString();
        if(mm.length==1) mm='0'+mm;
        let dd=date.getDate().toString();
        if(dd.length==1) dd='0'+dd;
        let hh=date.getHours().toString();
        if(hh.length==1) hh='0'+hh;
        let MM=date.getMinutes().toString();
        if(MM.length==1) MM='0'+MM;
        let ss=date.getSeconds().toString();
        if(ss.length==1) ss='0'+ss;

        return yyyy + "-" + mm+ "-" + dd + "T" + hh + ":" + MM + ":" + ss;
    }
    deserialize(date: string): Date {
        if(date!=undefined) return new Date(date);
        else return undefined;
    }
}

What happens if you just remove the two lines of the first or second property of ItineraryCalendarItem?
For example for the first property like this:
//@JsonProperty('CalendarDate', DateConverter, true)
//public calendarDate:Date;

Does it work without any issue?

If I remove the first 2 lines it still produces the same error (at the third time)
If I remove the second 2 lines it runs with no problems (tried it 10 times - no issue)
This one worked:
@JsonObject
export class ItineraryCalendarItem {
    @JsonProperty('CalendarDate', DateConverter, true)
    public calendarDate:Date;
    //@JsonProperty('ItineraryCount', Number, true)
    //public itineraryCount:number;

    constructor(){
        this.calendarDate=undefined;
       //this.itineraryCount=undefined;
    }
}

Are you sure it's fine to set undefined in the constructor? Just to be sure I would try to set = undefined immediately at property declaration.
The error does not make a lot of sense, it basically means it tries to apply a custom converter to your number, and it shouldn't do that. If the above does not work, try this for "fun":
@JsonProperty('ItineraryCount', Any, true)
public itineraryCount:number;

while Any has to be imported from json2typescript.

Thank you for working with me on that!
I set undefined on all my classes in the constructor with no issues (in terms of code-readability I might reconsider this).
But I did what you suggested and set undefined right at declaration: no success.
I tried 'Any' as you suggested: no success.
Any other ideas?

the strange thing is that the except same code runs fine twice and then produces the error always exactly at the third time. I like to think if this was a general coding issue then it would break right away, but it doesn't.

Can you set up a minimal angular project and post it on a new github repository? I will have a look at it.

Will try to get that done in the next few days.
Thank you!

I made a simple test project today and the error does not happen (so I didn't even bother posting it).
In both projects I use the exact same packages and versions.
I simplified the original project to just take a short json string and deserialize it = >fails as usual.
In the test project the exact same lines of code (copy and past) run fine.
I'm down to this code:
this.jsonConvert=new JsonConvert();
this.jsonConvert.operationMode = OperationMode.LOGGING; // print some debug data
this.jsonConvert.ignorePrimitiveChecks = false; // don't allow assigning number to string etc.
this.jsonConvert.valueCheckingMode = ValueCheckingMode.ALLOW_NULL; // allow null

let testjson='{"ItineraryCalendarItemList":[{"CalendarDate":"2017-11-19T00:00:00","ItineraryCount":16},{"CalendarDate":"2017-11-20T00:00:00","ItineraryCount":17},{"CalendarDate":"2017-11-21T00:00:00","ItineraryCount":16},{"CalendarDate":"2017-11-22T00:00:00","ItineraryCount":11}],"EntityType":1,"EntityId":1718,"CountryCode":null,"RegionCodeList":null}';
let jsonObj = JSON.parse(testjson)
let r = this.jsonConvert.deserialize(jsonObj,ItineraryCalendar);

So it must be some sort of dependency, or some setting which messes my original project up so that the 3rd time deserializing this string, fails (and so far only this string, I deserialize over 30 other classes just fine)
I can execute above code fine 2 times and then the 3rd time breaks again.
The original project is too large to start moving stuff out or into the test project.
Any ideas what else could cause this?

json2typescript will fail if you have circular dependencies. Chances are high, that your large project somewhere has a circular dependency on the classes you are trying to work with.
I would try the following things:

Have a look at the places where you include your classes.
Rename the classes AND property names in the code that cause issues (not in the JSON obviously)

It must be possible to isolate the issue and get to the fail somehow.

I think you nailed it: I copied the 2 classes in questions under a different class name and used them at only one point inside my project to deserialize the json message and it worked with no problem.
Now I just have to find out where exactly I messed up. will keep you posted. Thank you for your excellent guidance!

OK, here is the reason and the solution, even though I don't completely understand it yet:
The object 'ItineraryCalendar' was bound as data source to a kendo-chart-series-item (Telerik KendoUI for Angular).
When the whole thing failed it looked like this:
<kendo-chart-series-item type="line" *ngIf="data" [data]="data.itineraryCalendarItemArray" field="itineraryCount" categoryField="calendarDate"> </kendo-chart-series-item>
where 'data' was of type 'ItineraryCalendar'.
The component containing this kendo widget also had the button i clicked upon which the data loading and json deserialization was triggered. So this component was open and active at the time of error.
As soon as i removed the binding for [data] everything worked fine.
Overall this looks like a bug to me in the kendo widget, as data binding as such shouldn't cause the issue imho.
So for now I changed [data]="data.itineraryCalendarItemArray"  to [data]="chartData" to decouple the widget from my class, and in the ts file behind it looks like this now:

private chartData:any[];
    set data(ic:ItineraryCalendar){
        this.chartData=new Array<any>();
        for(var item of ic.itineraryCalendarItemArray){
            let d={itineraryCount:item.itineraryCount, calendarDate:item.calendarDate};
            this.chartData.push(d);
        }
    }

Again, I don't completely understand why the data binding as I had it caused the problem, but if you feel like I do that it shouldn't cause the problem, I will report this to Telerik, even though it will be hard for me to provide them with a sample to work from.
What do you think?

Good that you have found the source and a workaround.
At this moment I cannot imagine how json2typescript could be responsible for the issues, and your project seems to be complicated enough so it is basically impossible to understand what is going on.
I cannot really help you any further because I don't know KendoUI at all. It looks like a nice project though, could be interesting for us too.

I don't think its a json2typescript issue at all. I will open a case with Telerik and see what they say. At least I have a workaround thanks to your great and fast help!
Thank you again und Gruesse in die Schweiz.


startEvent function added

I have used some hacks to get this done. Could someone help to get it to the project's standards?

Does this still work? I don't seem to be able to create reminders in messenger anymore.
If we want to merge it, it would be great to get a brief explanation of some of these "hacks" and then obviously we'd need DOCS etc.

As you can see in the commit, I found an url, couldn't encode it properly, so just left it there as is. Maybe that's why it isn't working for you. I was hoping that you could guide me as IDK either your or fb's standards.


Expose timing and connection information in in-proc

In Windows 19H1, the HTTP_REQUEST_INFO struct supports following new info types-

HttpRequestInfoTypeRequestTiming: Returns timestamps (KeQueryPerformanceCounter) for significant events in Request life time (e.g. connection start, SSL handshake timings, delivery timings etc.)
HttpRequestInfoTypeTcpInfoV0: Returns information about underlying TCP connection via TCP_INFO_V0.
HttpRequestInfoTypeRequestSizing: Returns information about different sizes from underlying components (e.g. HTTP header size, SSL handshake send/receive sizes etc.). In addition, it also returns more information about connection like if TCP fast open was used, TLS Session Resumption/False Start was used etc.

We should expose this information via new features

cc @Tratcher

Who would consume it? Is there an analog in other servers we have?

This was added to HTTP.SYS based on repeated customer asks for ASP.NET. There isn't YET an analogue in our other servers, but I surely going to ask for this in all our servers 😁.

Need more cowbell? What about fixing bugs and getting ASP.NET Core ready for production before retirement?


Upgrade build operator to v0.1.0

New Submissions

[ ] Does your operator have nested directory structure?
[ ] Have you selected the Project Community Operator Submissions in your PR on the right-hand menu bar?
[ ] Are you familiar with our contribution guidelines?
[ ] Have you packaged and deployed your Operator for Operator Framework?

[ ] Have you tested your Operator in all supported installation modes?
[ ] Is your submission signed?

Updates to existing Operators

[x] Is your new CSV pointing to the previous version with the replaces property?
[x] Is your new CSV referenced in the appropriate channel defined in the package.yaml ?
[x] Have you tested an update to your Operator when deployed via OLM?
[x] Is your submission signed?

Your submission should not

[ ] Modify more than one operator
[ ] Modify an Operator you don't own
[ ] Rename an operator - please remove and add with a different name instead
[ ] Submit operators to both upstream-community-operators and community-operators at once
[ ] Modify any files outside the above mentioned folders
[ ] Contain more than one commit. Please squash your commits.

Operator Description must contain (in order)

[ ] Description about the managed Application and where to find more information
[ ] Features and capabilities of your Operator and how to use it
[ ] Any manual steps about potential pre-requisites for using your Operator

Operator Metadata should contain

[ ] Human readable name and 1-liner description about your Operator
[ ] Valid category name1
[ ] One of the pre-defined capability levels2
[ ] Links to the maintainer, source code and documentation
[ ] Example templates for all Custom Resource Definitions intended to be used
[ ] A quadratic logo

Remember that you can preview your CSV here.
--
1 If you feel your Operator does not fit any of the pre-defined categories, file an issue against this repo and explain your need
2 For more information see here

/test CVP

/retest

Greetings @J0zi :)

existing association == kubernetes-build-api
expected association == buildv2-operator

Could you help me resolve the package uniqueness issue?  I see the old name was already fixed in a different commit in master.

/retest

asked CVP team

CVP is down, we cannot test. Once they fix it, we can continue. Thanks for understanding.

Thank you for the update!

/test CVP

/test CVP

Any update on this?

/test CVP

/test CVP

@sbose78 Please rebase to master. To get ci.yaml file Thanks

@sbose78, please use  apiextensions.k8s.io/v1beta

/ok-to-test

/test deploy-operator-on-openshift

our robot deploy-operator-on-openshift is using OLM 0.16.1 which is the latest.

please use apiextensions.k8s.io/v1beta

https://github.com/shipwright-io/build/blob/master/deploy/crds/build.dev_builds_crd.yaml#L1
What if the upstream project doesn't wish to go back to v1beta1? :)

/test CVP

/ok-to-test

I am retesting it now.

How can I help ? :(

@mvalarh  would need
ci/prow/deploy-operator-on-openshift  need a re-trigger?

@mvalarh @J0zi What's the best way to proceed on this :)

I'm trying to understand what the errors means here  https://storage.googleapis.com/origin-ci-test/pr-logs/pull/operator-framework_community-operators/2199/pull-ci-operator-framework-community-operators-master-deploy-operator-on-openshift/1323396906436530176/build-log.txt

@sbose78 Problem is that it is failing on openshift cluster. I will have a look.

@sbose78 can you please rebase to latest master?

Done!
I'm trying to see if there's something incorrect with my submission, any help would be awesome, I might be missing something in the error messages.

@sbose78 Can  you have a look ? https://travis-ci.com/github/operator-framework/community-operators/jobs/431270969

 stdout: 'time="2020-11-09T16:38:31Z" level=error msg="Error: Value error converting YAML to JSON: yaml: found unknown escape character: error decoding example CustomResource"'

Looking at this, thank you!

I think I closed this by mistake , opened a fresh one https://github.com/operator-framework/community-operators/pull/2641


Add Rails/I18nLocaleTexts match for redirect_back

Rails/I18nLocaleTexts was introduced in #643 and matches on redirect_to; this PR extends the cop to also match on the similarly behaved redirect_back method.

Before submitting the PR make sure the following are checked:

[x] The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
[x] Wrote good commit messages.
[ ] Commit message starts with [Fix #issue-number] (if the related issue exists).
[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[x] Added tests.
[x] Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
[x] Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.
[ ] If this is a new cop, consider making a corresponding update to the Rails Style Guide.

Nice 👍


Release v2<IP_ADDRESS>

tweak Top SQL ux experience
update ngm & top sql text

Codecov Report

:exclamation: No coverage uploaded for pull request base (release@81a1140). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             release   #1130   +/-   ##
=========================================
  Coverage           ?   6.88%
=========================================
  Files              ?      33
  Lines              ?    1990
  Branches           ?       0
=========================================
  Hits               ?     137
  Misses             ?    1842
  Partials           ?      11

Flag
Coverage Δ

be_integration_test_latest
6.88% <0.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out 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 81a1140...6353d34. Read the comment docs.


Quantum Entangloporter Text Overlapping

Should be self-explanatory, so i just post an Image:
https://ibb.co/mR3B5b

Same for portable teleporters.

Are you using any custom language packs? As that value ("Are you sure you want to delete this?") isn't part of our default localisation.

No, i'm not. I use PureBDCraft as Resource Pack for Skins, other than that, nothing.

Aah... I could see what's happening.. There seems to be a localisation key conflict. We (sadly) do not use a Mekanism specific localisation key.
It seems another mod is also using gui.delete, with the value you're seeing. You could try to add a en_us.lang file in a resourcepack with the following in it (just a plain text file) as a temporary solution:
gui.delete=Delete

Thank you! :)

Essentially the same as #4698 but worse

Somehow i couldn't find that issue...


AcroForm Field Structures By Field Type

As a step toward a general AcroForms API, we want individual structures to represent the different possible types of AcroForm fields.
Tasks

[x] Button Field (#263)
[x] Text Field (#264)
[x] Choice Field (#265)
[ ] Signature Field (#266 )

Dependencies

Requires #261

Parent #263
Parent #264
Parent #265
Parent #266

@cshenks I'm hoping that I'll have some time free up this next week or two to help contribute to the AcroForms API work. At the moment I'm thinking I'll work on setting up the high level APIs (whatever those might look like - not sure atm) for the end-user to read and manipulate acroforms. I'll probably start with buttons and radio groups. Please let me know if there's anything you think I should know or be aware of before starting!


550 Cannot receive from specified address <(my email)>: Unauthenticated senders not allowed

Any idea how I fix this problem so that I can email myself alerts?

I entered my email during the setup in terminal, never added a password or other credentials though. Is there some way to authenticate your email address as a service?

Maybe the sendgrid credentials didn't get setup correctly?  Do you have a verified Heroku account (has a credit card number in it)?

Oh Heroku isn't verified, let me do that

Same problem

See if the sendgrid addon is setup for the huginn heroku project with their web UI.

Okay, added that, do I need to refresh the app or something?

You may need to set the sendgrid details in the ENV, or it may just work.

Kk I set the variables, I'll let you know if this fixes it

Still doesn't work, here's the error output:
/app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/smtp.rb:951:in check_response' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/smtp.rb:920:in getok'
/app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/smtp.rb:835:in mailfrom' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/smtp.rb:662:in send_message'
/app/vendor/bundle/ruby/2.0.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:113:in block in deliver!' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/smtp.rb:521:in start'
/app/vendor/bundle/ruby/2.0.0/gems/mail-2.6.3/lib/mail/network/delivery_methods/smtp.rb:112:in deliver!' /app/vendor/bundle/ruby/2.0.0/gems/mail-2.6.3/lib/mail/message.rb:2141:in do_delivery'
/app/vendor/bundle/ruby/2.0.0/gems/mail-2.6.3/lib/mail/message.rb:236:in block in deliver' /app/vendor/bundle/ruby/2.0.0/gems/actionmailer-4.2.1/lib/action_mailer/base.rb:543:in block in deliver_mail'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:164:in block in instrument' /app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.1/lib/active_support/notifications/instrumenter.rb:20:in instrument'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:164:in instrument' /app/vendor/bundle/ruby/2.0.0/gems/actionmailer-4.2.1/lib/action_mailer/base.rb:541:in deliver_mail'
/app/vendor/bundle/ruby/2.0.0/gems/mail-2.6.3/lib/mail/message.rb:236:in deliver' /app/vendor/bundle/ruby/2.0.0/gems/actionmailer-4.2.1/lib/action_mailer/message_delivery.rb:85:in deliver_now'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/performable_mailer.rb:7:in perform' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/backend/base.rb:94:in block in invoke_job'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in block in initialize'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in execute'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in run_callbacks' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/backend/base.rb:91:in invoke_job'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:204:in block (2 levels) in run' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/timeout.rb:66:in timeout'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:204:in block in run' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/benchmark.rb:296:in realtime'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:203:in run' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:280:in block in reserve_and_run_one_job'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in block in initialize'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in execute'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in run_callbacks' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:280:in reserve_and_run_one_job'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:187:in block in work_off' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:186:in times'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:186:in work_off' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:150:in block (4 levels) in start'
/app/vendor/ruby-2.0.0/lib/ruby/2.0.0/benchmark.rb:296:in realtime' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:149:in block (3 levels) in start'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in block in initialize'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in execute'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in run_callbacks' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:148:in block (2 levels) in start'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:147:in loop' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:147:in block in start'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/plugins/clear_locks.rb:7:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/plugins/clear_locks.rb:7:in block (2 levels) in class:ClearLocks'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in block (2 levels) in add'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:61:in block in initialize'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:79:in block in add'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in call' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:66:in execute'
/app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/lifecycle.rb:40:in run_callbacks' /app/vendor/bundle/ruby/2.0.0/gems/delayed_job-4.0.6/lib/delayed/worker.rb:146:in start'
bin/threaded.rb:46:in block (2 levels) in <top (required)>' bin/threaded.rb:16:in safely'
bin/threaded.rb:43:in `block in <top (required)>'

You may need to show us the values in heroku config (but please anonymize anything sensitive!)

Did you solve this issue?

I had this issue as well. When initially setting up my Heroku app, my account was not verified, so SendGrid wasn't setup. I tried some other things after validating my account and it still wasn't working. Finally, I performed the following steps and got it working:
My solution was the following:

Verify my Heroku account
Make sure to remove the SendGrid add-on via the Heroku UI
Remove all mail-related config variables using heroku config:unset in the Heroku CLI
Run bin/setup_heroku again
Answer yes when prompted to add the SendGrid add-on

After those steps, the email config variables are all properly set and the SendGrid add-on is added to my app. Sending emails from Huginn works.

Thanks @sea-grass!  Would you mind adding this to our wiki?

Sounds like this issue is solved. Could the issue be closed?


Question about VQA answer tokenizer

I realized that an eos token [SEP] is added to each answer when creating the VQA dataset here. Since BertTokenizer already appends a [SEP] token to the end of each input text anyways, is there a reason why an additional eos token is added to each answer? (the tokenized input_ids of each answer ends with two 102s (the sep_token_id)).

Hi, we have customized BertTokenizer to not automatically add [SEP] after text.
https://github.com/salesforce/ALBEF/blob/main/models/tokenization_bert.py

I see, thanks for the clarification!


add a final blog of wechat-work puppet.

Fixes # .
Make sure these boxes are checked before creating your pull request -- thank you!

[x] Add Blog Header, including title, author, date.
For example:
---
title: "Your Great Blog Title"
author: your_github_id
image: /assets/2020/08-your-blog-slug/teaser.jpg
---

YOUR_FIRST_SENTENCE_SHOULD_BE_A_SUMMARY_FOR_YOUR_POST

[x] Keep all filenames & url as lowercase, and use - to connect words instead of space. e.g. 2017-10-06-wechat-pc-impactor instead of 2017-10-06-WeChat PC Impactor,

[x] Embed the photo & video before publishing, save all external file to a folder named by ${MONTH}-${YOUR_BLOG_SLUG}/ under /assets/2020 directory.

[x] Add teaser image for the blog

[x] Add your self as an author to the author data file at https://github.com/wechaty/wechaty.js.org/blob/master/_developers/YOUR_GITHUB_USERNAME.md with your GitHub username. And please also remember to reference yourself with the Github username in your blog post, so that we can have nice author information besides your blog after we published it!
For excample:
---
name: Jiarui LI (李佳芮)
site: https://lijiarui.github.io
bio: 句子互动创始人 & CEO，微软人工智能最具价值专家 (AI MVP)
avatar: /assets/developers/lijiarui/avatar.png
email<EMAIL_ADDRESS>twitter: https://weibo.com/u/2175505900
---

Here is the example file:

lijiarui.md: https://github.com/wechaty/wechaty.github.io/blob/master/_developers/lijiarui.md
It will shown like this on wechaty blog: https://wechaty.github.io/developers/lijiarui/

To read more about the contribute guideline, visit: https://github.com/wechaty/wechaty.js.org#contribute-guideline

You left out the final-term live coding in blog. Waiting for your more commits.

您好！live coding的链接附在了blog里面，在第67行，是企业微信直播回放的链接。

@Sapio-S You'd better to embed your video frame to your blog like this way.
- 项目成果：
  - 项目仓库位于: <https://github.com/univerone/words-per-day>
  - 相应的npm package地址为: <https://www.npmjs.com/package/words-per-day>
  - live coding视频:
  {% include iframe.html src="https://player.bilibili.com/player.html?bvid=BV1ih411d75h" %}
  - PPT展示视频:
  {% include iframe.html src="https://player.bilibili.com/player.html?bvid=BV1pf4y1D71F" %}
  - PPT:
  {% include iframe.html src="/assets/2020/wechaty-words-per-day-plugin-final/presentation.pdf" %}

So, the video would display in the blog, not redirect to another website. How do you think about it ?


Implements main and filter toolbars

This is a "good enough to demo" version but there are some spacing issues and philosophical questions to work out :-)
One philosophical question: many of the Bootstrap classes have margins built in...which violates our premise that each element fills its own space but will be separated from other elements by its container.
Also, this includes an element filter-list, which is a group of dismissable tags meant as a list of filters. There is a problem with including a pattern that uses listitems in another pattern. Brian is working on a handlebars solution but for now I've put in a workaround where the pattern is repeated in the place it should be referenced.

Hi @srambach thanks a lot for doing this. I've merge your branch locally and I am putting together everything for the demo. That way we will have time to review this before merging it.
thanks a lot!! 😄


SimulatorBase independent qubits optimization

Add optimization that ensures independent qubit sets are simulated independently. This is done by adding join, extract, and reorder methods to ActOnArgs, and updating SimulatorBase with the logic to merge qubit sets when necessary and split them when possible.
This optimization is enabled or disabled via a new parameter in the simulator constructors: split_entangled_qubits. Currently the PR has this set to True by default, though perhaps it should be disabled by default lest it breaks anything? The MPS simulator does not yet have extract defined and thus there's no option to enable this feature in MPS simulator's constructor yet, though nothing prevents this from being added later.
The perf boost of this implementation is limited because each StepResult still requires the full product state. It's still a speedup because full product state calculations will only have to occur once per moment rather than once per operation, but not as nice as avoiding full product state calculations entirely. That optimization will be available in a subsequent PR that never creates the full product state if possible: StepResults will join the product state only on demand, and sampling will sample each substate independently and zip up the results, avoiding the full state join: The WIP is here https://github.com/daxfohl/Cirq/compare/split...daxfohl:sample?expand=1.
I ramped up the number of qubits in the benchmarks to 25 for sparse and 12 for DM:
From master:
(cirq-py3) dax@DESKTOP-Q5MLJ3J:~/cirq$ time pytest dev_tools/profiling/benchmark_simulators_test.py
platform linux -- Python 3.8.5, pytest-5.4.3, py-1.10.0, pluggy-0.13.1
benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/dax/cirq
plugins: cov-2.5.1, asyncio-0.12.0, benchmark-3.2.3
collected 5 items

dev_tools/profiling/benchmark_simulators_test.py .....                                                                                [100%]

real    0m16.973s
user    0m15.754s
sys     0m3.862s

From split branch (the current PR):
(cirq-py3) dax@DESKTOP-Q5MLJ3J:~/cirq$ time pytest dev_tools/profiling/benchmark_simulators_test.py
platform linux -- Python 3.8.5, pytest-5.4.3, py-1.10.0, pluggy-0.13.1
benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/dax/cirq
plugins: cov-2.5.1, asyncio-0.12.0, benchmark-3.2.3
collected 5 items

dev_tools/profiling/benchmark_simulators_test.py .....                                                                                [100%]

real    0m10.073s
user    0m9.082s
sys     0m3.805s

From sample branch (future iteration mentioned above):
(cirq-py3) dax@DESKTOP-Q5MLJ3J:~/cirq$ time pytest dev_tools/profiling/benchmark_simulators_test.py
platform linux -- Python 3.8.5, pytest-5.4.3, py-1.10.0, pluggy-0.13.1
benchmark: 3.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/dax/cirq
plugins: cov-2.5.1, asyncio-0.12.0, benchmark-3.2.3
collected 5 items

dev_tools/profiling/benchmark_simulators_test.py .....                                                                                [100%]

real    0m2.885s
user    0m3.523s
sys     0m2.597s

Initial PR for #3240
Closes #882

@daxfohl, is the combination of this and #4110 intended to resolve #3409?
I should be able to give a proper review of this PR in the next week or so.

I'm pretty booked up for the next week but will try to get to this soon afterwards.

@95-martin-orion Changed the default to disable "split" and parameterized the corresponding simulator unit tests as per my previous comment. It only affects the *_simulator_tests.py, so not actually much of a CPU burn.

@95-martin-orion changing atol decimals to 6 fixed all rounding errors. One other thing I remember now is that this was all incompatible with set_state, though it continues to work with split=False. I'll spend some time investigating whether that can be fixed and then change the default back go split=True if it can. (Pretty sure it can).

@95-martin-orion Tried the above but it's not going to be possible without the changes from #4110. (set_state is done via the step results. In this PR, the OperationTarget is tensored up into a single ActOnArgs for each step result. #4110 passes in the original OperationTarget into the ActOnArgs constructor, which is required to make any set_state carry through.)
Should we revert back to keeping the split feature turned off by default, and then turn it on by default in #4110? I'll also add documentation regarding this behavior. Alternatively we could merge the two PRs and release it all together.

The error on positive semidefiniteness is concerning too, even if it passes with split disabled. I'll check out what's going on there.

@95-martin-orion Tried the above but it's not going to be possible without the changes from #4110 {...}

My recommendation: in this PR, disable split by default and return an error if set_state_vector is called when split is True. It sounds like #4110 has "correct" behavior for set_state_vector - if so, we can replace the error and change the default split value to True in that PR.
What issue are you seeing with positive semidefiniteness?

Sounds good. See the test error in the latest commit Re semidefiniteness.
On Fri, Jun 18, 2021, 1:25 PM Orion Martin @.***> wrote:

@95-martin-orion https://github.com/95-martin-orion Tried the above but
it's not going to be possible without the changes from #4110
https://github.com/quantumlib/Cirq/pull/4110 {...}
My recommendation: in this PR, disable split by default and return an
error if set_state_vector is called when split is True. It sounds like
#4110 https://github.com/quantumlib/Cirq/pull/4110 has "correct"
behavior for set_state_vector - if so, we can replace the error and
change the default split value to True in that PR.
What issue are you seeing with positive semidefiniteness?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/quantumlib/Cirq/pull/4100#issuecomment-864257447, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAG464LHS3223DX7HMOMFDTTTOTVFANCNFSM44UQVSYQ
.

I implemented your suggestion. Positive semidefiniteness ended up being atol again. I'll add some pydoc to the new linalg functions and then this should be ready.

Pydocs for transformations done (feel free to review). gtg otherwise.

@95-martin-orion Sanity check, are we okay with the various names, join, split, split_untangled_states? Are there more formal / common names for these? (In particular I think I've got merge instead of join in one place, and extract instead of split).
Also is it worth having anyone else review the linalg functions to make sure I'm not doing anything wrong there? Unit tests all pass and they seem correct, but I don't have a theoretical background in any of that.

Requesting a final-pass review from @viathor. Adam, no need to review the entire PR here - just the items @daxfohl highlighted above (function names, linear algebra sanity-checking).

FWIW I discovered that CH-form cannot be split after measurement/reset because state remains distributed all over the array. That's just how CH-form works. But it can be run in independent states prior to entanglement and joined when entangled. That will still give linear speedup and is probably more useful than the post-measurement detangling since measurements are usually at the end anyway.
I can add handling for that in a future PR.

Results of voting during cirq sync:
merging - combines two or more subsystems into one
    merge
    kronecker product COVBYM
    Combine ЭD
    tensor product CA
splitting - gives subsystems of a separable state
    factor OCBVYA
    Split ЭM
reindexing - reorders tensor axes
    reindex  OD
    transpose  YAM
    permute CB
    reorder VЭ

So the winners are to name merging something like "kronecker product" (this is what numpy does), to name splitting something like "factoring" (we have an existing method kron_factor_4x4_to_2x2s that does this), and to name reindexing something like "transposing" (this is what numpy does)

In particular, there was hesitance to use "transpose" for reindexing when the state is a 2D matrix representing N != 2 qubits, since this could cause confusion around the common usage of "transpose" for matrices. The recommendation to avoid this was to use a more descriptive (i.e. longer) method name: transpose_qubits_* and transpose_subsystems_* were among the options suggested.

Renamed methods and added optional validation to factorizing in the last two commits.

Confirmed that the new changes LGTM. Did you want further review on this for linalg correctness, or should I go ahead with the merge?

You can merge I think

Automerge cancelled: A required status check is not present.
Missing statuses: ['cla/google']

@95-martin-orion I noticed a difference in the density matrix results when doing a reset after a bell state:

Is this a problem, or is density matrix representation unaffected by multiplication by a constant? I also tried measure and phase_damp, and both of those produce the same results as the original method. Reset was the only one that did something different. Code below.

sim = cirq.DensityMatrixSimulator(split_untangled_states=False)
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(cirq.H(q0), cirq.CX.on(q0, q1), cirq.reset(q1))
result = sim.simulate(circuit)
print()
print(circuit)
print()
print('original calculation:')
print(result.final_density_matrix)
sim = cirq.DensityMatrixSimulator(split_untangled_states=True)
result = sim.simulate(circuit)
print()
print('split states:')
print(result.final_density_matrix)

Is this a problem, or is density matrix representation unaffected by multiplication by a constant?

Yes, this is a problem: one of the conditions on a valid density matrix is that its trace (sum of the elements on the diagonal) must be equal to 1. Multiplying the matrix by a constant produces an invalid density matrix.
It's not immediately clear to me whether the issue here stems from normalization of state components in factor_state_vector (which is called by factor_density_matrix) or from incorrect recombination of independent state components in constructing the DensityMatrixTrialResult.

Alright I will figure it out.

TIL what a partial trace is


Add in limitations that PowerApps tile is not supported in PowerBI embedded app owns data scenario

It currently does not seem possible to embed a PowerApp tile in a PowerBI report, and then embed the PowerBI report using app owns data scenario.
When you do this, the PowerApp tile always asks for a login (instead of using the credentials of the application, that is used to generate the embed URL).

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

ID: 313f94c3-694a-6d09-3a4f-e4b741684822
Version Independent ID: c952e698-a2bf-a47d-acbd-a96a8a922636
Content: Power Apps visual for Power BI - Power Apps
Content Source: powerapps-docs/maker/canvas-apps/powerapps-custom-visual.md
Service: powerapps
GitHub Login: @tapanm-MSFT
Microsoft Alias: pemikkel

I added an idea in PowerApps suggestion forum, but it seems it's currently not documented that this scenario is not possible.

I added an idea in PowerApps suggestion forum, but it seems it's currently not documented that this scenario is not possible.

Thank you for reaching out. Once the idea has updates or results in feature updates, documentation will be updated. Current and known capabilities are documented already.


Exclusive fullscreen support

So, currently Lime only provide Borderless Fullscreen mode. Which produce more input lag and even crash on some systems (win XP).
I propose adding Window.windowMode property of type WindowMode. (More "Window" words to Windows God! :D)
enum WindowMode
{
  Windowed; // Standart windowed mode.
  BorderlessFullscreen; // Current fullscreen method.
  ExclusiveFullscreen; // Videomode-changing method.
  // Optional and questionable.
  ExclusiveAutosizeFullscreen; // Behave same as Borderless regarding stretching to entire screen area.
}

Implementation is quite simple.

Adding SetExlusiveFullscreen to cpp implementation which sets SDL_WINDOW_FULLSCREEN instead of SDL_WINDOW_FULLSCREEN_DESKTOP. Other targets behave basically same as current implementation.

    bool SDLWindow::SetExclusiveFullscreen (bool fullscreen) {

        if (fullscreen) {

            SDL_SetWindowFullscreen (sdlWindow, SDL_WINDOW_FULLSCREEN);

        } else {

            SDL_SetWindowFullscreen (sdlWindow, 0);

        }

        return fullscreen;

    }

Adding windowMode property, obviously.

// Window.hx
private var __windowMode:WindowMode; // default = WindowMode.Windowed;

public var windowMode(get, set):WindowMode;

private inline function get_windowMode():WindowMode { return __windowMode; }
// Redirect to backends, example for NativeWindow.hx below
private inline function set_windowMode(mode:WindowMode):WindowMode
{
  return __windowMode = backend.setWindowMode(mode, __windowMode);
}

// Change the fullscreen implementation
// Remove __fullscreen bool
private inline function get_fullscreen():Bool { return __windowMode == WindowMode.Windowed; }
private inline function set_fullscreen(value:Bool):Bool { return set_windowMode(WindowMode.BorderlessFullscreen) == WindowMode.BorderlessFullscreen; }

// NativeWindow.hx
private function setWindowMode(mode:WindowMode, oldMode:WindowMode):WindowMode
{
  switch(mode)
  {
    case WindowMode.Windowed:
      if (!lime_window_set_fullscreen(handle, false)) return mode;
    case WindowMode.BorderlessFullscreen:
      if (lime_window_set_fullscreen(handle, true)) return mode;
    case WindowMode.ExclusiveFullscreen:
      if (lime_window_set_exclusive_fullscreen(handle, true)) return mode;
  }
  return oldMode;
}

Things to note: In exlusive mode screen resolution will be changed to the resolution of window. I think this should be the problem of framework user, since he may not want to resize his window while setting exclusive fullscreen mode.
Related SDL resources: https://wiki.libsdl.org/SDL_SetWindowFullscreen (see remarks about modes)

+1 For the suggestion.
I fully expect this feature !

Tracking here :smile:
https://trello.com/c/w014aCcJ


Use CSS Vars to allow direct passthrough of tailwind variables

This is a suggestion on how to handle #36 as it sounds pretty interesting.
The way i was thinking of it was to enable the use of something like
div:scope {
  --padding: 0;
  padding: var(--padding);

 &[data-padding="--spacing-"] {}

which the parser would see this as
type BazProps = {
  children?: ReactNode,
  padding?: string,
} & JSX.IntrinsicElements['p']

export function Baz({ children, padding, ...props }: BazProps) {
  return (
    <p {...props} className="baz" style={{ "--padding": `var(--spacing-${padding})` }>
      {children}
    </p>
  )
}

I know its not the prettiest solution but it could work in terms of how simple it is, or maybe we could even remove the need for the &[data-padding] somehow and resolve this value from the --padding var directly e.g.
div:scope {
  --padding: var(--spacing-0); <-  default value
  padding: var(--padding);

this way we could infer that for padding prop to grab the first half of the assigned ts variable and then concat the prop onto the end.

I would be happy to do this solution if this is something you want to implement, either now or in the future.

Hi @The-Code-Monkey ,
Thank you for the suggestions , but I guess it will add more complexity to the syntax.

It depends on which option you look at the second one is not too much syntax and follows a very similar format to how tailwind themselves do stuff.
the first one option is a little more complex but again not too complex its less complex than what im currently doing in my component lib thats using mist.
https://github.com/The-Code-Monkey/MistKit/blob/master/src/primals/flex/index.mist.css
it would make something like this so much cleaner and extendable for custom tailwind values.

Wow, Yep I liked it.

Wow, Yep I liked it.

Just have to get @typicode on side now ha ha

I've been thinking about CSS variables as well :)
For values that aren't enums (number, percent, color, ...)
So yes, MistCSS should support them. I'd like to a simple way to ignore computed CSS var or distinguish between "public"/"private".
For example:
input[type="checkbox"] {
  width: 80px;
  height: 80px;
  --i: 0;
  --hue: calc(var(--i) * 50 + 100);
  accent-color: hsl(var(--hue), 50%, 50%);
}

<div style="text-align: center">
  <input type="checkbox" checked style="--i: 0"/>
  <input type="checkbox" checked style="--i: 1"/>
  <input type="checkbox" checked style="--i: 2"/>
  <input type="checkbox" checked style="--i: 3"/>
</div>

I'd like the generated component to expose i as a prop but not hue.

Yeah I like that idea of how certain values are exposed and others aren't.
I think exposed values should be strings, numbers, CSS vars like my example above but yeah things like calc wouldn't be exposed

I'm currently working on a basic implementation for variables currently it will be finished off tomorrow morning and I'll submit it for review

I have an implementation written @alamenai typicode is working on refactoring so in the meantime i published my own so i can continue dev, don't recommend using it though as it will be removed once typicode is done with their refactor. And it is also will be buggy as i will test stuff in it.
https://github.com/The-Code-Monkey/mistcss/tree/v-andy
you can see it in action here
https://github.com/The-Code-Monkey/MistKit

An alternative to this, that can work with the current CSS variable implementation, could be to use the Tailwind variables in JS.
For example:
<Button color={colors.500} padding={spacing[8]}/>

https://github.com/tailwindlabs/tailwindcss/blob/master/stubs/config.full.js
This would have the benefit of having TS check that the keys used are valid.
// Error from TS
<Button color={colors.54321} padding={spacing.xl}/>

I haven't done research into exactly how this this can imported.

Yeah this is what I would like to support maybe via a specific tailwind renderer. E.g. react tailwind.
But I would personally say for things like padding should be just 8 not spacing.8 as we should be able to infer the tailwind schema it belongs to. I'll have a look at supporting something next week

I see. I understand it could be easier but I think it could be possible with the existing code.
If you wrap Mist components in a function that would convert padding={8} to padding={theme.spaces.8} (and other properties) before passing it to Mist component, that could work.


SOLR-16420: {!mlt_content}

https://issues.apache.org/jira/browse/SOLR-16420
~TODO: add cloud test and equality test, if necessary and indent the code~  Done.
One question: mindf default for cloud test is 0 in code now that contradicts to the ref guide - 5. This PR sets default mindf to 5. It is a good idea to fix it by the PR?

I think it's ready. The only question is fixing mindf default for cloud {!mlt}

OK. Thanks, @risdenk I'll sweep those leftovers.


[When you have spare time] Download Speed Issue

Great Software, however i hit an issue in terms of downloading a file though the reverse-proxy in terms of speed.
I have a webserver which has two domains setup and pointed to it.
One domain goes though the Reverse-Proxy the other is just a simple direct link to the webserver.
If i download via the direct link domain i get
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 23.9M  100 23.9M    0     0  23.9M      0  0:00:01 --:--:--  0:00:01 52.9M

however if i download via the reverse-proxy it would start slow and then stall.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0 23.9M    0 16131    0     0   1344      0  5:11:53  0:00:12  5:11:41     0

I have tried using other suggestions from google.com about tuning nginx to which don't work so at a loose end. The page loads very fast but downloading anything from it doesn't work well
# ------------------------------------------------------------
# xxxx.xxxxx.xxxx.org
# ------------------------------------------------------------

server {
  set $forward_scheme http;
  set $server         "<IP_ADDRESS>";
  set $port           80;

  listen 8080;
#listen [::]:8080;

listen 4443 ssl http2;
#listen [::]:4443;

  server_name xxx.xxx.xxx.org; (Removed due to chance of traffic flooding)

  # Let's Encrypt SSL
  include conf.d/include/letsencrypt-acme-challenge.conf;
  include conf.d/include/ssl-ciphers.conf;
  ssl_certificate /etc/letsencrypt/live/npm-13/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/npm-13/privkey.pem;

# Asset Caching
  include conf.d/include/assets.conf;

  # Block Exploits
  include conf.d/include/block-exploits.conf;

  access_log /config/log/proxy_host-25.log proxy;

  location / {

      # Force SSL
    include conf.d/include/force-ssl.conf;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_http_version 1.1;

    # Proxy!
    include conf.d/include/proxy.conf;
  }

  # Custom
  include /data/nginx/custom/server_proxy[.]conf;
}

Just to let you know not sure why however after using the manual docker-compose.yml everything is working fine now, even managed to drop the database container section too so now it uses my main database server (makes backing database easier now).
Thanks for the awesome work though keep it up.

Note that this container is not using any external database.  The database used by Nginx Proxy Manager is a sqlite file stored under /config in the container.

Thanks for the reply, not sure what fixed the speed issue, weather placing the database from a file to and external one or just remaking the container manually, either way it is working great now without issue with all my services now working on a wildcard subdomain.
Great work and a great application to boot. Thank you.

My comment was more to inform you that the database choice is hackable, but not configurable.  So future updates of the container may break your setup, since it is assumed that the build-in sqlite is used.
If you prefer to use your how database, I would suggest to use the original Docker image from https://github.com/jc21/nginx-proxy-manager.


does this work with git LFS files?

No - but we could give it a shot. If you have ideas, please share.


Remove Melinda as a docs approver

Removes @mjgutermuth as a listed approver for docs repos - I approached her a couple of months ago looking for her to review a PR, and she said she was no longer an approver.

cc @ameowlia who mentioned updating the docs approvers in #471

Oops I approved because I thought that this was for my WG. It looks like it is for @Gerg's.


Deterministic test

Fixes #81.
This is not purely deterministic, in the sense that those tests which utilize some random values but will succeed 100% are left as they are.

I removed unused features (get_random_state() and custom seed arguments in setup_random()).

Probably this PR should left unmerged until the team reaches concensus on test determinacy.

"to-be-backported" label is attached to this PR. But as this PR includes feature and we do not add features to stable branches, I think we should not backport this PR. Is my understanding correct?

Hmm, stabilizing tests is also essential for stable branch.
So we need to backport this PR, IMO.

By the way, I think it's possible to implement this with a decorator rather than setup_random/teardown_random pair. I will rewrite.

Note that the above commit https://github.com/cupy/cupy/pull/82/commits/81088fc6358fd9f05d954c75de6f6c210a5f7f5c is a cherry-pick from #175.

Rewritten

Fixed!

LGTM!


Using mmod_dog_histerizer.dat, analyzing one 12MB jpg on iPhone X tries to std::alloc 3.3GB

Expected Behavior
I am trying to use the mmod_dog_hipsterizer.cpp code (modified) in an iPhone X app (iOS 11.4.1), along with the mmod_dog_hipsterizer.dat file, to identify any dog faces in an image from my phone's photo library. I removed all of the code to draw glasses and a mustache, as my project won't be doing that (and it's nice to avoid all the X11 stuff).
Current Behavior
When I run my code, I get this failure notice in the console:
DogTest(21658,0x1b3e0fb40) malloc: *** mach_vm_map(size=3,313,926,144) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
std::bad_alloc

Why is it trying to allocate 3.3GB? (I inserted some commas in the error message size to make it easier to parse by eye.)
Steps to Reproduce
I am trying to use mmod_dog_hipsterizer.cpp and .dat that I got from github. It works fine when I compile it on my MacBook Pro (macOS High Sierra 10.13.6, 16GB RAM). I want to use it on my iPhone X (iOS 11.4.1, 3GB RAM, 256GB "disk" capacity). After fiddling around with various flags and other Xcode settings I have gotten dlib to build (libdlib.a), using these flags:
GCC_PREPROCESSOR_DEFINITIONS = 'CMAKE_INTDIR="$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"' DLIB_JPEG_STATIC DLIB_NO_GUI_SUPPORT

OTHER_CPLUSPLUSFLAGS = -DDLIB_JPEG_SUPPORT -DDLIB_USE_BLAS -DDLIB_USE_LAPACK -DLAPACK_FORCE_UNDERSCORE '-ftemplate-depth=500' '-std=gnu++11'

I then used the mmod_dog_hipsterizer.cpp as the basis for an Objective-C test app ("DogTest"), adding libdlib.a to the project. I managed to get everything compiling and seeming to work (except for this one problem). The compiler flags are:
GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 DLIB_NO_GUI_SUPPORT $(inherited)

OTHER_CPLUSPLUSFLAGS = $(OTHER_CFLAGS) -DDLIB_JPEG_SUPPORT -DDLIB_USE_BLAS -DDLIB_USE_LAPACK -DENABLE_ASSERTS

I also linked in Accelerate.framework to get BLAS and LAPACK support.
(BTW, all of this is using the Debug configuration. I can also compile using Release for both libdlib.a and my DogTest.app, but I get the same problem.)
My DogTest.app uses UIImagePickerController to let me pick a picture from my photo library. I pick the latest picture, which actually happens to be a dog. :) The picture is in portrait orientation, and is 3024 x 4032, with size = 2.9MB. I get the full path to the .jpeg file of the picture, and pass it to these lines of code within my modified dog_hipsterizer code:
net_type net;
shape_predictor sp;
deserialize(pDatPath) >> net >> sp;  // pDatPath is the path to mmod_dog_hipsterizer.dat
matrix<rgb_pixel> img;
load_image(img, pJpgPath);  // pJpgPath is the path to the jpeg selected by user
auto dets = net(img);

When I run this code, everything works through the call to load_image, but then the call to net(img) outputs this failure notice in the console:
DogTest(21658,0x1b3e0fb40) malloc: *** mach_vm_map(size=3,313,926,144) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
std::bad_alloc

Why is it trying to allocate 3.3GB?
I stepped through the code (although I haven't used c++ much, and this is all my first exposure to machine learning, tensor, etc). I found this line in cuda/cpu_dlib.cpp, in the function void img2col:
        output.set_size(out_nr*out_nc,
                        data.k()*filter_nr*filter_nc);

When this is called, the values are effectively:
        output.set_size(5455 * 2025,
                        3 * 5 * 5);

(in other words, out_nr == 5455, out_nc == 2025, data.k() == 3, filter_nr == 5, and filter_nc == 5)
** Note: is it wrong that my code is using code in the cuda folder? I don't have any CUDA files on my Mac, and of course there are no libraries on the iPhone. **
Then the call which actually fails is in memory_manager_stateless/memory_manager_stateless_kernel_1.h, in the function allocate_array (reformatted for prettiness):
T* allocate_array (size_t size)
{
    return new T[size];
}

In conclusion: what am I doing wrong? Is this all correct given the data that I'm working with? Is the large size (5455 * 2025) coming from the trained data set? Can/should I reduce that somehow (and would I lose much accuracy)? Is there another solution that will enable this to work on an iPhone?
I tried looking into the set_size() function but I couldn't find it in the documentation index. http://dlib.net/faq.html and http://dlib.net/matrix_ex.cpp.html weren't enough to help me figure out the problem, probably due to my lack of experience in this area.
Thanks for any help, insights, or comments! (And thanks for an amazing library and data sets!)

Version
I'm using dlib 19.15, which I downloaded from https://github.com/davisking/dlib

Platform
iOS 11.4.1

Compiler
Xcode version 9.4.1

Big images require a lot of ram to process. Make your image smaller before running the program on it.

OK, thank you!
For anyone interested: I had to resize the image down to 150x200. (Even 300x400 was too big.)

Is your girlfriend a dog? 🤔
Just kidding, obviously 🤣
My code is incomplete & imperfect, but usable. I'll see if I can put up something this weekend. You're just targeting iOS, nothing unusual, right? What would be the image input: selecting from camera roll, or taking live picture with camera?

Haha, could have worded that better for sure. 3AM here :P
Just iOS, right now would be just a UIImage from a camera snapshot taken within the app. Processed then shown to the user in a preview. 👍  No worries if its WIP, anything would help.

Sorry I couldn't get to it until now, but here's a starter project that should help:
https://github.com/Kenster999/dlib_dog_hipsterizer
Let me know if you have any questions, although hopefully the README.md is pretty clear. You'll definitely want/need to edit the code for your own purposes. "Enjoy!"


libxx: Update README

Summary
This doc seems a bit outdated to me.
This commit is my best attempt to update it.
Impact
Testing

@yamt would you want to fix the sim readme for cxxtest as well that was part of #2086  I think there is also old/wrong information there about the state libxx.  If you want to defer that as well that is fine, I just really did not feel comfortable making the updates.

@btashton i haven't looked at uClibc++ yet. only other twos.

Thanks for all the work on the C++ support, I'll bring this in now.  We should probably add some real docs / a guide to the published documentation about the recommended way to use C++ at some point.


auto-cherry-pick: [dev1] Revert "Nice log" - 79

[Auto generated]
Number: [#79]

github-gitlab-webhook-server: Closing issue for PR: auto-cherry-pick: [dev1] Revert "Nice log".
PR was closed.


Empty dashboard bug

Hello Tom and Team, could you please take a look at this issue?
Once I loaded my wallet and realized that dashboard is totally empty.
Win10, on my Linux laptop all working perfect.
please let me know if any debug files are needed.
Thanks in advance,
Ivan
P.S. have a trouble attaching screenshot, will add later in a comment.

If your wallet is empty, you need to generate addressese and send some coins to them.
Not sure what's the issue here

Tom, I have used wallet for a long time and have huge history in it.
I have every day new coins to my wallet and amount is changed, but dashboard is empty.
We discussed it in telegram and it seems not only I have a problem.
Please find screenshot here:
https://drive.google.com/file/d/1eFTm9uPUzGq5nn8urmVI_v7YqT178pmc/view?usp=sharing

So basically you can see your balance, but you don't see the transactions anymore?

Yes, exaclty!

Can you see json files in directory resources\app\settings\ ?
There should be transactions.json, this file should contain past transactions. Maybe try to shutdown wallet, erase the file, and start wallet again. It should recreate the transactions file from blockchain. Basically any of the json files can be safely erased. I am wondering, how big is your transactions.json file if it exists?
Furthermore, you can press F12 when wallet is running to see debug console, maybe there are some errors logged? Thanks

Hello Tom,
I've found the next error while loading wallet (in F12 console):
lib.js:9 SyntaxError: Unexpected token  in JSON at position 0
    at JSON.parse (<anonymous>)
    at JSON_fromString (lib.js:9)
    at storage_load (lib.js:19)
    at votecoin.js:50

errors below are adding continuously:
votecoin.js:183 Uncaught TypeError: transactions.push is not a function
    at add_transaction (votecoin.js:183)
    at main.rpc (votecoin.js:248)
    at CallbacksRegistry.apply (D:\PATH_TO_WALLET\resources\electron.asar\comm…:48)
    at EventEmitter.<anonymous> (D:\PATH_TO_WALLET\resources\electron.asar\rend…:299)
    at emitThree (events.js:116)
    at EventEmitter.emit (events.js:197)
add_transaction @ votecoin.js:183
main.rpc @ votecoin.js:248
apply @ D:\PATH_TO_WALLET\resources\electron.asar\comm…:48
(anonymous) @ D:\PATH_TO_WALLET\resources\electron.asar\rend…:299
emitThree @ events.js:116
emit @ events.js:197
votecoin.js:183 Uncaught TypeError: transactions.push is not a function
    at add_transaction (votecoin.js:183)
    at main.rpc (votecoin.js:248)
    at CallbacksRegistry.apply (D:\PATH_TO_WALLET\resources\electron.asar\comm…:48)
    at EventEmitter.<anonymous> (D:\PATH_TO_WALLETb\resources\electron.asar\rend…:299)
    at emitThree (events.js:116)
    at EventEmitter.emit (events.js:197)

My transactions.json shows only "NUL" now (notepad++), seize - 259 Kb
Will try delete file, reload wallet and update issue.
Thanks,
Ivan

How big is your transactions.json file now? It is possible that if the file is too big, and if the wallet was closed at the middle of writing the file to disk, its content got corrupted and on next load it failed to initiate the transactions array and was confused. I think the proper fix will be for VoteCoin wallet to check if a proper JSON is in the .json file, and if not, initiate it as empty and reload from blockchain automatically.

Now it's 71 Kb.
Yes, make sense - check if JSON is valid, then proceed, recreate otherwise.

Thank you


Auto content import on boot needs to be done as a configured user

Currently auto import is done as admin which is no good if you do not want that user present in stroom.
Suggestion is to have a config prop like autoImportAs and for it to take the identity of a user or group.  The import would run as this user/group so all imported content would be owned by them/it.

Is it safe to assume that there is never a group and a user with the same name?

They can be the same.  will need another prop to specify grp or usr

Fixed in >7.4-beta.13