[youku] Update ccode

Change-Id: Id397e814e81ff560506d68563b7409eebbe5943d
In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under Unlicense. Check one of the following options:

[ ] I am the original author of this code and I am willing to release it under Unlicense
[x] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

What is the purpose of your pull request?

[x] Bug fix
[ ] Improvement
[ ] New extractor
[ ] New feature

Description of your pull request and other information
PR https://github.com/rg3/youtube-dl/pull/14887 has solved issue https://github.com/rg3/youtube-dl/issues/14880 , however there is still a bug in which the length of downloaded video is about 10 minutes actually 20+ minutes.

Nice!

there is still a bug in which the length of downloaded video is about 10 minutes actually 20+ minutes.

An example? Better to have a non-restricted (available outside Mainland China) video.

Current ccode = '0501'  cause another problem.

Maybe https://github.com/soimort/you-get/commit/219ac3ce62cbebf7a12882086d080d184248d625 can better solve  #14932 and the length problem.

Thanks for the reference. Looks like 0512 is the best choice?

I have not tested it yet. 0512 seems to be the best choice.

I have tried ccode 0508&0512,they can't work

lin@lin-PC:$ youtube-dl -U
youtube-dl is up-to-date (2017.12.14)
lin@lin-PC:$ youtube-dl -F http://v.youku.com/v_show/id_XMzI0MTE0MzUyOA==.html?spm=a2hcm.20010061.contentHolderUnit1.A
[youku] XMzI0MTE0MzUyOA: Retrieving cna info
[youku] XMzI0MTE0MzUyOA: Downloading JSON metadata
ERROR: Youku server reported error -6004: 客户端无权播放,201; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

@eliasp You should remake youtube-dl by yourself after you change the ccode.

@yan12125
I have tested 0508 and 0512 but there is a bug.

Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 159 (attempt 1 of 10)...

So I think ccode = 0507 is the best choice.

@CoXier: Which video? It would be great to add the link to _TESTS.

There are so many tests such as http://v.youku.com/v_show/id_XMzEyODg5NjA0MA==.html?spm=a2hww.20027244.m_250003.5~5!2~5~5~A

Thanks! Could you use 0507 in this PR and add a test case with comments?

What should I do after I add a test ? Should I run the test? If so, how to run the test?  @yan12125

Yes, please run it. You can check step 6 of https://github.com/rg3/youtube-dl#adding-support-for-a-new-site for details.

Thanks @yan12125 .
 python test/test_download.py TestDownload.test_Youku

[youku] XMTc1ODE5Njcy: Retrieving cna info
[youku] XMTc1ODE5Njcy: Downloading JSON metadata
[info] Writing video description metadata as JSON to: test_Youku_XMTc1ODE5Njcy.info.json
[debug] Invoking downloader on u'http://pl-ali.youku.com/playlist/m3u8?vid=XMTc1ODE5Njcy&type=mp4&ups_client_netip=739c8f6e&ups_ts=1513843987&utid=E1vCEs12H2gCAXOcj24oe5R6&ccode=0507&psid=067e1c956da0710de768712d272ea245&duration=74&expire=18000&ups_key=cdccc6eb14875463b2475228eacd6aa9'
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 8
[download] Destination: test_Youku_XMTc1ODE5Njcy.mp4
[download] 100% of 10.00KiB in 00:00
.

Ran 1 test in 1.126s

OK

Is it right as expected?

@CoXier
When I use 0512 and 0508,There was indeed an interruption of downloads during the download process, but if I tried the download again, it would continue with the previous download process until the 1080p video was successfully downloaded.
0507 is not a good option because when using it, youtube-dl can not sniff the video options to 1080p.
Some of Youku's videos are only available to VIP users，and I am YouKu's VIP，Using 0508 or 0512, Youtube-dl can sniff 1080p video, which is very important to me.When I use 0512 and 0508,There was indeed an interruption of downloads during the download process, but if I tried the download again, it would continue with the previous download process until the 1080p video was successfully downloaded.
0507 is not a good option because when using it, youtube-dl can not sniff the video options to 1080p.
Some of Youku's videos are only available to VIP users，and I am YouKu's VIP，Using 0508 or 0512, Youtube-dl can sniff 1080p video, which is very important to me.

However if I use 0512 and 0508 , I will get bug.

Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 159 (attempt 1 of 10)...

I am not a VIP user and what will happen if you exit your account?

When I exit my account，and reboot my PC，0508 and 0512 are perfect

I am confused about my bug. How about http://v.youku.com/v_show/id_XMzEyODg5NjA0MA\=\=.html\?spm\=a2hww.20027244.m_250003.5\~5\!2\~5\~5\~A ?

@CoXier
0512 & 0508 are perfect  here:

@ellicefix
I do not know why 0508 can not work for me.
➜  Movies youtube-dl -f h4-2  'http://v.youku.com/v_show/id_XMzEyODg5NjA0MA\=\=.html\?spm\=a2hww.20027244.m_250003.5\~5\!2\~5\~5\~A'

The output:
[youku] XMzEyODg5NjA0MA: Retrieving cna info
[youku] XMzEyODg5NjA0MA: Downloading JSON metadata
[hlsnative] Downloading m3u8 manifest
[hlsnative] Total fragments: 314
[download] Destination: 猎场 01-XMzEyODg5NjA0MA.mp4
[download]  28.0% of ~644.18MiB at 726.12KiB/s ETA 12:58[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 1 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 2 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 3 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 4 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 5 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 6 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 7 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 8 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 9 of 10)...
[download] Got server HTTP error: HTTP Error 403: Forbidden. Retrying fragment 89 (attempt 10 of 10)...
.......
[download] 100% of 180.54MiB in 10:12

I can reproduce the issue pasted by @CoXier. The key difference might be the time. @ellicefix downloads the whole 612MB video in less than 2 minutes. I guess youku segment URLs expired in a short time.

I checked http://v.youku.com/v_show/id_XMzIwNDkzNjU3Ng==.html?spm=a2hww.20027244.uerCenter.5!3~5~5!2~5~DL~DD!2~A&firsttime=235 with unblock-youku, and 1080P is unavailable on Chrome. 0507 might be an accident. For now I prefer 0508 or 0512. @CoXier mind an update for this PR?

The streaming video of Youku is segmented, and the length of each segment is seven minutes. Don't know it on the IP access request has no length limit, this is another of my laptop computer, using a new China IP address, in addition, I have never been on this computer, I logged Youku VIP account, after the test, I found that 0512 and 0508 were successfully sniffing probe into 1080p video resources, but also can successfully download them. Here is not my home fast speed, only 50M, but also can in 4 minutes when Rick finished downloading task.
Another important thing is that ccode=0507 can't sniff out the video resources of 1080p. If I try to use the IP addresses of Beijing, Shanghai, Guangzhou, Tianjin, Henan, Hefei, Xi'an and other places, we can repeat the situation 100%.

@yan12125 @eliasp
I do not know why 0508 and 0512 can not work for me. As you point, network speed maybe cause this bug. But many people in Chinese mainland do not have fast network so I do not think 0508 and 0512 are the best choice.
In addition, I also tested you-get with ccode = 0508. Here is result:
Downloading 猎场 01.mp4 ...
83.4% (489.7/586.9MB) ├█████████████████████████████████████████████████████████████████████████████████████████████████████████████████───────────────────────┤[21/24]  674 kB/s[DEBUG] HTTP Error with code403
87.4% (512.8/586.9MB) ├███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████─────────────────┤[22/24]  705 kB/s[DEBUG] HTTP Error with code403
[DEBUG] HTTP Error with code403
92.2% (541.0/586.9MB) ├██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████──────────┤[23/24]  707 kB/s[DEBUG] HTTP Error with code403
[DEBUG] HTTP Error with code403
[DEBUG] HTTP Error with code403

I have to call you-get xx serval times to finish the task. Maybe parsing algorithm should be enhanced.

@CoXier
Does you-get can sniff 1080p video resources on your PC ?
I have tried CCOD=0508，it can't sniff the 1080p video resources

Yes I can.
[DEBUG] get_content: https://ups.youku.com/ups/get.json?vid=XMzEyODg5NjA0MA==&ccode=0508&client_ip=<IP_ADDRESS>&utid=9a7DEijPsC4CAd6jwq3JmoWE&client_ts=1513931000
site:                优酷 (Youku)
title:               猎场 01
streams:             # Available quality and codecs
    [ DEFAULT ] _________________________________
    - format:        mp4hd3
      container:     mp4
      video-profile: 1080P
      size:          586.9 MiB (615427342 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=hd3&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=mp4hd3 [URL]

    - format:        mp4hd3v2
      container:     mp4
      video-profile: 1080P
      size:          585.6 MiB (614082647 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=hd3&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=mp4hd3v2 [URL]

    - format:        mp4hd2
      container:     mp4
      video-profile: 超清
      size:          298.5 MiB (312986014 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=hd2&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=mp4hd2 [URL]

    - format:        mp4hd2v2
      container:     mp4
      video-profile: 超清
      size:          297.2 MiB (311627602 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=hd2&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=mp4hd2v2 [URL]

    - format:        mp4hd
      container:     mp4
      video-profile: 高清
      size:          179.3 MiB (188045305 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=mp4&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=mp4hd [URL]

    - format:        flvhd
      container:     flv
      video-profile: 渣清
      size:          103.4 MiB (108413466 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=flv&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=flvhd [URL]

    - format:        3gphd
      container:     mp4
      video-profile: 渣清
      size:          71.1 MiB (74565964 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=mp4&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=3gphd [URL]

    - format:        mp4sd
      container:     mp4
      video-profile: 标清
      size:          103.0 MiB (108041405 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzEyODg5NjA0MA%3D%3D&type=flv&ups_client_netip=dea3c2b6&ups_ts=1513931001&utid=9a7DEijPsC4CAd6jwq3JmoWE&ccode=0508&psid=0d8e13e6e27f9fd04f9bfad5b19a21f6&duration=3279&expire=18000&ups_key=0d16d60505c9970234177cb5741d0a4e
    # download-with: you-get --format=mp4sd [URL]

audio-languages:
    - lang:          国语
      download-url:  http://v.youku.com/v_show/id_XMzEyODg5NjA0MA==

@CoXier
ccode=0508，there is no 1080p's source in the result
lin@lin-PC:~$ you-get -i 'http://v.youku.com/v_show/id_XMzIwNDkzNjU3Ng==.html?spm=a2hww.20027244.uerCenter.5!3~5~5!2~5~DL~DD!2~A&firsttime=235'
It seems that your ffmpeg is a nightly build.
Please switch to the latest stable if merging failed.
site:                优酷 (Youku)
title:               虎啸龙吟 14
streams:             # Available quality and codecs
[ DEFAULT ] _________________________________
- format:        mp4hd2
container:     mp4
video-profile: 超清
size:          266.6 MiB (279547493 bytes)
m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=hd2&ups_client_netip=7b785236&ups_ts=1513931274&utid=BrDDEh0mZD4CAXt4UjZlfRce&ccode=0507&psid=5a9ff688ef9e4e43b906694b8d405d69&duration=2591&expire=18000&ups_key=6551417640423327e7dd7bdc4baf48c7
# download-with: you-get --format=mp4hd2 [URL]
- format:        mp4hd2v2
  container:     mp4
  video-profile: 超清
  size:          315.9 MiB (331252118 bytes)
  m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=hd2&ups_client_netip=7b785236&ups_ts=1513931274&utid=BrDDEh0mZD4CAXt4UjZlfRce&ccode=0507&psid=5a9ff688ef9e4e43b906694b8d405d69&duration=2591&expire=18000&ups_key=6551417640423327e7dd7bdc4baf48c7
# download-with: you-get --format=mp4hd2v2 [URL]

- format:        mp4hd
  container:     mp4
  video-profile: 高清
  size:          188.7 MiB (197886297 bytes)
  m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=mp4&ups_client_netip=7b785236&ups_ts=1513931274&utid=BrDDEh0mZD4CAXt4UjZlfRce&ccode=0507&psid=5a9ff688ef9e4e43b906694b8d405d69&duration=2591&expire=18000&ups_key=6551417640423327e7dd7bdc4baf48c7
# download-with: you-get --format=mp4hd [URL]

- format:        flvhd
  container:     flv
  video-profile: 渣清
  size:          87.9 MiB (92117488 bytes)
  m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=flv&ups_client_netip=7b785236&ups_ts=1513931274&utid=BrDDEh0mZD4CAXt4UjZlfRce&ccode=0507&psid=5a9ff688ef9e4e43b906694b8d405d69&duration=2591&expire=18000&ups_key=6551417640423327e7dd7bdc4baf48c7
# download-with: you-get --format=flvhd [URL]

- format:        3gphd
  container:     mp4
  video-profile: 渣清
  size:          64.1 MiB (67165883 bytes)
  m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=mp4&ups_client_netip=7b785236&ups_ts=1513931274&utid=BrDDEh0mZD4CAXt4UjZlfRce&ccode=0507&psid=5a9ff688ef9e4e43b906694b8d405d69&duration=2591&expire=18000&ups_key=6551417640423327e7dd7bdc4baf48c7
# download-with: you-get --format=3gphd [URL]

- format:        mp4sd
  container:     mp4
  video-profile: 标清
  size:          102.4 MiB (107423519 bytes)
  m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=flv&ups_client_netip=7b785236&ups_ts=1513931274&utid=BrDDEh0mZD4CAXt4UjZlfRce&ccode=0507&psid=5a9ff688ef9e4e43b906694b8d405d69&duration=2591&expire=18000&ups_key=6551417640423327e7dd7bdc4baf48c7
# download-with: you-get --format=mp4sd [URL]

audio-languages:
- lang:          国语
download-url:  http://v.youku.com/v_show/id_XMzIwNDkzNjU3Ng==

Wow, so strange.
you-get -i  http://v.youku.com/v_show/id_XMzIwNDkzNjU3Ng\=\=
site:                优酷 (Youku)
title:               虎啸龙吟 14
streams:             # Available quality and codecs
    [ DEFAULT ] _________________________________
    - format:        mp4hd3
      container:     mp4
      video-profile: 1080P
      size:          550.0 MiB (576763776 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=hd3&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=mp4hd3 [URL]

    - format:        mp4hd3v2
      container:     mp4
      video-profile: 1080P
      size:          604.6 MiB (633958970 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=hd3&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=mp4hd3v2 [URL]

    - format:        mp4hd2
      container:     mp4
      video-profile: 超清
      size:          266.6 MiB (279547493 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=hd2&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=mp4hd2 [URL]

    - format:        mp4hd2v2
      container:     mp4
      video-profile: 超清
      size:          315.9 MiB (331252118 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=hd2&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=mp4hd2v2 [URL]

    - format:        mp4hd
      container:     mp4
      video-profile: 高清
      size:          188.7 MiB (197886297 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=mp4&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=mp4hd [URL]

    - format:        flvhd
      container:     flv
      video-profile: 渣清
      size:          87.9 MiB (92117488 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=flv&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=flvhd [URL]

    - format:        3gphd
      container:     mp4
      video-profile: 渣清
      size:          64.1 MiB (67165883 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=mp4&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=3gphd [URL]

    - format:        mp4sd
      container:     mp4
      video-profile: 标清
      size:          102.4 MiB (107423519 bytes)
      m3u8_url:      http://pl.cp31.ott.cibntv.net/playlist/m3u8?vid=XMzIwNDkzNjU3Ng%3D%3D&type=flv&ups_client_netip=dea3c2be&ups_ts=1513931589&utid=QbHDEmV5EkUCAd6jwoxgPE%2FB&ccode=0508&psid=65c23c3114e3865e3c10e5aee35367c5&duration=2591&expire=18000&ups_key=6a67c0b17bd2883f7f14de3205d017a6
    # download-with: you-get --format=mp4sd [URL]

audio-languages:
    - lang:          国语
      download-url:  http://v.youku.com/v_show/id_XMzIwNDkzNjU3Ng==

Can you remove you-get and make it manually ?

@CoXier
Do you install you-get by pip3 ?
$ pip3 install --upgrade you-get
Collecting you-get
Using cached you_get-0.4.995-py3-none-any.whl
Installing collected packages: you-get
Successfully installed you-get-0.4.995

No , I clone it and execute make install in the root dir.

which version is your you-get ?

0.4.995.

@CoXier
we have a same version,so strange indeed.it can't sniff 1080p source when i had a try last year,which is the   reason I'd better choose YouTuBe-DL，I will try to make it from source code tonight,thank you very much.

The proper way to support fetching 1080P videos is adding login functions. For now 0507 is better so that users with slow networks can still download videos.

Since people want to collect a video on a local hard drive, this means that he has a considerable demand for a better quality video.
because most low-quality streaming video is readily available. For now, as long as the download time is controlled at about 5 minutes, there will be no download interruption,
If Youtube-dl interrupts the HTTP request in 4 minutes in a timely manner and then delays it by 2 seconds and sends the same HTTP request again, it will be able to get another 5 minutes for current downloading, but of course we just repeat Every 4 minutes to interrupt once, delay, and then download, we can get the perfect download experience for users no detecting the flaw.
I use [ctrl+C]&[ctrl+shift+C], Successfully achieved an ultra-long 1080p movie,look:
lin@lin-PC:~$ youtube-dl -F 'http://v.youku.com/v_show/id_XMjk4NzA1OTMzNg==.html?spm=a2h0k.8191407.0.0&from=s1.8-3-1.1' [youku] XMjk4NzA1OTMzNg: Retrieving cna info [youku] XMjk4NzA1OTMzNg: Downloading JSON metadata [info] Available formats for XMjk4NzA1OTMzNg: format code  extension  resolution note h5-0         mp4        480x270    146.19MiB h5-1         mp4        480x270    148.46MiB h4-0         mp4        640x360    205.94MiB 3            mp4        640x360    237.63MiB 4            mp4        640x360    239.89MiB h4-1         mp4        640x360    240.90MiB h3-0         mp4        960x540    407.74MiB h3-1         mp4        960x540    410.74MiB h4-2         mp4        1280x720   567.47MiB 9            mp4        1280x720   651.29MiB h4-3         mp4        1280x720   653.90MiB 11           mp4        1280x720   655.13MiB h4-4         mp4        1920x1080  1.12GiB 13           mp4        1920x1080  1.18GiB 14           mp4        1920x1080  1.24GiB h4-5         mp4        1920x1080  1.24GiB (best) lin@lin-PC:~$ youtube-dl -f h4-5 'http://v.youku.com/v_show/id_XMjk4NzA1OTMzNg==.html?spm=a2h0k.8191407.0.0&from=s1.8-3-1.1' [youku] XMjk4NzA1OTMzNg: Retrieving cna info [youku] XMjk4NzA1OTMzNg: Downloading JSON metadata [hlsnative] Downloading m3u8 manifest [hlsnative] Total fragments: 624 [download] Destination: 你的名字。-XMjk4NzA1OTMzNg.mp4 [download]  43.1% of ~1.33GiB at  1.61MiB/s ETA 02:53^C ERROR: Interrupted by user lin@lin-PC:~$ youtube-dl -f h4-5 'http://v.youku.com/v_show/id_XMjk4NzA1OTMzNg==.html?spm=a2h0k.8191407.0.0&from=s1.8-3-1.1' [youku] XMjk4NzA1OTMzNg: Retrieving cna info [youku] XMjk4NzA1OTMzNg: Downloading JSON metadata [hlsnative] Downloading m3u8 manifest [hlsnative] Total fragments: 624 [download] Destination: 你的名字。-XMjk4NzA1OTMzNg.mp4 [download] 100% of 1.29GiB in 02:48 [ffmpeg] Fixing malformed AAC bitstream in "你的名字。-XMjk4NzA1OTMzNg.mp4"

@yan12125
Will you solve this bug in the future? Now youtube-dl can not download any video form youku.

@CoXier: I thought you are still working for this? If not I can apply a patch directly to master.

Yes I am working for this however I do not how to sniff 1080p source. So 0507 is my only choice. Is  label pending-fix  for 1080p source ? If you can solve 1080p source, just close the pr and apply a patch directly to master.

1080P extraction is beyond this PR. The label is for the test case and a working ccode only, and 0507 is fine here.

There is no need for adding test case because 0508 can not pass test before case.

Got it. Then just updating ccode is enough.

Hi @yan12125 , should this pr be merged or closed?☺

Sorry, I thought there would be a notification from Github for pull requests updates. Thanks for the fix, anyway!

Thank you and @ellicefix .


Consider switching back to interpreted heist

We chose to use compiled heist to get maximum performance, but it's causing trouble in the actual use of offset (because of inflexibility). Perhaps we should remove it?

:+1:

This will be addressed by #16.


More info

When you say "Once you have the token, you can now send it to your backend so you can charge the customer later on" what do you mean?
I'm trying to find info here: https://stripe.com/docs/charges but can't see any javascript reference

This plugin communicates with Stripe's servers via their mobile SDKs. It's only job is to send credit card information safely to Stripe, and retrieve a token that represents that credit card. Once you have the token, you can instruct your back end server to do things with it, such as: (1) charge the credit card, or (2) attach it to a customer's file.
In the page you sent me, you will notice that they are sending a parameter to stripe's API named source. That parameter is basically the credit card token that you got from the mobile SDK/plugin.

Ok, so something like this maybe?
$http.post('https://api.stripe.com/v1/charges', token)

Follow the examples here: https://stripe.com/docs/charges
You don't want to ask stripe to charge a card via your client side app, because then you will need to include your secret token in the code. You need a backend.

Don't understand what do you mean when you say that "I need a backend".
My app is just a frontend app with no backend at all. Can I send this toke (which I get properly) to any Stripe's API?

You can but it's not secure. You can't charge a customer without your
secret key. And the secret key should not be included in your frontend
application. This is all mentioned in stripe's API.
As far as I know there is no way to charge via stripe securely without some
sort of backend. You can setup a "Serverless" server on AWS lambda for free
or almost free.
Regards,
Ibby Hadeed
Sent from my phone
On Nov 22, 2017 5:26 AM, "Daniel"<EMAIL_ADDRESS>wrote:

Don't understand what do you mean when you say that "I need a backend".
My app is just a frontend app with no backend at all. Can I send this toke
(which I get properly) to any Stripe's API?
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/zyra/cordova-plugin-stripe/issues/39#issuecomment-346308401,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ANJ8dHEQctYm-XEcqmgE3pNoPEb5ZTkHks5s4_bdgaJpZM4QmANI
.

Ok fair enough. In that case I'm afraid I can't use it unless I have Firebase

AFAIK Firebase is a database-as-a-service, so that wouldn't help either. You need to setup a server manually, use Serverless, or use an PaaS like Heroku.


Cache citation data in a file

I though about using citation-js and Wikidata for reference management from command line. Given a list of Wikidata ids citation-js can lookup and convert to CSL-JSON, e.g.:
echo Q163335 > citekeys
echo Q3290152 >> citekeys
citation-js -o references -i citekeys

When added another key I don't want citation-js to download known items again. This can be done with some command line magic:
echo Q3020388 >> citekeys
{ cat citekeys & jq -r .[].id references.json; } | sort | uniq -u | citation-js >> references.json

A missing step is needed to combine the list of JSON array in references.json (or implement https://github.com/larsgw/citation.js/issues/163).
Would it make sense to include this functionality in citation-js?:
citation --cache references.json < citekeys

I'm only interested in CSL-JSON because that's all needed to create citations and bibliographies. If settings  have changed and the original input is needed, one should better rebuild the full cache. Items should be identified by their citation key which is in the id field for items converted from Wikidata. I have not tried other importers but heuristics to merge same publications from different sources should be out of the scope of citation-js. Getting the same record from Wikidata via QID and from crossref via DOI would be two records in the cache.


mx.eia() is slower than mx.cpu()

Hi, I ran code Loading From Model Zoo at section on Sagemaker Notebook with c5.xlarge + eia1.medium.
https://docs.aws.amazon.com/elastic-inference/latest/developerguide/ei-python.html#ei-mxnet-gluon-api
but its result does not make sense. mx.cpu() is much faster than mx.eia().
so I tried to other models, such as ssd and yolo3, with same manner, and its result is much worse than example above. (took 0.7sec on cpu but took 2.6sec on eia..)
import mxnet as mx
import gluoncv as gcv
from timeit import time
from gluoncv.utils import download, viz
from matplotlib import pyplot as plt

ctx = mx.eia()
# ctx = mx.cpu()

net = gcv.model_zoo.get_model(
    'yolo3_darknet53_coco',
    pretrained=True,
    ctx=ctx,
)
net.hybridize(static_alloc=True)
net.reset_class(classes=['person'], reuse_weights=['person'])

download('https://www.thenational.ae/image/policy:1.943775:1574927662/image/2019-11-27T201501Z_916737204_RC2WJD92AWOT_RTRMADP_3_SOCCER-CHAMPIONS-FCB-DOR-REPORT.JPG?$p=3e1314e&w=2880&$w=0bef4b4', 'messi.jpg')

x, img = gcv.data.transforms.presets.yolo.load_test(
   'messi.jpg', short=416
)

t1 = time.time()
cid, score, bbox = net(x.as_in_context(ctx))
mx.nd.waitall()
print(f'Elapsed: {time.time() - t1:.3f}')

ax = viz.plot_bbox(img, bbox[0], score[0], cid[0], class_names=['person'])
plt.show()

Does Elastic Inference not working with gluoncv model-zoo at all?

@samskalicky

Hi @haandol
Can you please try running more than 1 inference and report the timings you're seeing (i.e. output of your script) if you still see poor performance? Please try your inference code in a loop like:

for i in range(10):
  tmp = x.as_in_context(ctx)
  t1 = time.time()
  cid, score, bbox = net(tmp)
  mx.nd.waitall()
  print(f'Elapsed: {time.time() - t1:.3f}')

The first inference includes some warm-up operations. You should expect to see much better performance on the 2nd and subsequent inferences.

Hi @samskalicky
the duration I mentioned above was average of 10 runs not just single run.

Here is the durations,
Elapsed: 2.616  # very first invocation
Elapsed: 2.184
Elapsed: 2.339
Elapsed: 2.289
...

Thanks @haandol for the data. Could you please try with static_shape=True also like:
net.hybridize(static_alloc=True, static_shape=True)

Im getting the following output with static_shape=True set also:
$ python test.py
Using Amazon Elastic Inference Client Library Version: 1.5.3
Number of Elastic Inference Accelerators Available: 1
Elastic Inference Accelerator ID: eia-7fe9c7612eee4e93acdfeea1ef55171e
Elastic Inference Accelerator Type: eia1.medium
Elastic Inference Accelerator Ordinal: 0

[04:52:35] src/operator/subgraph/build_subgraph.cc:686: start to execute partition graph.
Elapsed: 3.696
Elapsed: 0.118
Elapsed: 0.109
Elapsed: 0.108
Elapsed: 0.110
Elapsed: 0.110
Elapsed: 0.121
Elapsed: 0.110
Elapsed: 0.109
Elapsed: 0.109

Yes, I've seen that case. but that will happened only if you inference same image twice.
If you inference A.jpg after that B.jpg respectively, the duration will not be reduced at all.

@haandol can you pro

Yes, I've seen this case. but this happens only if you inference same image twice. I think duration time is reduced by cache of MXNet or something, not EI.
If you inference A.jpg, B.jpg and A.jpg sequentially, the duration will not be reduced at all.

Can you provide a reproducible test script?
When I change the code to load the same image multiple times (MXNet cannot tell you're loading the same image, they are effectively all different) this is the changed code:
tmp = []
for i in range(10):
    x, img = gcv.data.transforms.presets.yolo.load_test(
        'messi.jpg', short=416
    )
    tmp.append(x)

for i in range(10):
    img = tmp[i].as_in_context(ctx)
    t1 = time.time()
    cid, score, bbox = net(img)
    mx.nd.waitall()
    print(f'Elapsed: {time.time() - t1:.3f}')

And here is the output of this script:
$ python test.py
Using Amazon Elastic Inference Client Library Version: 1.5.3
Number of Elastic Inference Accelerators Available: 1
Elastic Inference Accelerator ID: eia-##########################
Elastic Inference Accelerator Type: eia1.medium
Elastic Inference Accelerator Ordinal: 0

[22:56:04] src/operator/subgraph/build_subgraph.cc:686: start to execute partition graph.
Elapsed: 3.646
Elapsed: 0.143
Elapsed: 0.110
Elapsed: 0.105
Elapsed: 0.105
Elapsed: 0.105
Elapsed: 0.105
Elapsed: 0.107
Elapsed: 0.105
Elapsed: 0.106

Hi @samskalicky
Here is the code,
import mxnet as mx
import gluoncv as gcv
from timeit import time
from itertools import cycle
from gluoncv.utils import download, viz
from matplotlib import pyplot as plt

ctx = mx.eia()

net = gcv.model_zoo.get_model(
    'yolo3_darknet53_voc',
    pretrained=True,
    ctx=ctx,
)
net.hybridize(static_alloc=True, static_shape=True)
net.reset_class(classes=['person'], reuse_weights=['person'])

download('https://www.thenational.ae/image/policy:1.943775:1574927662/image/2019-11-27T201501Z_916737204_RC2WJD92AWOT_RTRMADP_3_SOCCER-CHAMPIONS-FCB-DOR-REPORT.JPG?$p=3e1314e&w=2880&$w=0bef4b4', 'messi.jpg')
download('https://www.bbc.co.uk/staticarchive/e746d29e81318b0f9dbc6cea9d0a7f7630bf2545.jpg', 'ronaldinho.jpg')

idx = 0
for filename in cycle(['messi.jpg', 'ronaldinho.jpg']):
    if idx > 5:
        break

    x, img = gcv.data.transforms.presets.ssd.load_test(
       filename, short=416
    )

    t1 = time.time()
    cid, score, bbox = net(x.as_in_context(ctx))
    mx.nd.waitall()
    print(f'Elapsed: {filename} - {time.time() - t1:.3f}')
    idx += 1

and results goes something like that
Elapsed: messi.jpg - 2.490
Elapsed: ronaldinho.jpg - 2.273
Elapsed: messi.jpg - 2.232
Elapsed: ronaldinho.jpg - 2.390
Elapsed: messi.jpg - 2.415
Elapsed: ronaldinho.jpg - 2.356

by this, I suspect the EI does not work but cache does in amazoneia-mxnet or somewhere else.

Hi @haandol, in your example the images are different shapes:
messi.jpg (1, 3, 416, 739)
ronaldinho.jpg (1, 3, 416, 642)
When you run inference with different shapes, MXNet executes a reshape operation on the model. This frees up any memory allocated for executing operators/layers and re-allocates new memory in the new shapes to execute inference on the new inputs.
I modified your loop to add image pre-processing (making all images the same size). You may want to do some thing more complex like pad rather than crop (but thats up to you). As long as the images are the same shape you will not incur a reshape operator cost. Heres the new code:
for filename in cycle(['messi.jpg', 'ronaldinho.jpg']):
    if idx > 5:
        break

    x, img = gcv.data.transforms.presets.ssd.load_test(
       filename, short=416
    )
    y = x[0].transpose((1, 2, 0)) # Channel last
    z,_ = mx.image.center_crop(y, (416, 642)) # crop to largest common size
    z = z.transpose((2, 0, 1)) # Channel first
    z = z.expand_dims(axis=0) # batchify
    tmp = z.as_in_context(ctx)
    t1 = time.time()
    cid, score, bbox = net(tmp)
    mx.nd.waitall()
    print(f'Elapsed: {filename} - {time.time() - t1:.3f}')
    idx += 1

And heres the output I get:
$ python test4.py
Using Amazon Elastic Inference Client Library Version: 1.5.3
Number of Elastic Inference Accelerators Available: 1
Elastic Inference Accelerator ID: eia-##########################
Elastic Inference Accelerator Type: eia1.medium
Elastic Inference Accelerator Ordinal: 0

[18:10:59] src/operator/subgraph/build_subgraph.cc:686: start to execute partition graph.
Elapsed: messi.jpg - 3.510
Elapsed: ronaldinho.jpg - 0.124
Elapsed: messi.jpg - 0.115
Elapsed: ronaldinho.jpg - 0.126
Elapsed: messi.jpg - 0.115
Elapsed: ronaldinho.jpg - 0.126

oh, I should have noticed short remains ratio, thank you. I'll try to the project. :D
but the official document, I mentioned in post, does not use static_shape=True parameter. if the parameter is essential, the document should be updated 👍


[Feature] output json test result from test and redirect to Diagnostic

The general idea from T.J.'s video
https://www.youtube.com/watch?v=cf72gMBrsI0
https://github.com/tjdevries/config_manager/tree/master/xdg_config/nvim/scratch/automagic
And this:
https://gist.github.com/smjonas/09c18fc383459764de116ea17cc3b9ad
Issues:

the output can be none json if compile/test failed (e.g. fatal error).
integrate with trouble.nvim. I am not a trouble user, but it would be interesting to integrate it with trouble as it is popular in the community.
licence: https://github.com/tjdevries/config_manager/ is not licensed. I may create a issue otherwise I can not copy functions accross

I am not working on this yet because lack of time.

Closing as the null-ls support added


Incomplete tests: multi-namespace support

Context: production readiness proposal and plan
The feature “multi-namespace support” is identified as incomplete test coverage. As a measure to reach Istio production quality in 0.3, this issue is opened to track the progress of providing sufficient test coverage for the feature in question.
This issue is initially assigned to the working group leads.
Recommendations:

Come up with a test plan for how the feature should be tested. Identify and document (in this issue, or a separate document this issue will link to) test cases and whether each will be covered by an integration test (with some level of mocking and/or starting up selected components in test environment), or end to end test (aka system test, which brings up the whole Istio to exercise the feature; currently live in the istio/istio repo).
If you expect the test plan is complex and controversial, consider having it formally reviewed.
State an ETA in the issue, and assign this to a developer who will execute the test plan.
Execute the test plan as the highest priority for 0.3.
For any bug or defect identified by the new test cases, file a new issue and link it from this one.
Close this issue only when the test plan is completely executed, and all additional issues identified in step 3 are fixed.

If you see a risk of not fixing this issue by end of 0.3, please contact<EMAIL_ADDRESS>as soon as possible. We will also periodically ping the issue for update.

~ 2 weeks

Issue moved to istio/istio #1475 via ZenHub


Should resolve #3627.  Issue is resolve and relative paths.  Default …

default wellknown path starts with / which means resolve will make it relative to host.  Needs to be current path to identity uri + wellknown path.
See issue #3627

Closing as this issue was fixed in a different PR.


Detail url filters

Changes to the mushroom detail page:

Commented out 'lookalikes' field as currently no mushrooms have this data
Combined 'Features' tables into one, added new fields from the sampledata file, and applied formatting including adding 'cm' to sizing
Should not show attributes where values are null/0 in the Features section
Removed nav bar and added header

The tests are failing on this branch, haven’t had a detailed look at what’s failing / why, but we will have to force merge this one due to this. Are you confident that if we force merge, the tests in master will succeed @EmilyClare4?


Got a process delayed message while trying to upgrade

Rancher Versions: master 1/17
Steps to Reproduce:

Create a service
Upgrade service a couple of time

Results: Process delayed

Expected: No error?

Was also able to get this while using webhooks

Version - v1.4.0-rc6
Verified fixed


[RFC] Dialog: rename to modal

Originally posted by @levithomason: https://github.com/stardust-ui/react/pull/1852#issuecomment-527228173

I don't think modal={false} makes sense for our Dialog since it is strictly a modal Dialog component only.  Its slots and usages dictate that it only works for the modal Dialog use cases.  It is always intended for "interrupting the users workflow".  It cannot reasonably serve any other "dialog" use cases such as a Popup, Date picker, etc.
A general purpose "dialog" for all use cases would just be a "window" component, basically a portal with no slots and little to no styling.  I think we should have specific components for the dialog use cases, hardcode the correct modal behaviors, and provide props for the optional parts.
Per ARIA:
Dialog (Doesn't describe our Dialog)

A descendant window of the primary window of a web application (Alert, Message, Popup, etc)
Focus may move outside

Dialog (Modal) (Describes our Dialog)

Content outside is inert (cannot interact with it)
Optionally has a backdrop/overlay
Optionally closes on outside click
Usually for interrupting the users workflow
Focus cannot move outside

✓ always, × never, − sometimes

Feature
Dialog
+Modal Behavior

Focuses an element inside
✓
✓

Circular tab nav within
✓
✓

Focus can leave dialog
−
×

Inert content outside
−
✓

Visible backdrop
−
−

Close on outside click
−
−

Close on ESC
−
✓

The modal behavior is a specific implementation of a Dialog where most features are hard coded.  The only features that remain optional are whether the backdrop is visible and whether it closes on outside click.
Rendering a Stardust Dialog without modal capabilities doesn't make sense and is an invalid interaction model for the component.  So, we should consider a props API that follows the +Modal Behavior column above.
Modal vs Dialog
Have a look through all Dialog and Modal links in the Open UI component matrix.  There is consistency in all implementations that use the name "Modal".  They indicate a dialog with this particular anatomy and modal behavior.
The things called "Dialog" include modal dialogs, toast messages, popups, and invalid modal dialog cases.  The term dialog is not consistent nor clear in the wild.
Propose we also rename this component to Modal.  Although it is intended to describe a behavior in the aria specs, in the real world it is used to describe a component with the same anatomy, appearance, and behavior as what we've implemented.
Proposed API
Note that in all cases of this component the content is to remain inert.  This is done by the backdrop intercepting clicks, whether opaque (on) or transparent (off).
<Modal />
Inert outside, show backdrop, close on outside click.  Default behavior acts just as you'd expect a modal dialog to behave.
<Modal backdrop={false} />
Inert outside, transparent backdrop, close on outside click.  Propose the backdrop stay in the DOM so that it can intercept clicks but just made transparent.  This is because even when no backdrop is shown the content outside is still supposed to be inert.
<Modal closeOnOutsideClick={false} />
Inert outside, show backdrop, do not close on outside click.  Here we just ignore clicks on the backdrop, but it is still visible and in the DOM.
<Modal backdrop={false} closeOnOutsideClick={false} />
Inert outside, transparent backdrop, no not close on outside click.
Conclusion
I think calling our component a "Modal" would make it much more clear to the community.  It also makes it more clear why it has the props it has and why it is lacking other features.
This also leaves room for us to implement other specific components for the other "dialog" components, like a date picker, popup, alert, tool window, etc.
We may also consider / prototype a lower level Dialog component which would allow configuration for all these use cases.  Sounds much like the Portal component in SUIR which powers the Modal and Popup there.

This looks good, thanks for extracting.  Closing for housekeeping though conversation and voting should continue.


Suggest sane default for cookie path

Browsers will start a new session for every uri without it ->withPath('/')

@basz don't they start it for all sub-paths anyway if you set it to /?

Yes
With '/' things work as expected, with null my browsers used multiple sessions cookies. Each valid for the distinct paths '/' and '/api/ping' (zend-expressive-skeleton).
http://tools.ietf.org/html/rfc6265#section-5.1.4
A request-path path-matches a given cookie-path if at least one of
   the following conditions holds:

   o  The cookie-path and the request-path are identical.

   o  The cookie-path is a prefix of the request-path, and the last
      character of the cookie-path is %x2F ("/").

   o  The cookie-path is a prefix of the request-path, and the first
      character of the request-path that is not included in the cookie-
      path is a %x2F ("/") character.

with null my browsers used multiple sessions cookies

This is unclear to me: what was the behavior without the path? What was sent, and what was expected instead?

While testing psr7session I included it as pre routing middleware it into zend-expressive-skeleton.
I also wrote some middleware that increments a value, let's call it 'ssn', and stores it onto the session container.
The skeleton application has two actions and on both I pulled the ssn value from the session storage and passed it to the view. One in the footer and one in the Json payload and I was expecting to see that value increment on every request.
This worked in principle - a refresh will increment the displayed ssn value. The psr7session worked. Yeah! However when I went from the homepage action to the ping action the ssn value restarted with 0. Refreshing that page would successfully increment ssn. Going back to the homepage the value didn't reset to zero but continued increasing from its previous value.
In effect I was having two sessions each with it own ssn value.
Took me it took me a while before I realized the path option of the cookie was set to null which would make each path have its own cookie.
Setting the path option to '/' solved the issue. Now every request under '/' has the same cookie and thus session...
Clearer? I can setup a demo somewhere, can't explain it any better with words...

Op 16 jan. 2016 om 17:25 heeft Marco Pivetta<EMAIL_ADDRESS>het volgende geschreven:
with null my browsers used multiple sessions cookies
This is unclear to me: what was the behavior without the path? What was sent, and what was expected instead?
—
Reply to this email directly or view it on GitHub.

Soo, this pr is not a bug fix for psr7session nor the cookie library. It is just a better default.

Op 16 jan. 2016 om 17:25 heeft Marco Pivetta<EMAIL_ADDRESS>het volgende geschreven:
with null my browsers used multiple sessions cookies
This is unclear to me: what was the behavior without the path? What was sent, and what was expected instead?
—
Reply to this email directly or view it on GitHub.

Ok, now that makes more sense :-)
On Jan 16, 2016 11:24 AM, "Bas Kamer"<EMAIL_ADDRESS>wrote:

Soo, this pr is not a bug fix for psr7session nor the cookie library. It
is just a better default.

Op 16 jan. 2016 om 17:25 heeft Marco Pivetta<EMAIL_ADDRESS>het volgende geschreven:
with null my browsers used multiple sessions cookies
This is unclear to me: what was the behavior without the path? What was
sent, and what was expected instead?
—
Reply to this email directly or view it on GitHub.

—
Reply to this email directly or view it on GitHub
https://github.com/Ocramius/PSR7Session/pull/46#issuecomment-172242984.

I think this should also be fixed inside the factories, but we'll need to release 2.0.0 for this fix to be merged, as it is a breaking change.

auch..... indeed. however you could argue that because its behaviour was broken in the first place - although strictly speaking a breaking change - no one could be using it as it is at the moment?

It is a BC break regardless. Bumping major version is not a tabu: if it's
needed, let's just do it.
Marco Pivetta
http://twitter.com/Ocramius
http://ocramius.github.com/
On 16 January 2016 at 14:58, Bas Kamer<EMAIL_ADDRESS>wrote:

auch..... indeed. however you could argue that because its behaviour was
broken in the first place - although strictly speaking a breaking change -
no one could be using it as it is at the moment?
—
Reply to this email directly or view it on GitHub
https://github.com/Ocramius/PSR7Session/pull/46#issuecomment-172257463.


Dependabot deleted a golang dependency instead of upgrading it

Package ecosystem
go modules
Package manager version
1.18
Language version
1.18
Manifest location and content before the Dependabot update
https://github.com/davidsbond/arrebato/blob/master/tools/go.mod
dependabot.yml content
version: 2
updates:
  - package-ecosystem: docker
    directory: /
    schedule:
      interval: daily
  - package-ecosystem: gomod
    directory: /
    schedule:
      interval: daily
  - package-ecosystem: gomod
    directory: /tools
    schedule:
      interval: daily
  - package-ecosystem: github-actions
    directory: /
    schedule:
      interval: daily

Updated dependency
https://github.com/anchore/syft
What you expected to see, versus what you actually saw
The dependency would be upgraded, not completely removed from the go.mod file.
Native package manager behavior
Using go get -u ./... the version is upgraded as expected
Images of the diff or a link to the PR, issue, or logs
https://github.com/davidsbond/arrebato/pull/80

I think you have to import github.com/anchore/syft/syft, not github.com/anchore/syft

Ah yeah, I'll need to change it to import github.com/anchore/syft/cmd/syft. Doing this is a way to pin tool dependencies so that when you use go install you don't have to specify a version.

I think what's happening is that we run go mod tidy at the end of an update run, and that's pruning the dependency since it uses the wrong path (as explained ☝ ).
It looks like you got this figured out (plus the affected repo is now archived) so I'm going to close this. If for some reason I misunderstood, please comment and I can re-open.


Creating .docker from scratch results in a permissions error

docker-machine create --driver virtualbox docker-vm
Error creating machine config dir: mkdir /Users/mary/.docker/machine/certs: permission denied

On further investigation, it looks like the ~/.docker/machine directory gets created as being owned by user root, which prevents Machine from adding additional sub-directories.  We suspect this might be a Toolbox issue.  cc @jeffdm @ehazlett @nathanleclaire

@nathanleclaire confirmed.  After installing the Toolbox without running docker-machine I have this:
$ tree .docker
.docker
└── machine
    └── cache
        └── boot2docker-virtualbox.iso

Confirmed. Ownership appears to be root:root

Ideally the toolbox should let machine handle the directory creation since it could change in the future, etc. IMO

@jeffdm do you want to move this to Toolbox?

Closing as this is a Toolbox issue.

@nathanleclaire can you link to the Toolbox issue? Thanks!


"Please use alternatives." ... Such as?

The reason I use CPod is because it's not tied to an app on my phone like Spotify. I can download my podcasts as basic, unencrypted MP3s and use them in whatever app I want. Which in my case, is an audiobook reader on my phone or WMP on PC. What other alternatives do that?

The gPodder podcast client runs on Windows, Mac, and Linux and also lets you download podcasts as basic audio files, so it might be worth a try.

 Had to make a registry edit just to change the download folder... And then it creates individual folders inside that for every podcast you're subscribed to. Doesn't make it easy to add/find new podcasts and when you do download an episode, the file name for the MP3 is randomly generated. It's worse than Spotify. It's such a damn shame, CPod is so simple yet so efficient compared to everything else I've tried that needlessly overcomplicates the process of finding stuff to listen to.

CPod is dead.
gPodder sync fails, and it's just ancient.
Kasts is great though ;) far superior to Cpod.
However, simply adding Podcasts to a feed  reader also works perfectly.

Kasts only seems to support KDE on Linux, no support for MacOS and incomplete support on Windows. CPod, for all it's faults (which are nearly entirely because no-one can devote the time to support it) is cross-platform.

No, CPod doesn't support anything - it's dead.
Also, Feeds support all platforms and there's no need to download except on the actual device you are using.

No, CPod doesn't support anything - it's dead.
Also, Feeds support all platforms and there's no need to download except on the actual device you are using.

I've never used a RSS feed reader so I'll have to look into that. I prefer to have an app on my PC that can download podcasts over one on my phone. Ever since CPod started messing up on certain feeds (refusing the download episodes) I've had to start going to the podcast's Youtube channel and manually downloading the audio track myself. It's cumbersome that way but at least the files don't come with unsolicited ads spliced into them from the feeds.

I've never used a RSS feed reader so I'll have to look into that. I prefer to have an app on my PC that can download podcasts over one on my phone. Ever since CPod started messing up on certain feeds (refusing the download episodes) I've had to start going to the podcast's Youtube channel and manually downloading the audio track myself. It's cumbersome that way but at least the files don't come with unsolicited ads spliced into them from the feeds.

Open Inoreader in Firefox, get the add-on.
Open your Youtube channel, select 'videos' and then hit the Inoreader addon, add it to your 'Youtube' or whatever folder:

https://www.linuxlinks.com/kasts-convergent-podcast-software/

Musicpod has been a great alternative. Although it won't remember your previous settings after restart like Cpod did. Like your previous playback speed for example.


Adding Docstring to testing regression

Starting to add a docstring to Roberts testing

Great thanks - I will pause my changes for now

Going to close my original branch and make a new one


./source/ as alias for ./src/

Describe the problem you are trying to solve

The project-directory contains or may contain certain directories like ./benches/, ./examples/, ./target/, ./tests/ (see here) … and ./src/, which is the only directory that is abbreviated. On the other hand, ./src/ is the directory in some other languages and for a long time now the source-directory in cargo. Therefore, replacing is a bad idea.
Describe the solution you'd like

I suggest to load source-files from ./source/ if, and only if, ./src/ is not present.
Notes

I suggest to make this the default in a far future.

Thanks for the feedback.  However, I think this is something that we would be unlikely to change.
If you want to use a different directory, you can specify them in the bin and lib targets via the path key.


Remove Saved Cards

The extension allows to allow user to store cards details but I didn't find any way to disable/delete a saved card.
Refer: https://docs.adyen.com/api-explorer/#/Recurring/latest/disable

Hi @milindsingh, storing credit card is part of the Adyen make payment request which is an intention to pay and thus is easily supported by the integration since this request is required anyway. Disabling stored credit card is not an intention to pay and thus it does not really require a commercetools payment resource which in turn is required for the integration to work. Adyen has many optional back-office operations which are not required for the actual payment and in such cases a direct communication with Adyen API might be more beneficial instead of using the integration just as a proxy.

Thanks @butenkor
I was just curious to know if it was possible to do this in Extension, as integration the Adyen APIs at 2 places (Merchant Server and Adyen Extension) is something I was trying to avoid.

I was just curious to know if it was possible to do this in Extension

In general almost anything is possible but the question is if it is reasonable and at which costs. The idea of the integration is to shorten the integration time of the users, simplify the checkout process and providing a value by applying best practices in regards to handling the payment, its state, Adyen payment notification mappings and similar. Adding support for all the possible Adyen non payment related operations would undermine the given ideas as it would mean adding more complexity and using the integration just as a proxy without added benefits.

integration the Adyen APIs at 2 places (Merchant Server and Adyen Extension) is something I was trying to avoid

Fair point but on the other hand this operation has nothing to do with commercetools and handling this directly with Adyen seems straight forward/simple.

Hi @milindsingh . Sorry for the late reply but the feature is implemented and released some time ago: https://github.com/commercetools/commercetools-adyen-integration/releases/tag/v9.11.0


Refactoring and adding some negative test cases

Adding negative tests where the tested agent returns an error message when it can.
The PR might look like huge but a lot of it is fixing the imports. I have changed the package name so that its a valid package name and made some directories packages that can be used in imports.

@TelegramSam I don't follow. Can you please point to the code in the PR that does the change?

@lovesh, wouldn't this line be an example of what Sam is talking about? https://github.com/hyperledger/indy-agent/blob/d7bd8a4459571ff5a769f4c68e5e807b99104783/python/agent.py#L13
We are now having to import from "python.something" instead of just importing "something" -- so the overall python package has now been moved up a level.

The most important thing about this PR is the introduction of some new tests; the cleanup is a separate issue.

@dhh1128 I made python folder a package so that i can run it from outside. In my experience having a package avoid import issues. The other option would be to move scripts like agent.py and indy-agent.py in a scripts folder.

Untangling the ref agent from the testing code looks good, and resolves my issue.

I made python folder a package so that i can run it from outside. In my experience having a package avoid import issues.
I have no problem with making the python folder a package. I do have an issue with changing all the imports to use that package name, as it forces everybody to run the agent with a base path of indy-agent, instead of indy-agent/python.

We have multiple parties using the code with the current package organization. Making this change at the same time as the others in the commit makes it difficult to accept. If you feel the changes must be made at the same time, please further explain your reasoning. If they do not need to be made at the same time, please move them to another PR so we can have that conversation without slowing down the acceptance of the new test cases.

@TelegramSam Changed the imports

Running tests failed. Still digging through this, but if you have any insight that can help me, I can get this merged faster:
============================= test session starts ==============================
platform linux -- Python 3.6.7, pytest-3.6.4, py-1.7.0, pluggy-0.7.1 -- /opt/sovrin/bin/python3
cachedir: .pytest_cache
rootdir: /media/indy-agent/test_suite, inifile: pytest.ini
plugins: asyncio-0.9.0
collected 0 items / 3 errors

==================================== ERRORS ====================================
______________________ ERROR collecting connection.manual ______________________
ImportError while importing test module '/media/indy-agent/test_suite/tests/connection/manual.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/__init__.py:12: in <module>
    from message import Message
E   ModuleNotFoundError: No module named 'message'
_____________________ ERROR collecting basicmessage.manual _____________________
ImportError while importing test module '/media/indy-agent/test_suite/tests/basicmessage/manual.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/__init__.py:12: in <module>
    from message import Message
E   ModuleNotFoundError: No module named 'message'
______________________ ERROR collecting trustping.manual _______________________
ImportError while importing test module '/media/indy-agent/test_suite/tests/trustping/manual.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/__init__.py:12: in <module>
    from message import Message
E   ModuleNotFoundError: No module named 'message'
!!!!!!!!!!!!!!!!!!! Interrupted: 3 errors during collection !!!!!!!!!!!!!!!!!!!!
=========================== 3 error in 0.14 seconds ============================```

Since the python package is not in python path, pytest is unable to find it. I was running the tests on Pycharm and i had the python directory marked as source.

Adding the python package to Python path and then running pytest works. This is what i do.
## In test_suite directory
export PYTHONPATH=/home/lovesh/dev/evernym/indy-agent/python:$PYTHONPATH
pytest

why is that necessary given your code changes? It works without the path change prior to your commits. Why is a python path change for a test suite a good idea?

To further clarify: At present, we want absolutely no dependencies between the test suite and the python ref agent. Being redundant in this case is the desired path.

we want absolutely no dependencies between the test suite and the python ref agent

Can you please explain why?
The test suite is supposed to check ideal functionality and the ref agent is supposed to implement that ideal functionality. eg. The validation rules used in ref agent should be the ones checked in test-suite.

@lovesh The test suite isn't a test of the ref agent. It's a test of any agent. The ref agent isn't guaranteed to be the one that has the most compatibility to the test suite, and it's perfectly reasonable for it not to pass some of the tests.
We are not certain that the ref agent is going to continue to exist in its current form. It may be superseded by the python agent in the indy-cat codebase from BC Gov. Thus, the test suite should not be assuming anything about the ref agent.

@dhh1128 I understood that the test suite is for any agent but was assuming the ref agent will always pass the test suite as it was the reference. Will remove the assumption from the codebase

@dbluhm

To run this as I normally would from the command line, I had to alter the PYTHONPATH as you mentioned in a previous comment.

From which directory are you running tests from? I run tests from indy-agent/test_suite and don't have to modify PYTHONPATH

From which directory are you running tests from? I run tests from indy-agent/test_suite and don't have to modify PYTHONPATH

Not sure if I was in a bad state before or something but retrying from the test_suite directory, I did not have to modify PYTHONPATH. To get the reference agent to run, however, I still did have to modify the PYTHONPATH when running from within the python directory.
From within the python directory:
$ PYTHONPATH=../:$PYTHONPATH python indy-agent.py --wallet alice test --ephemeralwallet 3001

@dbluhm Yes. You are correct. I was running the agent with my IDE which adds source directories to python path. But when in run it from terminal i do have to add indy-agent to PYTHONPATH since python_agent_utils is outside python. We can either make python_agent_utils installable as pip or add 2 lines at top of indy-agent.py
import sys
sys.path.append('..')

I find the second option better for now.

@dbluhm Thanks for accepting it.


Added Console.ReadLine() to display print to user.

May seem silly, but when running the Future example project I didn't see if something happened when debugging the project when the console just flashed by :)

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


Deprecation warning about ember-getowner-polyfill after upgrading to Ember v2.12.1

Got the following deprecation notice after upgrading Ember to v2.12.1 (from v2.9.x).

DEPRECATION: ember-getowner-polyfill is now a true polyfill. Use Ember.getOwner directly instead of importing from ember-getowner-polyfill

https://github.com/rwjblue/ember-getowner-polyfill/issues/5
Looks like possibly the version of ember-getowner-polyfill just needs to be bumped to the latest version?

The solution is to remove this line https://github.com/runspired/smoke-and-mirrors/blob/a0747f790d19bea0572c7a875eb4cdcab56f07de/addon/components/vertical-item/component.js#L3 and add:
const { getOwner } = Ember;

Then bump the polyfill to the latest 1.x version.


(Dev Build) DL masks are not resized for baby humanoid mobs

For now, I'll just disable baby mobs from wearing it.


Quering Relationships

Thanks guys for sharing this package, very intuitive api in most cases with exception for relationships...
More of the question than issue I hope:
So I have relationship one to many:
Tests Table:
CREATE TABLE tests (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Tags Table:
CREATE TABLE tags (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    test_id INT UNSIGNED,
    title TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (test_id)
        REFERENCES tests(id)
        ON DELETE CASCADE
);

Here are the structs:
type Test struct {
	ID        int
	Title     string
	Tags      []Tag `references:"ID" foreign_key:"TestID"`
	CreatedAt string
	UpdatedAt string
}

type Tag struct {
	ID        int
	TestID    int
	Title     string
	CreatedAt string
	UpdatedAt string
}

My question is how do I query all the tests with all assosiated tags. I tried all posibilities and I can not figure it out how to query relationships.  Always geting null for the tags... Any help would be appriciated.
{
"status": "OK",
"data": [
{
"ID": 1,
"Title": "test 1",
"Tags": null,
"CreatedAt": "2019-08-19 23:18:24",
"UpdatedAt": "2019-08-19 23:18:24"
},
{
"ID": 1,
"Title": "test 1",
"Tags": null,
"CreatedAt": "2019-08-19 23:18:24",
"UpdatedAt": "2019-08-19 23:18:24"
},
{
"ID": 1,
"Title": "test 1",
"Tags": null,
"CreatedAt": "2019-08-19 23:18:24",
"UpdatedAt": "2019-08-19 23:18:24"
},
etc.

Hi, Thank you for using grimoire 😄
You can use Preload function to load associations. You may check this documentation for preload.
I also wrote an example of how to use it:
package main

import (
	"encoding/json"
	"fmt"

	"github.com/Fs02/grimoire"
	"github.com/Fs02/grimoire/adapter/mysql"
)

type Test struct {
	ID        int
	Title     string
	Tags      []Tag `references:"ID" foreign_key:"TestID"`
	CreatedAt string
	UpdatedAt string
}

type Tag struct {
	ID        int
	TestID    int
	Title     string
	CreatedAt string
	UpdatedAt string
}

func main() {
	adapter, err := mysql.Open("root@(<IP_ADDRESS>:3306)/grimoire_issues?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer adapter.Close()

	// initialize grimoire's repo.
	repo := grimoire.New(adapter)

	var tests []Test
	repo.From("tests").MustAll(&tests)
	repo.From("tags").MustPreload(&tests, "Tags")

	byt, _ := json.MarshalIndent(tests, "", "\t")
	fmt.Println(string(byt))
	// Print:
	// [
	// 	{
	// 		"ID": 1,
	// 		"Title": "real test",
	// 		"Tags": [
	// 			{
	// 				"ID": 1,
	// 				"TestID": 1,
	// 				"Title": "tag real",
	// 				"CreatedAt": "2019-08-20T00:00:00+07:00",
	// 				"UpdatedAt": "2019-08-20T00:00:00+07:00"
	// 			},
	// 			{
	// 				"ID": 2,
	// 				"TestID": 1,
	// 				"Title": "another real tag",
	// 				"CreatedAt": "2019-08-20T00:00:00+07:00",
	// 				"UpdatedAt": "2019-08-20T00:00:00+07:00"
	// 			}
	// 		],
	// 		"CreatedAt": "2019-08-20T00:00:00+07:00",
	// 		"UpdatedAt": "2019-08-20T00:00:00+07:00"
	// 	},
	// 	{
	// 		"ID": 2,
	// 		"Title": "another test",
	// 		"Tags": [
	// 			{
	// 				"ID": 3,
	// 				"TestID": 2,
	// 				"Title": "tagger",
	// 				"CreatedAt": "2019-08-20T00:00:00+07:00",
	// 				"UpdatedAt": "2019-08-20T00:00:00+07:00"
	// 			}
	// 		],
	// 		"CreatedAt": "2019-08-20T00:00:00+07:00",
	// 		"UpdatedAt": "2019-08-20T00:00:00+07:00"
	// 	}
	// ]
}

Hope it's answer your question.

Ha! I knew it it was something I was doing wrong. Awesome stuff. Thank you for the help :)
Last few days I looked in to all mayor orms for go including gorm, but I din't like any of them until I saw grimoire. Now this is my favourite one :)
I can see 2 queries are executed seperatly, but to be honest I don't mind as I am implementing a caching layer with redis for the models.
Grimoire can reduce the amount of code I can write in comparison to standard mysql library and save me from mapping every query manaulay. This will keep me happy and models very compact.
Thanks guys, keep up the good work.
I understand the limitations and chalanges while mapping results to the structs, just wondering: Would be possible to fire a single query:
select * from test left join tag on test.test_id = tag.tag_test_id;

And map the results to the structures?
With stnadard library I end up with:
	c := database.Mysql()
	rows, err := c.Query("select * from test left join tag on test.test_id = tag.tag_test_id;")
	defer rows.Close()

	if err != nil {
		util.Error(err)
	}
	r := []Test{}
	for rows.Next() {
		test := Test{}
		tag := Tag{}

		err := rows.Scan(
			&test.TestID,
			&test.Title,
			&test.CreatedAt,
			&test.UpdatedAt,
			&tag.TagID,
			&tag.TagTestID,
			&tag.Title,
			&tag.CreatedAt,
			&tag.UpdatedAt,
		)
		if err != nil {
			util.Error(err)
		}

		t := false
		for i := range r {
			if r[i].TestID == test.TestID {
				if tag.TagID != nil {
					r[i].Tag = append(r[i].Tag, tag)
				}
				t = true
			}
		}

		if t {
			continue
		}

		if tag.TagID != nil {
			test.Tag = append(test.Tag, tag)
		}
		r = append(r, test)
	}

Just curious. Wouldn't mind to hear your opinion as I can imagine you guys already went through this stage and made adequate decisions.
:+1:


Fix css that didn't apply  & slightly better margin

Coverage remained the same at 39.68% when pulling 403e54eaa4d63e9e2ea06ed8bf0930c516303674 on Kiloutre-patch-1 into 46c30a88bf1577ca80ac2f1b56ebf87c30088d03 on dev.

Coverage remained the same at 39.68% when pulling 403e54eaa4d63e9e2ea06ed8bf0930c516303674 on Kiloutre-patch-1 into 46c30a88bf1577ca80ac2f1b56ebf87c30088d03 on dev.

Coverage remained the same at 39.68% when pulling 403e54eaa4d63e9e2ea06ed8bf0930c516303674 on Kiloutre-patch-1 into 46c30a88bf1577ca80ac2f1b56ebf87c30088d03 on dev.

Changes Unknown when pulling 6eb04b0f3cb0a23e32817960394dbd14a7baf695 on Kiloutre-patch-1 into ** on dev**.

Coverage remained the same at 39.68% when pulling 1116990da1e666793201bed93f08ea89b7455d2f on Kiloutre-patch-1 into 1ff78cbc43713ab015db45b55cd99d831f3211e8 on dev.


Make it clear that User Profile also contains settings

This may just be me, but it's easy to miss that the User Profile page also contains application preferences.
Perhaps these need to be broken out so that we have separate Profile and Settings pages?

Totally agree.


sage: use python3

python2Packages.twisted is broken, and there's likely no remedy. Disabling it here #71741
Not to mention that python2 will be EOL in ~9 weeks.

Sage is still being ported to Python 3. While parts of it work, not everything functions. If at this point Twisted is what is breaking Sage, then I think we can try and enable it again for Python 2.
cc @timokau

Regarding python 2 twisted, see https://github.com/NixOS/nixpkgs/pull/71101#issuecomment-545095976.

Right, the upstream effort has been going on for some time (since sage is big and has many python dependencies). At this point sage is mostly usable with py3, but there are a handful of remaining issues and the officially supported version is still py2. There is good progress, the switch to py3  is likely to happen in one of the next two releases. I don't think we should switch before that.
If you're interested, here's the upstream metaticket: https://trac.sagemath.org/ticket/15530

my issue was more with twisted not being able to be built, so it would always cause a rebuild :(, but it's fixed now, so :)

Sage 9.0 is on python3 by default! https://wiki.sagemath.org/Python3-Switch
Sadly, this update has not been included in nixpkgs yet. I will give this update a shot, but it seems to be a pretty big one, so I'm not sure I'll succeed.

Yes, it's a big one. This is already work-in-progress in https://github.com/NixOS/nixpkgs/pull/70474. Help is welcome of course, especially if you want to look into the sphinx issue. I'm thinking about just disabling the docbuild for now, but even if I do that there still might be other problems (see the mailing list thread linked in #70474) and it would be nice to keep the docs.


Update Post “when-are-termites-most-active-on-the-gold-coast”

Automatically generated by Netlify CMS

👷 Deploy Preview for chic-shortbread-66a66b processing.

Name
Link

🔨 Latest commit
17f7e2e1bded22a7a108d32d9eefe3de701dfbd6

🔍 Latest deploy log
https://app.netlify.com/sites/chic-shortbread-66a66b/deploys/653072b21c280a000819f625


Hackage Release

Can this be released to hackage? I want to switch to this for benchmarking suites in most of my libraries (since I never need criterion's plots), but not having a hackage release is a showstopper.

gauge has been on Hackage for a while.

Looks like I've been misspelling gauge my whole life. Sorry for the noise. Also, as a PSA to future chronic misspellers: the a comes before the u.


Nanoflann 1.5.5

Nanoflann 1.5.5

Hello @d-vo, modules you maintain (nanoflann) have been updated in this PR. Please review the changes.

Looks okay, but please fix the integrity hashes.

Need skip-url-stability-check label.


[#519] Speed up ConcurrentHashMap#computeIfAbsent

What changes were proposed in this pull request?
Speed up ConcurrentHashMap#computeIfAbsent by checking key existence.
Why are the changes needed?
Fix: #519
Does this PR introduce any user-facing change?
No.
How was this patch tested?
Existing UT.

Codecov Report

Merging #766 (4ec3a20) into master (567872b) will increase coverage by 2.39%.
The diff coverage is 90.32%.

:exclamation: Current head 4ec3a20 differs from pull request most recent head eff4784. Consider uploading reports for the commit eff4784 to get more accurate results

@@             Coverage Diff              @@
##             master     #766      +/-   ##
============================================
+ Coverage     60.67%   63.07%   +2.39%
- Complexity     1901     1953      +52
============================================
  Files           239      230       -9
  Lines         13031    11346    -1685
  Branches       1091     1119      +28
============================================
- Hits           7907     7156     -751
+ Misses         4686     3792     -894
+ Partials        438      398      -40

Impacted Files
Coverage Δ

...java/org/apache/uniffle/common/util/JavaUtils.java
35.71% <16.66%> (-14.29%)
:arrow_down:

...apache/uniffle/storage/common/AbstractStorage.java
51.35% <83.33%> (ø)

...g/apache/hadoop/mapred/SortWriteBufferManager.java
79.89% <100.00%> (ø)

...he/uniffle/client/impl/ShuffleWriteClientImpl.java
33.66% <100.00%> (ø)

...org/apache/uniffle/common/metrics/GRPCMetrics.java
47.88% <100.00%> (ø)

...apache/uniffle/coordinator/ApplicationManager.java
83.88% <100.00%> (ø)

.../apache/uniffle/coordinator/ClientConfManager.java
92.95% <100.00%> (ø)

...a/org/apache/uniffle/coordinator/QuotaManager.java
84.41% <100.00%> (ø)

...ache/uniffle/coordinator/SimpleClusterManager.java
75.31% <100.00%> (ø)

...uniffle/coordinator/metric/CoordinatorMetrics.java
94.28% <100.00%> (ø)

... and 10 more

... and 27 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

cc @zuston

Great work! Thank you very much for your contribution.


There is an error in requirements.txt

In line 46 of requirements.txt, setuptools=49.2.01 should be setuptools==49.2.01

thank for letting us know! this has been fixed.


Support multiple thumbs

Now we can pass an array to value to achieve multiple thumbs.
thumbImage accepts an array also - to override individual thumbs.
There's a new thumbView property, that works like thumbImage but supplies the whole thumb View.
An idea I took from @doctadre's PR, is better naming for the following props:
minimumTrackTintColor is deprecated, use trackHighlightColor
maximumTrackTintColor  is deprecated, use trackColor

@danielgindi This feature would be great, where are we with it ?

It's just waiting for a merge!

@idealllee @RoshOne4 Can it be merged ?

@jeanregisser can we get this merged? Awesome feature.