Post-workshop tasks for session 1

https://cct-datascience.github.io/group-procedures/workshops.html#after-the-workshop

[x] Upload video and subtitles to YouTube
[x] Trim video
[x] Update website (except youtube link)
[x] Update other website (except youtube link)
[x] Download zoom reports and copy and paste stuff
[ ] Add people to Emma (🛑 blocked: 2FA not working)
[x] edit post-workshop survey
[x] send follow-up email to registrants

I don't seem to have access to upload to our youtube channel anymore, @Chris-Schnaufer.

Filed a support ticket with Emma

Emma contract was cancelled, so not goign to be able to add to mailing list until that gets sorted out


Quick-links in documentation

This patch introduces quick-links to section headers to make it easier
to link to a specific part of our documentation.
This fixes #1144
Your pull request should…

[x] have a concise title
[x] close an accompanying issue if one exists
[x] be against the correct branch (features can only go into develop)
[ ] include migration scripts and documentation, if appropriate
[x] pass automated testing
[x] have a clean commit history
[x] have proper commit messages (title and body) for all commits
[x] have appropriate tags applied

That's correct. I never claimed that I would use the chain ;-p

That's correct. I never claimed that I would use the chain ;-p
Nevertheless, I could switch to a different icon though.

Ahh, ok I understand  😜, Code wise it seems ok and the documentation renders without issue, about the icon, this is a totally personal opinion, I prefer the little chain icon instead of the paragraph icon!

@mliradelc, now it's 🔗


Schema migration to ensure sentinel rows exist

Ensures that we have a sequence number written down for each document in the remote document cache. We already have the code to sequence numbers for new documents (via target updates, mutations, and limbo resolutions). However, we have never gone back to make sure existing documents have sequence numbers.
This migration will stamp the highest sequence number observed onto each remote document which does not yet have a sentinel row.

Note that I've moved sentinel row encoding and decoding on LevelDbDocumentTargetKey, but I'm not sure that's the best place for it. Let me know if you have suggestions.


"extension"/image type must be set in engine context by the loader module

Hello,
I have some probleme with http_loader with url of images without extension or extension like ".php?foo=bar"
The engine is unable to determine witch type of image format it is addressing. In this case the HTTP header should be helpfull Content-Type: image/png, Content-Type: image/jpeg, Content-Type: image/gif
Only file_loader should base it on the file extension (or maybe first bytes of the file like the unix "file" command)
The loader is unable to set the extension (or some sort of imageType var) in context of image engine and I think it should do.
loader module should return image raw data and image type.
I  am not feeling easy with python and the code to do so much refactoring. That's why I am not doing a pull request for now.
Hope I am clear enougth :)
Cheers,
Damien

Closed in pull request #63.


token returned from get_readonly_token() does not authenticate

My server side generation of read only tokens looks like the following:
from stream_django.client import stream_client
def jwt_response_payload_handler(token, user=None, request=None):
    user_feed_1 = stream_client.feed('user', str(user.id))
    readonly_token = user_feed_1.get_readonly_token()

    return {
        'token': token,
        'stream': str(readonly_token)
    }

JWT_AUTH = {
    'JWT_RESPONSE_PAYLOAD_HANDLER': jwt_response_payload_handler
}

My client side code looks like the following:
function setupStream (token, id) {
  var client = stream.connect('te5vptfdhrss', null, '10287')
  var user1 = client.feed('user', id, token)
  debugger
  function callback (data) {
    console.log(data)
  }

  function failCallback (data) {
    alert('something went wrong, check the console logs')
    console.log(data)
  }
  user1.get({ limit: 5, offset: 0 })
  .then(callback)
  .catch(failCallback)
  // user1.subscribe(callback).then(() => {}, failCallback)
}

I get an error message of the following:
{
    "code": null,
    "detail": "url signature missing or invalid",
    "duration": "10ms",
    "exception": "AuthenticationFailed",
    "status_code": 403
}

HOWEVER:
if i change the token to be read/write, the client side code doesn't produce an error.
    readonly_token = user_feed_1.token

can you attach information about the request from JS? (url, get params, headers) as well as the value of user.id server-side?

Request
Request URL:https://api.getstream.io/api/v1.0/feed/user/1/?limit=5&offset=0&api_key=te5vptfdhrss&location=unspecified
Request Method:GET
Status Code:403 Forbidden
Remote Address:<IP_ADDRESS>:443

Reponse
HTTP/1.1 403 Forbidden
Content-Type: application/json
Content-Length: 126
Connection: keep-alive
Access-Control-Allow-Origin: *
Allow: GET, POST, DELETE, HEAD, OPTIONS
Content-Encoding: gzip
Date: Fri, 06 May 2016 18:03:02 GMT
Server: nginx/1.4.6 (Ubuntu)
Vary: Accept
X-Cache: Error from cloudfront
Via: 1.1 650859fa2cd80d54569500386ec0cbcc.cloudfront.net (CloudFront)
X-Amz-Cf-Id: QGLpLNfj7Lm8zKyPal7EaWJ7UxPb7pY9j48xYid8AHY8tBOXcOZWvg==
Request

Request Headers
GET /api/v1.0/feed/user/1/?limit=5&offset=0&api_key=te5vptfdhrss&location=unspecified HTTP/1.1
Host: api.getstream.io
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Authorization: user1 b'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3Rpb24iOiJyZWFkIiwicmVzb3VyY2UiOiIqIiwiZmVlZF9pZCI6InVzZXIxIn0.IfVux-ZWZAkWTCzgH0sBibRWhFpB9HEriVYtf-lSRAQ'
stream-auth-type: simple
Origin: http://localhost:8080
X-Stream-Client: stream-javascript-client-browser-unknown
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36
accept: application/json
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8

Query String params
limit:5
offset:0
api_key:te5vptfdhrss
location:unspecified

The user.id server side is 1

you are converting the readonly_token (bytes) into string incorrectly, the result is that you end up with its representation (which is almost the same except for the b'' wrap).
this change should get fix your problem:
str(readonly_token)

with:
readonly_token.decode("utf-8")

Thank you. That fixed my issues. Should this be added to the documentation that it needs to be decoded in this way? Its confusing, because .token doesn't need to be decoded in this way, and .token is automatically serialized to json without decoding in this manner.

next release does that, thank you for reporting this!


GraphRAG

https://microsoft.github.io/graphrag/
GraphRAG is an innovative data processing and analysis technology developed by Microsoft, mainly based on the Retrieval Augmented Generation (RAG) approach. This technology extracts meaningful structured data from unstructured text, and provides better question answering performance through it.
I hope GraphRAG is in the plan for further implementation since it is said to perform well.

maybe this solution will solve your problem click


samclassix-redeem-wfps

https://github.com/Frankencoin-ZCHF/frankencoin-dapp/issues/63

Thanks, very nice!
Would it be possible to adjust the colors of the following three items:

I think we should remove the | separator completely or make it the same color as the background. It is not needed.
The bright blue of the selected item should be replaced with the light blue that we already use in our palette
The chevron should stay visible after selecting an item, now it almost disappears as it is only slightly brighter than the background

Not sure if this is configurable in this selector. :)

PS: den leuchtblauen selection-Rahmen kann man ev. auch ganz verstecken. Hat ohnehin eine andere Form als die Text Box und passt von daher nicht gut.


Can we check the device to be smartphone or other device by using bluetooth in flutter?

The issue is when my flutter app is in bluetooth scanning mode it is detecting all the bluetooth devices so i need only smartphone bluetooth  devices to detect using my app and other devices like smarTv,smartwatch and bands and headphones i need to reject them in my flutter app
Is there any solution ???

Hi @BalanaguYashwanth
This issue doesn't seem to describe a bug or a feature request. Please see https://flutter.dev/community for resources and asking questions like this,
you may also get some help if you post it on Stack Overflow.
Closing, as this isn't an issue with Flutter itself. If you disagree, please write in the comments and I will reopen it.
Thank you


Add ability to hide the sidebar

Would be nice to be able to hide the sidebar that holds the config settings, hiscore lookup, xp tracker etc.

Relevant: #449 #783


feat: upgrade project

:tada: This PR is included in version 1.4.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


fixed crash when creating new object with wrong number of arguments (rebased)

If .new() call fails engine crashes while accessing null pointer.
Repro is here:
https://github.com/koalefant/godot-bug-new-arguments
Fixes #2280
(Previous pull request: https://github.com/godotengine/godot/pull/2935)

Merging as it already works better than the previous situation. As I understand it @koalefant will likely try to make it work in the debugger too as discussed in #2935.


Feature request - way to set headers in the http client

This is a feature request.
Great work on this project and universal-webpack. I've been trying to migrate a project to use it today.
One thing I've run into that is stopping me is not having a way to hook into the http client when making api requests in order to add a header, while also having access to cookies server side.
In our project currently we add an Auth header with a JWT (JSON web token) when making most requests to the api, and this is based on a value stored in a cookie. I can't figure out a way to do that using the react-isomorphic-render page-server currently.
I tried using my own middleware to do the api requests instead of the asynchronous middleware provided by default, but then I am not able to access cookies server side (which you are doing in the asynchronous middleware by passing the clone_request to the http_client).
So I think the best way to address this is to expand on the http_client api to allow header setting. Maybe just allow any key/value passed into the options hash to set headers on the superagent request?
Let me know what you think!

Oh, sure, I'll add the headers.

Yeah, used to spend quite some time figuring out how to make those cookies work, that was an uneasy task to grasp.
Anyway, I happen to have implemented custom headers already, in a separate library.
So I just copy & pasted the relevant code.
https://github.com/halt-hammerzeit/web-service/blob/master/source/http.js#L47-L53
Try<EMAIL_ADDRESS>Pass the third parameter options to http calls with headers object.
I didn't check it, so you tell me if it works.

Ok, so I thought that what you meant was not adding headers every time you make an HTTP request but rather set it up a single time and then apply it automatically.
So I took a different approach and introduced http_request parameter:
Miscellaneous react-isomorphic-render.js settings
{
  // (optional)
  // Extra HTTP request settings for `http` utility in Redux action creators
  // (`request` is a `superagent` request)
  http_request: request => request.set({ Authentication: `Bearer ${token}` })
}

This function will be called every time a request is made so you can adjust it based on some if else conditions.
If that's what you intended.
Or it could be a simple headers constructor parameter for http_client too.
Not as flexible though.
Try<EMAIL_ADDRESS>and the new http_request setting.

Yes that will work better, you're right the header options would only have
limited value if they could not be changed per request. I will check this
out tomorrow and let you know that everything works.
On Mon, Jul 18, 2016 at 9:28 PM, Nikolay<EMAIL_ADDRESS>wrote:

Ok, so I thought that what you meant was not adding headers every time you
make an HTTP request but rather set it up a single time and then apply it
automatically.
So I took a different approach and introduced http_request parameter:
Miscellaneous react-isomorphic-render.js settings
{
// (optional)
// Extra HTTP request settings for http utility in Redux action creators
// (request is a superagent request)
http_request: request => request.set({ Authentication: Bearer ${token} })
}
This function will be called every time a request is made so you can
adjust it based on some if else conditions.
If that's what you intended.
Or it could be a simple headers constructor parameter for http_client too.
Not as flexible though.
Try<EMAIL_ADDRESS>and the new http_request setting.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/halt-hammerzeit/react-isomorphic-render/issues/3#issuecomment-233513973,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABHVMSoGjx5I72CbXJLw5ahjJTMSSvRSks5qXDZVgaJpZM4JPMGO
.

In<EMAIL_ADDRESS>I have also added a second argument to http_request function holding a store because that data may be required.

	http_request(request, { store })
	{
		console.log(request.headers)
		console.log(store.getState())
	}

All of this is working well. The only problem left is accessing the cookie server side to check for a token and put it in the store. Can you think of a good way to do that?
Currently we are using react-cookie, and putting cookie.plugToRequest(req, res) in the server, then we could access the cookie anywhere on the server side or client side. Maybe you could add a hook somewhere to allow hooking things up to the req, res of the server?

Can you provide a pseudocode example?
I don't understand what you're describing here.

Yes, maybe it will help if I describe the situation fully and you can tell me if there is a better way.
This is how my app handles authentication:
In App.js preload (top level route container) it dispatches an action called loadAuthCookie. This action checks if there is a cookie present with a saved token, and adds that token to the redux store. Any api requests that occur afterwards use add the token from the redux store to the Authorization header (now working thanks to the http_request hook you added).
The cookie token check needs to work on both client and server to allow rendering on the server to make authenticated api requests. This is accomplished using the react-cookie library, which makes a globally accessible cookie object, and can be plugged into the server request to grab the cookie on the server.
Here is code for my reducer:
import cookie from 'react-cookie';
import jwtDecode from 'jwt-decode';
// This function is called within reducer, logic could/should be moved to an action creator instead
function reduceLoadAuthCookie(state) {
const token = cookie.load('token');
const isAuthenticated = !!token;
const hasAccount = token && jwtDecode(token).has_account;
return {
...state,
isAuthenticated,
hasAccount,
token,
};
}
And this code is currently in my express web server (being replaced by the page-server from react-isomorphic-render):
import cookie from 'react-cookie';
app.use((req, res) => {
cookie.plugToRequest(req, res);
...
react-redux-router.match...
})
I am doing all of this because the api I'm working with doesn't accept cookies, it requires JWT authentication. Otherwise things would be ok since you are already copying the cookies from the original request into the api requests.
Let me know if that doesn't make sense I can clarify.

I am doing all of this because the api I'm working with doesn't accept cookies, it requires JWT authentication

Fair enough.
The header is the standard, not the cookie.
I use the cookie too, but just for the browser and the server-side isomorphic counterpart.
Maybe what you're asking is how to read authentication cookie on the server side and then put it to the store?
You're doing it in the browser already, so you could do the same thing on the server-side.
There's a preload option for the webpage server:
  // (optional)
  // Preloads data before performing page rendering.
  // If this function returns an object then this object
  // will be merged into Redux store.
  preload: async (http_client) => {}
  // (or same without `async`: (http_client) => Promise.resolve({})

You could get the cookie value there and then return something like { user: { token: true } } (this data goes into Redux store).
Inspecting HTTP request cookies requires getting access to the HTTP request.
I can make a second parameter in that function: an object with request property which will be the original Node.js request.
Will that do?

Yes you understand me and that would work perfectly, adding the 'request'
argument to 'preload'.
On Tue, Jul 19, 2016 at 11:36 AM, Nikolay<EMAIL_ADDRESS>wrote:

I am doing all of this because the api I'm working with doesn't accept
cookies, it requires JWT authentication
Fair enough.
The header is the standard, not the cookie.
I use the cookie too, but just for the browser and the server-side
isomorphic counterpart.
Maybe what you're asking is how to read authentication cookie on the
server side and then put it to the store?
You're doing it in the browser already, so you could do the same thing on
the server-side.
There's a preload option for the webpage server:
// (optional)
// Preloads data before performing page rendering.
// If this function returns an object then this object
// will be merged into Redux store.
preload: async (http_client) => {}
// (or same without async: (http_client) => Promise.resolve({})
You could get the cookie value there and then return something like {
user: { token: true } } (this data goes into Redux store).
Inspecting HTTP request cookies requires getting access to the HTTP
request.
I can make a second parameter in that function: an object with request
property which will be the original Node.js request.
Will that do?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/halt-hammerzeit/react-isomorphic-render/issues/3#issuecomment-233691288,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABHVMYHZCGEfZAvZat0Uv8l2ABfHmgO0ks5qXP0DgaJpZM4JPMGO
.

Try<EMAIL_ADDRESS>

@adailey14 I'm planning on releasing an experimental caching solution for this library in the near future.
Are you using preload function parameter?
If yes, can you post it.
I'm planning to postpone preload function until the page is rendered: this way the results of preload won't be available until all @preload()s finish.

I mean, this thing will have to be changed:
  http:
  {
    // (optional)
    // Will be called for each HTTP request
    // sent using `http` utility inside Redux action creators.
    // (`request` is a `superagent` request)
    request: (request, { store }) =>
    {
      const token = store.getState().authentication.token

      if (token)
      {
        request.set('Authorization', `Bearer ${token}`)
      }
    },
  }

Because store.getState() will be empty while server-side rendering is happening.
If you're using this approach then it should be changed.
For example, in the newest version it automatically sets the Authorization JWT header if the cookie is present (see HISTORY).
Will this functionality replace your existing preload token solution?

Thanks for the heads up. I am using the preload parameter, maybe you can help me figure out where I can achieve the same things without it. I am using it to load information from the cookie and from the request into the store, which I use in a lot of places.
My preload parameter looks like this:
    preload: async (httpClient, { request }) => {
      // Merge authentication token into redux store if present

      const hostname = request.headers.host.replace(/:.*/, '');

      const cookies = cookie.parse(request.headers.cookie || '');
      const token = cookies.token;
      const isAuthenticated = !!token && token !== 'false';

      const useragent = request.headers['user-agent'];
      const mydevice = device(useragent);

      let mloId = null;
      if (isAuthenticated) {
        const decodedToken = jwtDecode(token);
        userId = decodedToken.user_id.toString();
      }

      return {
        authentication: {
          isAuthenticated,
          token,
          hostname,
          userId
        },
        device: {
          type: mydevice.type
        }
      };
    },

And my request parameter configuration currently looks like this:
    request: (request, { store }) => {
      const token = store.getState().authentication.token;
      const hostname = store.getState().authentication.hostname;

      if (token) {
        request.set('X-Auth', `Bearer ${token}`);
      }
      if (hostname) {
        request.set('X-Forwarded-For-Host', hostname);
      }
    }

Ok, we'll figure out the migration path.
In the meantime, the store's getState() is used not only in the request parameter function but also in @preload() decorators.
I can see how store.getState() can be removed from your request parameter function.
What about your @preload() decorators: do you call getState() in any of them?

Or maybe you're reading device or authentication from state in any of your reducers. That could also matter.

Hmm yes, I am using getState a lot in @preload decorators, and also in actionCreator "thunks" (some of which are called in @preload decorators). This is all done to access authentication info (isAuthenticated and  userId). For example I have a lot of api calls in the preload decorators that look something like this:
// root component preloader
const state = getState();
if (state.authentication.isAuthenticated) {
  loadUser(state.authentication.userId);
}

The device is only used for rendering, not needed for @preload decorators.

So, can we say that the only use case for getState() inside @preload in your project is getting userId?

Ok, seems that getStore() is gonna stay in the @preload() decorator.
Because it's justified to keep the user in the store.

Yes, we can say that
On Tue, Oct 25, 2016 at 4:16 PM, Nikolay<EMAIL_ADDRESS>wrote:

So, can we say that the only use case for getState() inside @preload in
your project is getting userId?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/halt-hammerzeit/react-isomorphic-render/issues/3#issuecomment-256178448,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABHVMXOPYtzHCGmr74_Dwm8hke4LrjM0ks5q3nGtgaJpZM4JPMGO
.

Ok, I reasearched caching possibilities a bit and concluded that it's too advanced topic for now.
I guess I'll stick with Server Side Rendering each request for the time being while measuring performance.
As for the 7.0.0, it has no radical changes in terms of being beneficial or such.
https://github.com/halt-hammerzeit/react-isomorphic-render/blob/master/HISTORY.md
You can as well stay on 6.x with your current set up as well.
7.0.0 has a common authentication setting, which can be set up like this:
{
  authentication:
  {
    cookie: 'token',
    header: 'X-Auth'
  }
}

That would automatically expand token cookie into X-Auth header when using httpClient (you'll still set X-Forwarded-For-Host header manually).
I'm not sure about the token !== 'false' piece though - this configuration doesn't handle this edge case in any way.
That's it for the caching topic for now.
If you get interested I summarised my research in a small document:
https://github.com/halt-hammerzeit/react-isomorphic-render/blob/master/CACHING.md

Cool thanks for sharing. I haven't really seen performance issues, because like you said: "since websites are Single Page Applications nowadays, all subsequent navigation will happen in the user's web browser and the page rendering server won't be involved."
I suspect some of the biggest performance gains with this architecture would come from using a CDN (like amazon cloudfront) to deliver the javascript / css / images instead of serving it from the same server doing the server side rendering. Do you know if there is any clever way to configure that with this project? It's been on my todo list for a while but haven't gotten to it yet.

Oh, yes, of course there is a way.
Don't know about being clever, but it's simply proxying everything with something like NginX or HAProxy.
The idea is same as per the README
https://github.com/halt-hammerzeit/react-isomorphic-render#server-side

all HTTP GET requests starting with /assets return static files from your assets folder
all HTTP requests starting with /api call your REST API methods (are proxied to API server)
all the other HTTP GET requests are proxied to http://localhost:3000 for webpage rendering

All these three tasks can be handled by NginX, for example

    location /api {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        rewrite ^/api/?(.*) /$1 break;

        proxy_pass http://api_node_js;
        proxy_redirect off;
    }

Thanks for that. So when I've set up a CDN (amazon cloudfront) in the past, it works like this:
Configure the CDN to point to www.[mydomain].com. The CDN provides me a URL, like abcd.cloudfront.com.
I still serve my static assets from [mydomain].com/assets so the CDN can access them.
Configure my code to make all asset urls point to the CDN url, instead of my domain. So user visits www.[mydomain].com, and gets served html with tags like:
<link href="https://abcd.cloudfront.com/assets/main-12345.css" rel="stylesheet" />
So then the browser makes a request to the CDN domain, and the CDN checks its cache, and if the file is not there, it requests it from www.[mydomain].com/assets/main-12345.css, returns it to the request, and caches it for future requests.
When I've done this in Rails environment, there has been a way to set the CDN url in a gem somewhere and it will automatically use it in stylesheet links, javascript links, and other assets (maybe it was 2 different gems?). So I was thinking maybe there should be a way to do that in a react-isomorphic-render environment too.
Do you think there is a way to achieve what I am talking about using nginx configuration? Or would it require changing the asset urls?

Here is an example of the kind of setup I did in rails: https://www.happybearsoftware.com/use-cloudfront-and-the-rails-asset-pipeline-to-speed-up-your-app.html

Well, they say that NginX (and other statics serving proxies) aren't required for CloudFront set up
https://www.peterbe.com/plog/is-nginx-obsolete-amazon-cloudfront
If a CDN is used, then yes, it would be justifiable to create a mechanism for replacing all links to the new ones pointing at that CDN.
For that purpose output.publicPath Webpack setting should be modified to point to the CDN root
https://github.com/webpack/docs/wiki/Configuration#outputpublicpath
And in conjunction with universal-webpack, I guess, that would be it.

Ahh yes output.publicPath, seems like that's what I was looking for. Thanks!


[Idea] More concise diagram

I hope there is another display mode, with the current document as the center, the left side represents those files that reference the current file, and the right represents those files referenced by the current file.
Like this:mindmap

Thanks a lot for bringing this up!
I agree that we could benefit from having some other methods of displaying the graph, but it would require a lot of work – adding various rendering methods, making sure the graph is abstract enough to provide data to them, handling some additional constraints (for example what you mention is a tree-based layout which would require various conditions to be met – see here).
So: yes, we are most likely heading in direction that will at some point support more visualisation formats but unfortunately it won't happen anytime soon as I don't think we are ready for that kind of a jump yet.


Switching to live content overhaul

This is copied from a very large Google Doc which @jonathanglassman kindly put in Markdown already (I might commit a few further changes).
Before I can send this for a content review there are a couple of questions left outstanding so I'm opening this PR to invite people to answer those when they have the time and bandwidth.

@jonathanglassman a lot of the images (mainly Worldpay) have been deleted. Just want to check that was what was agreed/planned.

@alexbishop1 @heathd @soniaturcotte please don't feel you need to give a full review if time doesn't permit, but just wanted to make you aware of this as much as anything else. Jon has passed this content on to me; I've done a quick review of it and am using this PR to ask for any further feedback. If there is none, I'll send it for a content review.

@alexbishop1 @heathd @soniaturcotte please don't feel you need to give a full review if time doesn't permit, but just wanted to make you aware of this as much as anything else. Jon has passed this content on to me; I've done a quick review of it and am using this PR to ask for any further feedback. If there is none, I'll send it for a content review.

OK, I've finished content-reviewing this as best I can; I'll send it off for review from the content people.

@bahmady we should add a note to describe the differences between live and test accounts


move away from jQuery?

Will Slick move away from jQuery? I know it is useful but I think it is better if Slick had no dependencies and JavaScript has come a long ways, making it so jQuery is not needed for developing JS quickly.
Or even to have Slick not require jQuery and have a optional jQuery integration JS script to allow people to use jQuery with Slick if they wish.

Might help ?
Removed all JQuery from the solution:
https://github.com/ubergeoff/flingo/blob/master/libs/slicker/src/lib/slicker.ts
DEMO: https://www.flingo.co.za/slick/slick1


ci: run kotlin linter on library*

We don't currently run the Kotlin linter on anything other than hello_world, but we should.
Signed-off-by: Michael Rebello<EMAIL_ADDRESS>

I purposefully didn't do this because there was some issue before I believe...


Static stats block with real time updating

@ncw Nick, new issue per your request. A static stat block, like the current one, except it's persistent and only the information changes. I'll add my details later when I'm not on mobile, but just wanted to get the issue made for you.
So here's the low-down on the idea from the other issue:
The current stats block....

I say print out this format as a static block if someone uses -stats, then update the stats in place (like --info=progress2 in rync). Adding the last error that was received at the bottom. Write off all errors to a file, then list them once the transfer is done.
Then once the transfer is done, the last block of stats and the errors are written off to output for peoples logs that use them.
This way you can get an update on what's going on at a glance, but you don't have a scrolling wall of text both onscreen and in your logs.

When implementing this, please consider that there should be a "log-ouput-friendly mode" for people who uses rclone in scripts and periodic tasks.
Thanks

100% behind this. I have a few precompiled, statically linked copies of the newest rsync running around to use on NAS boxes that have older versions w/o --info=progress2.
My personal backup scripts have a large amount of code where I grep a tail of rclone's piped output. I arrive with one line I overwrite using bash cursor movement commands:
2017/04/17 00:02:07 - /encrypted 616002 files, 10808.3G
2017/04/17 00:02:28 - /encrypted 2058 files@5880/min, <EMAIL_ADDRESS>

My personal backup scripts have a large amount of code where I grep a tail of rclone's piped output. I arrive with one line I overwrite using bash cursor movement commands:

While this is not being addressed by rclone itself - can you provide a bit of info how you managed to pull this off? :)

Let me find it... It's kinda big and clunky

OK As requested. This is part of a bigger bash script. I call the upload function and pass it the directory I want to upload.
I'm going to start commenting the code now, but feel free to ask questions in the repo.
rclonewatch

Awesome, thank you for sharing that!

I did make a start on this in #2347, from that thread
OK here is attempt number 2 within rclone which I think is getting there...  It would be activated with the --progress flag (like rsync).

That looks awesome already!

@ncw Two questions:

Can the progress output go to stdout and the other stuff go to stderr? The progress section keeps getting pushed down by the $data: info : $filename copied : (new) lines. Being able to pipe that somewhere else would be great. Ideally, the only thing that would output on stdout would be the progress stuff.

I love the work you've put into this, and I love all the details, but I love rsync --info=progress2's one-line approach. It aids in scripting if you're sure, combined with 1 above, there will only be one line of output.

Keep up the good work, and thanks for all you do. I, for one, welcome our new rclone overlords.

@peterberbec wrote:

Can the progress output go to stdout and the other stuff go to stderr? The progress section keeps getting pushed down by the $data: info : $filename copied : (new) lines. Being able to pipe that somewhere else would be great. Ideally, the only thing that would output on stdout would be the progress stuff.

The idea is that  the log entries push the stats info to the bottom of the screen but it stays there as a non-moving block.  You can use --log-file to send the log elsewhere (that may not work right now though!)

I love the work you've put into this, and I love all the details, but I love rsync --info=progress2's one-line approach. It aids in scripting if you're sure, combined with 1 above, there will only be one line of output.

For reference this is what rsync --info=progress2 looks like
    482,712,279 100%   97.36MB/s    0:00:04 (xfr#1128, to-chk=0/1176)

It is showing total bytes transferred, speed, ETA, files to transfer and files to check.
rclone doesn't know some of those things but they would be nice to show certainly.

OK great.
Regarding rsync. It's not an exact copy of rsync I was hoping for, it was a single line of output, with whatever you were displaying

OK I've been working on getting the extra stats in.  What I'm imagining is a full stats block would look like this (this code is from here https://beta.rclone.org/branch/v1.42-055-g2d0c58a0-fix-379-stats/ if you want to give it a go).
Transferred:      20.111M / 335.136 MBytes, 6%, 10.017 MBytes/s, ETA 31s (xfr#74/784)
Errors:                 0
Checks:               356 / 356, 100%
Transferred:           74 / 784, 9%
Elapsed time:          2s
Transferring:
 *               puppies/dsc-20011020-161637.jpg: 87% /291.271k, 0/s, -
 *               puppies/dsc-20011020-161702.jpg: 89% /285.577k, 0/s, -
 *               puppies/dsc-20011020-161718.jpg: 33% /284.405k, 0/s, -
 *               puppies/dsc-20011020-161727.jpg: 11% /289.813k, 0/s, -

And a oneline stats block would be just (maybe with the --stats-oneline flag or something like that)
Transferred:      20.111M / 335.136 MBytes, 6%, 10.017 MBytes/s, ETA 31s (xfr#74/784)

Which has all the info rsync has in.
If you apply the --progress flag you'll get a static block which updates continously.

Nick, you're my hero! You've just allowed me to get rid of over a hundred lines of BS bash code.
I bought your wife some roses!

In the linked version of rclone, i get Fatal error: unknown flag: --progress and Fatal error: unknown flag: --stats-oneline. Is the code there but the option not enabled yet?

@peterberbec thank you!  I need to merge the progress branch with that one, and I haven't done the --stats-online flag yet (though it will be easy) - suggestions for a better name!
Expect all this to come together when I get back from my trip in a week!

--rsync-stats
--progress2
--sls # single line stats
--pb-stats lol

OK here is the next iteration. This has whole operation stats and supports --stats-one-line along with --progress.  I tried to make --progress --one-line look like rsync's progress2 equivalent.
https://beta.rclone.org/branch/v1.42-126-g0475830a-fix-2347-progress/ (uploaded in 15-30 mins)
I haven't implemented @ewwink suggestion about switching the order of the transferring files and the transfer stats yet.

That one didn't build, try this one...
https://beta.rclone.org/branch/v1.42-128-gebf185ec-fix-2347-progress/ (uploaded in 15-30 mins)

3rd time lucky - this did build :-)
https://beta.rclone.org/branch/v1.42-128-g816d3ceb-fix-2347-progress/

I have merged that in
https://beta.rclone.org/v1.42-131-g1cccfa73/ (uploaded in 15-30 mins)
which will be in the latest beta and v1.34
I expect that it will get  tweaked as time goes by!

Awesome! :)


Run a speedtest with ookla cause a 500 error

Describe the bug
Run a speedtest with ookla cause a 500 error
To Reproduce
Steps to reproduce the behavior:

Open speed tracker
Click on Run Speedtest
Click on Ookla Speedtest

Environment (please complete the following information):

OS: Debian 12 (Docker)
Architecture: amd64
Browser chrome
Version 0.21.2

Screenshots

Logs
TypeError
App\Actions\Speedtests\RunOoklaSpeedtest::handle(): Argument #1 ($serverId) must be of type ?int, string given, called in /app/www/vendor/lorisleiva/laravel-actions/src/Concerns/AsObject.php on line 24

How did you defined the server id's in the env variables?
They shoud be defined like below when using multiple servers.
SPEEDTEST_SERVERS=3242,21509,61186
For a single server its like this
SPEEDTEST_SERVERS=3242

my bad I forgot to post the compose, I can't post it now, but this is certainly the fix, my brain skipped id divided by commas and so I entered domains divided by commas. I feel stupid for not noticing this after reading it so many times 🤦🤣 Thanks You Very Much

No worries 😄  let us know if there are any problems after changing it to the ID's. Otherwise please close the issue if all works :)

yep, worked thx 🙏


delete tags? tag is also a branch

It seem not work on deleting tag whatever local's or remote's

Currently in the ideas, we'll release ASAP.


This theme is run github pages?

This project and my personal blog  are running github pages.

In the case you want ask me something else, I'll leave it open.

Thank you!
I use this theme for my blog in github pages
step1. Fork repo ... ok
step2. change name User.github.io ... ok
step3. post modified ... do not
step4. new post write ... do not  (I use prose.io)
what can i do to solve this problem?

Sorry for not providing a doc.
I just checked your blog repo, and I think the problem is missing a front matter for your own posts.
You need to provide a front matter for each post file
---
layout: post
title: Sample Post
excerpt: "Just about everything you'll need to style in the theme: headings, paragraphs, blockquotes, tables, code blocks, and more."
categories: [hello world]
comments: true
image:
  feature: https://images.unsplash.com/photo-1440635592348-167b1b30296f?crop=entropy&dpr=2&fit=crop&fm=jpg&h=475&ixjsv=2.1.0&ixlib=rb-0.3.5&q=50&w=1250
  credit: thomas shellberg
  creditlink: https://unsplash.com/photos/Ki0dpxd3LGc
---

And, I noticed that you added a published: true / false in the front matter and I suppose you are testing that. Actually, published is not using and is causing a building failure. Try to avoid using unknown key/value in the front matter.
If you want make a draft post, you can make a folder named _draft to store them temporally.
Hope this helps.

And your commit history is showing what is going wrong:
Failure: The file `_posts/2015-08-18-welcome-to-jekyll.md` does not have a valid date in the YAML front matter.

Thank you!  I solved the problem.
point1. Modified valid date
point2. Delete front matter [ published ]
another question...
How do I activate tag cloud ?
Category information is entered into the Matter front and tag information Where can I enter ?

Tag is under developing, and will be available soon. 😄

@renyuanz As a noob, I have a question. I forked your repo and changed the name to betaseason.github.io. When I go to that URL, however, I get this error:
There isn't a GitHub Pages site here.
Am I missing something? :P
(Once again, I am a complete noob at this, sorry)


Bug: Queue doesn't move to the next song, if user doesn't move it manually with skip command

When you get time please look at it.
Reproduce steps:

~play something
~play something again so it is in queue
wait for the first song to finish

Expected: It goes to next song automatically
Actual: Nothing happens until song is skipped manually
P.S. I really love this bot

Old bug, sorry for not responding sooner, it was an issue with voice at the time that is now fixed. Thanks for reporting :)


Typed deep object validation

Adds a values property that allows to add validation rules to all elements of an array or object.

Changes Unknown when pulling fbc057aa9057fb88db66ffdf4dc21f9a7e8d6282 on queimadus:typed-deep-object-validation into ** on yiminghe:master**.

thanks, I will merge and change values to allFields(harmony with fields...)


'KerasLayer' object has no attribute 'shape'

When trying to use hub.KerasLayer with Functional API we are getting below errors
import tensorflow as tf
import tensorflow_hub as hub
from tensorflow.keras.layers import Dense
tfhub_path="https://tfhub.dev/google/universal-sentence-encoder-large/5"
hub_layer = hub.KerasLayer(tfhub_path, input_shape=[],                           dtype=tf.string, trainable=False)
output_1 = Dense(64, activation='relu')(qstn_layer)
Below are the error details.

AttributeError                            Traceback (most recent call last)
 in
----> 1 output_1 = Dense(64, activation='relu')(qstn_layer)
/app/AI_RD/conda/envs/cont_tag_use_sup/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py in call(self, inputs, *args, **kwargs)
885         # Eager execution on data tensors.
886         with backend.name_scope(self._name_scope()):
--> 887           self._maybe_build(inputs)
888           cast_inputs = self._maybe_cast_inputs(inputs)
889           with base_layer_utils.autocast_context_manager(
/app/AI_RD/conda/envs/cont_tag_use_sup/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/base_layer.py in _maybe_build(self, inputs)
2120     if not self.built:
2121       input_spec.assert_input_compatibility(
-> 2122           self.input_spec, inputs, self.name)
2123       input_list = nest.flatten(inputs)
2124       if input_list and self._dtype_policy.compute_dtype is None:
/app/AI_RD/conda/envs/cont_tag_use_sup/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
161         spec.min_ndim is not None or
162         spec.max_ndim is not None):
--> 163       if x.shape.ndims is None:
164         raise ValueError('Input ' + str(input_index) + ' of layer ' +
165                          layer_name + ' is incompatible with the layer: '
AttributeError: 'KerasLayer' object has no attribute 'shape'

I also ran into that yesterday and found that using an input layer first resolved the issue. Example code:
input_text = tf.keras.Input((), dtype = tf.string, name = 'input_text')
embed_use = hub.load("https://tfhub.dev/google/universal-sentence-encoder-large/5")
embedding = hub.KerasLayer(embed_use, input_shape = [],
                           dtype = tf.string,
                           #trainable = True
                           trainable = False
                           )(input_text)

@ajonatanu-pk,
Can you please let us know if @ck37's workaround has resolved your issue? Thanks!

@ajonatanu-pk,
Can you please respond to the above comment. Thanks!


10-31-24 Board Meeting Spanish Recording Video Link Not Showing

Hi Team!
I noticed that the meeting page for the October Board Meeting does not show the Spanish video link:
https://boardagendas.metro.net/event/regular-board-meeting-c05d915b6c6f/
There was some delay in making this video public because of a Granicus bug. The video was made available yesterday but we are still not seeing the link. Below is the link to the Spanish video:
https://metro.granicus.com/player/clip/3287?view_id=2&redirect=true
Can we look into this?
Thanks!

Hey, @neilarellano! Looks like it came through over the weekend.


[DEV] Bot immediatly uses another lucky egg when restarting

Expected Behavior
Use lucky egg when evolving pokémons. Don't use another lucky egg if the previous one is still active!!!
Actual Behavior
Use lucky egg in any case if player have one. Use lucky egg even if previous one is still active (bot restart).
Steps to Reproduce
Default configuration file (config.pokemon.json.example).
Have some lucky eggs (min 2).
Launch to bot, it uses an egg, stop the bot.
Relaunch the bot, it uses an egg again !
Other Information
OS: Linux Ubuntu 16
Git Commit: bdaddec9ee64691e5b0a8bda55bf76f83442232f
Python Version: 2.7.12

[16:33:29]  PokemonGO Bot v1.0
[16:33:29]  No config argument specified, checking for /configs/config.json
[16:33:29]  Configuration initialized
[16:33:29] [x] Coordinates found in passed in location, not geocoding.
[16:33:29]
[16:33:29] Location Found: _______________
[16:33:29] GeoPosition: (____, , 0)
[16:33:29]
[16:33:29] [x] Parsing cached location...
[16:33:29]
[16:33:29] [x] Last location flag used. Overriding passed in location
[16:33:29] [x] Last in-game location was set as: (, ____________, 0)
[16:33:29]
[16:33:29] Attempting login to Pokemon Go.
[16:33:35]  Login to Pokemon Go successful.
[16:33:35]
[16:33:35]  --- PLAYERNAME ---
[16:33:35]  Level: 20 (Next Level: 49190 XP) (Total: 210810 XP)
[16:33:35]  Pokemon Captured: 809 | Pokestops Visited: 840
[16:33:35]  Pokemon Bag: 122/250
[16:33:35]  Items: 315/350
[16:33:35]  Stardust: 81972 | Pokecoins: 0
[16:33:35]  PokeBalls: 46 | GreatBalls: 50 | UltraBalls: 20
[16:33:35]  RazzBerries: 98 | BlukBerries: 0 | NanabBerries: 0
[16:33:35]  LuckyEgg: 2 | Incubator: 2 | TroyDisk: 5
[16:33:35]  Potion: 10 | SuperPotion: 25 | HyperPotion: 25
[16:33:35]  Incense: 5 | IncenseSpicy: 0 | IncenseCool: 0
[16:33:35]  Revive: 25 | MaxRevive: 0
[16:33:35]
[16:33:35]
[16:33:38]  Starting PokemonGo Bot....
[16:33:39]  [x] Next egg incubates in 0.72 km
[16:33:40] Using lucky egg ... you have 2
[16:33:40]  Successfully used lucky egg... (1 left!)
[16:33:41] Walking from (48.57896357959105, 7.739215699012647) to [48.57896357959105, 7.739215699012647] 0.00km
[16:33:41]  [x] Next egg incubates in 0.44 km
...
^C[16:34:01]  Exiting PokemonGo Bot
[16:34:01]
[16:34:01]  Ran for 0:00:32
[16:34:01]  Total XP Earned: 0  Average: 0.00/h
[16:34:01]  Travelled 0.00km
[16:34:01]  Visited 0 stops
[16:34:01]  Encountered 0 pokemon, 0 caught, 0 released, 0 evolved, 0 never seen before
[16:34:01]  Threw 0 pokeballs
[16:34:01]  Earned 0 Stardust
[16:34:01]
[16:34:01]  Highest CP Pokemon:
[16:34:01]  Most Perfect Pokemon:
set "all" for evolve_all to force evolution, let use_lucky_egg to true
(pokebot) user@host PokemonGo-Bot $ pokebot
[16:34:25]  PokemonGO Bot v1.0
[16:34:25]  No config argument specified, checking for /configs/config.json
[16:34:25]  Configuration initialized
[16:34:25] [x] Coordinates found in passed in location, not geocoding.
[16:34:25]
[16:34:25] Location Found: _____________
[16:34:25] GeoPosition: (______, , 0)
[16:34:25]
[16:34:25] [x] Parsing cached location...
[16:34:25]
[16:34:25] [x] Last location flag used. Overriding passed in location
[16:34:25] [x] Last in-game location was set as: (, __________, 0)
[16:34:25]
[16:34:25] Attempting login to Pokemon Go.
[16:34:26]  Login to Pokemon Go successful.
[16:34:27]
[16:34:27]  --- PLAYERNAME ---
[16:34:27]  Level: 20 (Next Level: 49190 XP) (Total: 210810 XP)
[16:34:27]  Pokemon Captured: 809 | Pokestops Visited: 840
[16:34:27]  Pokemon Bag: 122/250
[16:34:27]  Items: 314/350
[16:34:27]  Stardust: 81972 | Pokecoins: 0
[16:34:27]  PokeBalls: 46 | GreatBalls: 50 | UltraBalls: 20
[16:34:27]  RazzBerries: 98 | BlukBerries: 0 | NanabBerries: 0
[16:34:27]  LuckyEgg: 1 | Incubator: 2 | TroyDisk: 5
[16:34:27]  Potion: 10 | SuperPotion: 25 | HyperPotion: 25
[16:34:27]  Incense: 5 | IncenseSpicy: 0 | IncenseCool: 0
[16:34:27]  Revive: 25 | MaxRevive: 0
[16:34:27]
[16:34:27]
[16:34:29]  Starting PokemonGo Bot....
[16:34:30]  [x] Next egg incubates in 0.44 km
[16:34:30] Using lucky egg ... you have 1

Hmmmm okay so in fact, I restarted the bot a third time, and I still have one lucky egg. So I guess the messages say the bot IS using a lucky egg but actually no egg is used since the previous one is still active. More fear than harm. Would be great to update the log messages accordingly, if possible :)


Update http4s-dsl, http4s-ember-client, ... to 0.23.19

About this PR
📦 Updates

org.http4s:http4s-dsl
org.http4s:http4s-ember-client
org.http4s:http4s-ember-server

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

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "org.http4s" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "org.http4s" }
}]

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

Superseded by #710.


Process.CloseMainWindow() and Process.Close() are ignored for processes running in terminal

Windows Terminal version
1.11.2921.0
Windows build number
10.0.22000.258
Other Software
.NET Framework 4.7.1
Steps to reproduce
Configure Terminal as default terminal application.
Write application (in our case .NET framework 4.7.1 WPF application) that starts some other console process:
var startInfo = new ProcessStartInfo {   UseShellExecute = false }; var process = new Process {   EnableRaisingEvents = true,   StartInfo = startInfo }; process.Start();
then try to stop this process with the following code:
Process process = Process.GetProcessById(processId); if (!process.HasExited) {   process.CloseMainWindow();   if (!process.HasExited) {     if (!process.WaitForExit(5000)) {       process.Close();     }   } }
Expected Behavior
Process is stopped and the terminal tab is closed (same as in the case cmd.exe is the default terminal application).
Actual Behavior
Nothing happens.

process.CloseMainWindow();

The console session [1] that gets created by Windows Terminal is a pseudoconsole session, for which the root process doesn't effectively own any window. To make the above work, the window that gets returned by GetConsoleWindow() in a pseudoconsole session would have to implement an effective owner, and the window manager would have to special case the reported owner for windows of type "PseudoConsoleWindow", just like it already does for windows of type "ConsoleWindowClass".
In a classic console session, the window that's returned by GetConsoleWindow() -- if there is one [2] -- stores the process ID and thread ID of its effective owner as window data. The console host maintains the effective owner as the root process in the console's list of processes. This shifts to the next process when the current root process either exits or detaches via FreeConsole(). See SetConsoleWindowOwner(). The window-manager function GetWindowThreadProcessId() is special cased for "ConsoleWindowClass" to return the window's effective owner instead of the real owner. The following example uses a Python shell in a classic console session, in which Python is the root process.
>>> (kernel32.GetCurrentProcessId(), kernel32.GetCurrentThreadId())
(5556, 2720)
>>> proc_list = (ctypes.c_ulong * 10)()
>>> n = kernel32.GetConsoleProcessList(proc_list, len(proc_list))
>>> proc_list[:n]
[5556]
>>> hwnd = kernel32.GetConsoleWindow()
>>> tid = user32.GetWindowThreadProcessId(hwnd, ctypes.byref(pid))
>>> (pid.value, tid)
(5556, 2720)
>>> (user32.GetWindowLongPtrW(hwnd, 0), user32.GetWindowLongPtrW(hwnd, 4))
(5556, 2720)

A process can be gracefully terminated by enumerating the desktop's top-level windows and message-only windows in order to post WM_CLOSE to the windows that the process owns, as determined by GetWindowThreadProcessId(). For example, this is what "taskkill.exe" does without the /F (force) option. This means that a process that allocates a classic console session can be closed gracefully via taskkill /pid <pid>. Every process in the console session has to exit when the console is closed. Each gets a CTRL_CLOSE_EVENT with up to "HungAppTimeout" (5000 ms default) to handle it.
Anyway, none of this is implemented for the dummy window that gets returned by GetConsoleWindow() in a pseudoconsole session. Here's another Python example, but this time under Windows terminal. This example shows that dummy window is owned by "openconsole.exe".
>>> hwnd = kernel32.GetConsoleWindow()
>>> pid = ctypes.c_ulong()
>>> tid = user32.GetWindowThreadProcessId(hwnd, ctypes.byref(pid))
>>> hproc = kernel32.OpenProcess(0x0200_0000, False, pid)
>>> name = (ctypes.c_wchar * 256)()
>>> psapi.GetModuleBaseNameW(hproc, None, name, len(name))
15
>>> name.value
'OpenConsole.exe'

[1] A console session has nothing inherently to do with cmd.exe, which is a shell, not a terminal. The host for a console session is "conhost.exe", or the build distributed with Windows Terminal, "openconsole.exe. An application can inherit, allocate, or attach to a console session, which is a system resource.
[2] A console session can be created without a window, per the CREATE_NO_WINDOW process creation flag. In this case GetConsoleWindow() returns NULL.

The window-manager function GetWindowThreadProcessId() is special cased for "ConsoleWindowClass" to return the window's effective owner instead of the real owner.

omfg
is that the solution to #2988 that I've been looking for? I can't find the particular code in the OS that's looking exactly for ConsoleWindowClass, but there's a lot of code that does that. Maybe we need to be setting the pseudoconsole HWND to that class name (even if it's a lie)

I can't find the particular code in the OS that's looking exactly for ConsoleWindowClass, but there's a lot of code that does that.

It's implemented by the system call NtUserQueryWindow(). Information classes 0 and 2 return the window owner's process ID and thread ID. For example:
>>> hwnd = kernel32.GetConsoleWindow()
>>> kernel32.GetCurrentProcessId(), kernel32.GetCurrentThreadId()
(6552, 6452)
>>> win32u.NtUserQueryWindow(hwnd, 0), win32u.NtUserQueryWindow(hwnd, 2)
(6552, 6452)

In a kernel debugging session, I see that NtUserQueryWindow() in win32kfull.sys checks for a flag value (0x800) to determine whether to get the window owner's pid and tid values from the window data instead of using the real owner. The "PseudoConsoleWindow" class could be special cased internally to include the same flag. The console host would also have to be updated to support this.  Currently, with a classic console window, SetOwner() is called by RemoveConsole(), which is initially set in InitWindowsSubsystem() via SetConsoleWindowOwner().
FYI, apparently information class 1 is the pid of the real owner, i.e. "conhost.exe". For example:
>>> win32u.NtUserQueryWindow(hwnd, 1)
1096
>>> name = (ctypes.c_wchar * 256)()
>>> hproc = kernel32.OpenProcess(0x0200_0000, False, 1096)
>>> psapi.GetModuleBaseNameW(hproc, None, name, len(name))
11
>>> name.value
'conhost.exe'

Maybe we need to be setting the pseudoconsole HWND to that class name (even if it's a lie)

The pseudoconsole window shouldn't have the same window procedure. But it should at least have a window procedure that closes the console session when WM_CLOSE is posted to the window. The processes in the console session will be sent CTRL_CLOSE_EVENT to let them shut down gracefully. That ties into the above discussion about reporting the primary process in the session as the effective owner of the pseudoconsole window. This allows using the pid of the effective owner to gracefully shut down the entire console session, e.g. via taskkill /pid <pid>.

But it should at least have a window procedure that closes the console session when WM_CLOSE is posted to the window

That seems reasonable, even if people really really shouldn't be using the console HWND, that seems valid.
Notes to self: the flag is set by the ConsoleControl private api, and you can find the relevant OS code with bConsoleWindow = TRUE. Not helpful for external folks, but that'll get me close enough.
I wonder if this might have anything to do with the orphaning on update, too. #9914 is the one I'm thinking of.

This allows using the pid of the effective owner to gracefully shut down the entire console session, e.g. via taskkill /pid <pid>.

Unfortunately this won't help with .NET Process.CloseMainWindow(), nor "End Task" in Task Manager. They only send the close message to the visible main window of a process. taskkill.exe, on the other hand, posts the close message to all top-level windows and message-only windows that the process owns. It searches for windows on all desktops of all window stations in the session. Most "graceful terminate" (like Unix SIGTERM) implementations that I've seen work similarly, at least in part. Few are as comprehensive as taskkill, but they're not as limited as CloseMainWindow(). For example, Qt's QProcesss::terminate() has a simple implementation that posts the close message to all top-level windows that the child process owns on the calling thread's desktop. It also tries to post the close message to the main (initial) thread in the process.

@lhecker did this one get fixed too?

Hmm I've been reading through this issue and I feel like that my change didn't address this issue. CloseMainWindow() is similar to running taskkill without /F as mentioned above right? And yeah:
C:\Users\lhecker> taskkill /IM cmd.exe
ERROR: The process "cmd.exe" with PID 9256 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

As @eryksun writes:

The pseudoconsole window shouldn't have the same window procedure. But it should at least have a window procedure that closes the console session when WM_CLOSE is posted to the window.

That seems like a simple enough change to me? All we'd have to do is to call VtIo::SendCloseEvent() if we receive a WM_CLOSE.

Hi @eryksun and folks here,
I got confused, possibly due to my limited English language skills and professional knowledge.
Is eryksun recommending openconsole.exe to behave like conhost.exe?
Let me use some examples to illustrate my confusions.
eg1: I launched cmd.exe(pid1), so conhost.exe(pid2) got launched too, then in this console, I launched python.exe(pid3).
In python, kernel32.GetConsoleWindow() return hwnd, then user32.GetWindowThreadProcessId(hwnd, ctypes.byref(pid)) set pid to pid1(not pid2, nor pid3), so here why not set pid to pid2?
eg2: I launched cmd.exe(pid11), so openconsole.exe(pid12) got launched too, then in this console, I launched python.exe(pid13).
In python, kernel32.GetConsoleWindow() return hwnd, then user32.GetWindowThreadProcessId(hwnd, ctypes.byref(pid)) set pid to pid2(not pid1, nor pid3), so eryksun recommend to let pid=pid1 as the case of conhost.exe?


Make delivery date available in the order rest api.

Can you make the delivery date available in the shipping_assignments on the order extension attribute to use in the order rest api?

Hi @rbouma , a bit late response, we are currently occupied at the moment but we will try to add this on the next release. You can also create PR for that one if you want, we will be more than happy to accept contributions.


Allow colspan attribute

While the table context doesn't support the colspan attribute on td or th it should allow it if they are set to colspan="1" and throw an exception if the number of columns they span is greater than 1.
This was done to support 3rd party JavaScript libraries that generate the table DOM setting the colspan=1 attribute.

!force code review @johnnie502

Paging @TaysirTayyab to review the front-end work in this pull request!
Paging @Chekote to review the back-end work in this pull request!


Cannot see new Github organizations

Under Deploy > GitHub
When you click the dropdown, it doesn't seem to show newly added organizations, since connecting your app.

Please open a support ticket at http://help.heroku.com  That will allow us to follow-up and find a solution.

Sorry, thought you meant here. Created it!

+1 @aequasi Was there a way to get it to work?

Thanks alot! That's worked great.


[BUG] Manager pod failing to start for arm64 install

Describe the bug
I'm installing this package via Helm (and also directly) onto a cluster of Raspberry Pi 4's that use the arm64 architecture, but the manager pod is failing to start with a CrashLoopBackOff error. This normal indicates that the package that is being installed is built for the wrong architecture (i.e. amd64).
To Reproduce
Install the package via Helm.
Expected behavior
The pods should start successfully and I should be able to view the .onion address for the service.
Additional information
As per the conversation on #3, I have uninstalled, updated the repo and reinstalled the package, but the issue still persists.
Here is the failing pod description:
Name:         tor-controller-6977fc959f-hvb48
Namespace:    tor-controller
Priority:     0
Node:        ---
Start Time:   Tue, 01 Mar 2022 15:06:39 +0000
Labels:       app.kubernetes.io/instance=tor-controller
              app.kubernetes.io/name=tor-controller
              pod-template-hash=6977fc959f
Annotations:  <none>
Status:       Running
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  ReplicaSet/tor-controller-6977fc959f
Containers:
  manager:
    Container ID:  containerd://c63144efa6f93831c4217b145f9a8669ff3b691f8af16a972dd81bfa4f47d0ee
    Image:         quay.io/bugfest/tor-controller:0.5.0
    Image ID:      quay.io/bugfest/tor-controller@sha256:0f142060bba60d422c6c536de766ace73a0a00535fcffaba354260e54e59c1e6
    Port:          <none>
    Host Port:     <none>
    Command:
      /manager
    Args:
      --config=controller_manager_config.yaml
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Tue, 01 Mar 2022 15:10:06 +0000
      Finished:     Tue, 01 Mar 2022 15:10:06 +0000
    Ready:          False
    Restart Count:  5
    Liveness:       http-get http://:8081/healthz delay=15s timeout=1s period=20s #success=1 #failure=3
    Readiness:      http-get http://:8081/readyz delay=5s timeout=1s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /controller_manager_config.yaml from manager-config (rw,path="controller_manager_config.yaml")
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5gzzm (ro)
  kube-rbac-proxy:
    Container ID:  containerd://5eab9e63e587140e040ef3b804ac9bea7f1bdbf8c4d4cb89f09cde93e0811ccb
    Image:         gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0
    Image ID:      gcr.io/kubebuilder/kube-rbac-proxy@sha256:db06cc4c084dd0253134f156dddaaf53ef1c3fb3cc809e5d81711baa4029ea4c
    Port:          8443/TCP
    Host Port:     0/TCP
    Args:
      --secure-listen-address=<IP_ADDRESS>:8443
      --upstream=http://<IP_ADDRESS>:8080/
      --logtostderr=true
      --v=10
    State:          Running
      Started:      Tue, 01 Mar 2022 15:06:48 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5gzzm (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  manager-config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      tor-controller-manager-config
    Optional:  false
  kube-api-access-5gzzm:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                    From               Message
  ----     ------       ----                   ----               -------
  Normal   Scheduled    4m58s                  default-scheduler  Successfully assigned tor-controller/tor-controller-6977fc959f-hvb48 to ---
  Warning  FailedMount  4m58s                  kubelet            MountVolume.SetUp failed for volume "manager-config" : failed to sync configmap cache: timed out waiting for the condition
  Normal   Pulled       4m53s                  kubelet            Successfully pulled image "quay.io/bugfest/tor-controller:0.5.0" in 748.656901ms
  Normal   Pulled       4m52s                  kubelet            Container image "gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0" already present on machine
  Normal   Created      4m51s                  kubelet            Created container kube-rbac-proxy
  Normal   Started      4m50s                  kubelet            Started container kube-rbac-proxy
  Normal   Pulled       4m48s                  kubelet            Successfully pulled image "quay.io/bugfest/tor-controller:0.5.0" in 2.019106168s
  Normal   Pulled       4m25s                  kubelet            Successfully pulled image "quay.io/bugfest/tor-controller:0.5.0" in 700.418473ms
  Normal   Created      4m25s (x3 over 4m52s)  kubelet            Created container manager
  Normal   Started      4m25s (x3 over 4m52s)  kubelet            Started container manager
  Warning  BackOff      4m7s (x8 over 4m45s)   kubelet            Back-off restarting failed container
  Normal   Pulling      3m54s (x4 over 4m54s)  kubelet            Pulling image "quay.io/bugfest/tor-controller:0.5.0"

System (please complete the following information):

Platform: Raspberry Pi 4 Kubernetes cluster - arm64
Version: Latest

Hi @carronmedia, let's see why is failing. So, first of all, the logs. Can you attach them (/tmp/tor-controller-issue-11.txt) here please?
$ kubectl -n tor-controller logs -l app.kubernetes.io/name=tor-controller -c manager | tee /tmp/tor-controller-issue-11.txt

Thank you for looking! Here you go...
tor-controller-issue-11.txt

Ok, so wrong architecture xD. Gonna check the 0.5.0 one and re-compile : S

@carronmedia in the meantime, you might try out one of the older ones, hopefully they have the correct container arch:
$ helm search repo tor-controller --versions
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
bugfest/tor-controller  0.1.3           0.5.0           Tor hidden services controller for kubernetes
bugfest/tor-controller  0.1.2           0.4.0           TOR hidden services controller for kubernetes
bugfest/tor-controller  0.1.1           0.3.2           TOR hidden services controller for kubernetes
bugfest/tor-controller  0.1.0           0.3.1           TOR hidden services controller for kubernetes

helm upgrade ... --version 0.1.1

Hi @bugfest, I've just installed v0.1.1 and unfortunately I'm getting the same issue:
Name:         tor-controller-5bc7b4cb7c-57r84
Namespace:    tor-controller
Priority:     0
Node:         ---
Start Time:   Tue, 01 Mar 2022 19:20:02 +0000
Labels:       app.kubernetes.io/instance=tor-controller
              app.kubernetes.io/name=tor-controller
              pod-template-hash=5bc7b4cb7c
Annotations:  <none>
Status:       Running
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  ReplicaSet/tor-controller-5bc7b4cb7c
Containers:
  manager:
    Container ID:  containerd://3c6935bda1914e299a3cba468abca06df90215aa098a5bf5c9e1395f168e0f98
    Image:         quay.io/bugfest/tor-controller:0.3.2
    Image ID:      quay.io/bugfest/tor-controller@sha256:e6ca8c1cb589f780a8f93a8203bb67a1781b7a697bc471f7a50180c97620ec46
    Port:          <none>
    Host Port:     <none>
    Command:
      /manager
    Args:
      --config=controller_manager_config.yaml
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Tue, 01 Mar 2022 19:27:50 +0000
      Finished:     Tue, 01 Mar 2022 19:27:50 +0000
    Ready:          False
    Restart Count:  3
    Liveness:       http-get http://:8081/healthz delay=15s timeout=1s period=20s #success=1 #failure=3
    Readiness:      http-get http://:8081/readyz delay=5s timeout=1s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /controller_manager_config.yaml from manager-config (rw,path="controller_manager_config.yaml")
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-j4v54 (ro)
  kube-rbac-proxy:
    Container ID:  containerd://4433e4098a0d4e909cef53f2337149203cf8fd5c88b38c032f42648087b917be
    Image:         gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0
    Image ID:      gcr.io/kubebuilder/kube-rbac-proxy@sha256:db06cc4c084dd0253134f156dddaaf53ef1c3fb3cc809e5d81711baa4029ea4c
    Port:          8443/TCP
    Host Port:     0/TCP
    Args:
      --secure-listen-address=<IP_ADDRESS>:8443
      --upstream=http://<IP_ADDRESS>:8080/
      --logtostderr=true
      --v=10
    State:          Running
      Started:      Tue, 01 Mar 2022 19:26:58 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-j4v54 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  manager-config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      tor-controller-manager-config
    Optional:  false
  kube-api-access-j4v54:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                 From               Message
  ----     ------     ----                ----               -------
  Normal   Scheduled  8m14s               default-scheduler  Successfully assigned tor-controller/tor-controller-5bc7b4cb7c-57r84 to ---
  Normal   Pulling    8m10s               kubelet            Pulling image "quay.io/bugfest/tor-controller:0.3.2"
  Normal   Pulled     86s                 kubelet            Successfully pulled image "quay.io/bugfest/tor-controller:0.3.2" in 6m43.446730978s
  Normal   Pulled     80s                 kubelet            Container image "gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0" already present on machine
  Normal   Created    79s                 kubelet            Created container kube-rbac-proxy
  Normal   Started    79s                 kubelet            Started container kube-rbac-proxy
  Normal   Pulled     28s (x3 over 78s)   kubelet            Container image "quay.io/bugfest/tor-controller:0.3.2" already present on machine
  Normal   Created    28s (x4 over 80s)   kubelet            Created container manager
  Normal   Started    27s (x4 over 80s)   kubelet            Started container manager
  Warning  BackOff    15s (x10 over 75s)  kubelet            Back-off restarting failed container

Hi @carronmedia, I don't own myself an ARM64 device but I've managed to reproduce the issue using a visrtualized one using QEMU. Somehow the containers tagged as arm64 are shipping x64-64 binaries; Going to revisit the CI actions/logs to see If I can spot the issue.

OK thank you very much, please let me know if I can help out by testing anything. Cheers

Hi @carronmedia, just pushed a new set of images tagged as 0.5.0-bug11 to (really) support arm64. I checked they don't generate the exec format error anymore. Can you double check in your env?
helm upgrade --install \
        --set image.tag=0.5.0-bug11 \
        --set manager.image.tag=0.5.0-bug11 \
        --set onionbalance.image.tag=0.5.0-bug11 \
        tor-controller bugfest/tor-controller

latest (current: 0aec224885f57aa4f36d0e2aa2524c24b237c6f5545bb431bd29f016a868adea):
localhost:~# podman run --rm -ti quay.io/bugfest/tor-controller:latest --help
Your kernel does not support pids limit capabilities or the cgroup is not mounted. PIDs limit discarded.
WARN[0006] Failed to add conmon to cgroupfs sandbox cgroup: open /sys/fs/cgroup/cpuset/libpod_parent/conmon/cpuset.cpus: open /sys/fs/cgroup/cpuset/libpod_parent/conmon/cpuset.cpus: no such file or directory
{"msg":"exec container process `/manager`: Exec format error","level":"error","time":"2022-03-02T20:11:02.000360830Z"}

0.5.0-bug11
localhost:~# podman run --rm -ti quay.io/bugfest/tor-controller:0.5.0-bug11 --he
lp
Trying to pull quay.io/bugfest/tor-controller:0.5.0-bug11...
Getting image source signatures
…
…
…
Writing manifest to image destination
Storing signatures
Your kernel does not support pids limit capabilities or the cgroup is not mounted. PIDs limit discarded.
Usage of /manager:
  -config string
        The controller will load its initial configuration from this file. Omit this flag to use the default configuration values. Command-line flags override configuration from this file.
  -kubeconfig string
        Paths to a kubeconfig. Only required if out-of-cluster.
  -no-leader-elect
        Disable leader election for controller manager.
  -zap-devel
        Development Mode defaults(encoder=consoleEncoder,logLevel=Debug,stackTraceLevel=Warn). Production Mode defaults(encoder=jsonEncoder,logLevel=Info,stackTraceLevel=Error) (default true)
  -zap-encoder value
        Zap log encoding (one of 'json' or 'console')
  -zap-log-level value
        Zap Level to configure the verbosity of logging. Can be one of 'debug', 'info', 'error', or any integer value > 0 which corresponds to custom debug levels of increasing verbosity
  -zap-stacktrace-level value
        Zap Level at and above which stacktraces are captured (one of 'info', 'error', 'panic').
  -zap-time-encoding value
        Zap time encoding (one of 'epoch', 'millis', 'nano', 'iso8601', 'rfc3339' or 'rfc3339nano'). Defaults to 'epoch'.

Looks like you fixed it! Thank you very much for sorting this out!
(one thing I did notice is that it was installed in the default namespace, I don't know if that is relevant to you?)
Here is the running pod:
Name:         tor-controller-f47cb9c88-vcklt
Namespace:    default
Priority:     0
Node:         ---
Start Time:   Wed, 02 Mar 2022 20:13:58 +0000
Labels:       app.kubernetes.io/instance=tor-controller
              app.kubernetes.io/name=tor-controller
              pod-template-hash=f47cb9c88
Annotations:  <none>
Status:       Running
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  ReplicaSet/tor-controller-f47cb9c88
Containers:
  manager:
    Container ID:  containerd://142fdca715801cbc7ee08f6f600e375dac83afc197d8dd56da75c7061688077f
    Image:         quay.io/bugfest/tor-controller:0.5.0-bug11
    Image ID:      quay.io/bugfest/tor-controller@sha256:ba7396190bcdda32fe5829bd327fb514dae8123b5a050e01b3bf81069c8e81f1
    Port:          <none>
    Host Port:     <none>
    Command:
      /manager
    Args:
      --config=controller_manager_config.yaml
    State:          Running
      Started:      Wed, 02 Mar 2022 20:18:08 +0000
    Ready:          True
    Restart Count:  0
    Liveness:       http-get http://:8081/healthz delay=15s timeout=1s period=20s #success=1 #failure=3
    Readiness:      http-get http://:8081/readyz delay=5s timeout=1s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /controller_manager_config.yaml from manager-config (rw,path="controller_manager_config.yaml")
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-pqdld (ro)
  kube-rbac-proxy:
    Container ID:  containerd://950b328daf0ae090c53d3c309aecb10b5a72c0ee5833edb8b401a00590d7fb75
    Image:         gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0
    Image ID:      gcr.io/kubebuilder/kube-rbac-proxy@sha256:db06cc4c084dd0253134f156dddaaf53ef1c3fb3cc809e5d81711baa4029ea4c
    Port:          8443/TCP
    Host Port:     0/TCP
    Args:
      --secure-listen-address=<IP_ADDRESS>:8443
      --upstream=http://<IP_ADDRESS>:8080/
      --logtostderr=true
      --v=10
    State:          Running
      Started:      Wed, 02 Mar 2022 20:18:18 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-pqdld (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  manager-config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      tor-controller-manager-config
    Optional:  false
  kube-api-access-pqdld:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age    From               Message
  ----     ------       ----   ----               -------
  Normal   Scheduled    5m50s  default-scheduler  Successfully assigned default/tor-controller-f47cb9c88-vcklt to ---
  Warning  FailedMount  5m49s  kubelet            MountVolume.SetUp failed for volume "manager-config" : failed to sync configmap cache: timed out waiting for the condition
  Normal   Pulling      5m44s  kubelet            Pulling image "quay.io/bugfest/tor-controller:0.5.0-bug11"
  Normal   Pulled       104s   kubelet            Successfully pulled image "quay.io/bugfest/tor-controller:0.5.0-bug11" in 4m0.821158374s
  Normal   Created      102s   kubelet            Created container manager
  Normal   Started      101s   kubelet            Started container manager
  Normal   Pulled       101s   kubelet            Container image "gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0" already present on machine
  Normal   Created      96s    kubelet            Created container kube-rbac-proxy
  Normal   Started      90s    kubelet            Started container kube-rbac-proxy
  Warning  Unhealthy    90s    kubelet            Readiness probe failed: Get "http://<IP_ADDRESS>:8081/readyz": dial tcp <IP_ADDRESS>:8081: connect: connection refused

Great :D
With re the namespace: It's ok. The instructions I posted in my last comment didn't include the --namespace option.
With re the onion hostname:  It might take some seconds to get updated. The tor container needs to boostrap. Can you check again in a minute or two? If it's still empty, attach the logs from the tor-daemon-manager pod containers
Thanks for using my project btw ^^

Can you make sure you don't have two tor-controllers installed?

Yeah it looks like I have just the one tor-controller. When I run kubectl get all --all-namespaces, I can see just the one tor-controller service and pod.

Ok. I just pushed the new images. Let's start fresh. Please uninstall your current chart and install again. Then, check if the manager container is restarting.

Thanks @carronmedia, you're welcome!

re: https://github.com/bugfest/tor-controller/issues/11#issuecomment-1058380960, echoserver image fixed in #12


Error compiling fragment (GPU)

Hi @hiukim while i was testing your example https://hiukim.github.io/mind-ar-js/samples/example1.html i receive this error:
gpu-browser.js:14991 Uncaught (in promise) Error: Error compiling fragment shader: Fragment shader compilation failed.
ERROR: 0:2: '' :  integer constant overflow
ERROR: 0:67: '' :  integer constant overflow
ERROR: 2 compilation errors.  No code generated.

�
    at WebGLKernel.build (gpu-browser.js:14991)
    at WebGLKernel.run (gpu-browser.js:18496)
    at shortcut (gpu-browser.js:18516)
    at Tracker._combineImageList (tracker.js:334)
    at new Tracker (tracker.js:38)
    at eval (controller.js:84)

of course nothing can be tracked or displayed...
Maybe my Android device is not supported? i tested with a Wiko View with Android 7.1.2 but i will test with another device.
EDIT: tested on Chrome browser 86.04240.110

Whenever you see "WebGLKernel", it's from the underlying gpu.js. I have experienced different behaviours in different devices with this library. I have tested with all my available devices and fixed a lot of things. Unfortunately, it's really hard to debug without the actual devices.

@hiukim Whenever you see "WebGLKernel", it's from the underlying gpu.js. i supposed this. Probably this is caused because my device (it is an Adreno CPU) does not support high precision float? I will investigate this.

@kalwalt  thx a lot.
Please noted that I'm using a custom branch of gpu.js instead of their current master. They are basically the same, but have one line difference here:    https://github.com/hiukim/gpu.js/blob/1ab9497dfd05fdc9e62ea599adc6efb51abedbcd/src/backend/gl/kernel.js#L33
It's to temporarily suppress an issue found in ios: https://github.com/gpujs/gpu.js/issues/632

ok understood, look this is the device specipication: https://www.devicespecifications.com/en/model-cpu/fa444577

I guess you can try running the gpu.js examples with your devices and see if they works first.
gpu.js basically translate the js code into shader programs in webgl and reformat the result back. My experience is that most of the issues come from the js code failed to translate or the translated shader programs run differently in different devices.
The proper fix is probably figuring out what's wrong and fixing the gpu.js. That's the final move and can fix anything, but hard to do.
Sometimes I just do trial and error and see which lines of js code caused the problem, and rewrite it in some other ways hopefully to bypass the problems.

I guess you can try running the gpu.js examples with your devices and see if they works first.
gpu.js basically translate the js code into shader programs in webgl and reformat the result back. My experience is that most of the issues come from the js code failed to translate or the translated shader programs run differently in different devices.
The proper fix is probably figuring out what's wrong and fixing the gpu.js. That's the final move and can fix anything, but hard to do.
Sometimes I just do trial and error and see which lines of js code caused the problem, and rewrite it in some other ways hopefully to bypass the problems.

If i have time i will try the gpu.js examples, just to understand which code run or not. I had also to debug the error, i will try when i have a bit of time. Thank you for the answer and support! :smile:

no problem. whenever you have time. Feel free to let me know if you encountered any troubles.

same here, doesnt work on android 10 samsung s10e

@subjectdenied which error do you receive?
@hiukim i tried the gpu.js examples and i got the same result, i have the suspect that my Gpu is not supported.
GPU: Adreno (TM) 308 with OpenGLES 3.0

it hangs at the "loading" for an example in example2, the error is about "precission missing"
Uncaught (in promise) Error: precision missing
at lookupKernelValueType (webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:13365)
at Function.lookupKernelValueType (webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:14602)
at WebGLKernel.setupConstants (webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:14908)
at WebGLKernel.build (webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:14944)
at WebGLKernel.run (webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:18496)
at Detector.shortcut [as inputKernel] (webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:18516)
at Detector.detect (webpack:///./src/image-target/detectorGPU/detector.js?:149)
at Controller.dummyRun (webpack:///./src/controller.js?:100)
at NewSystem._startAR (webpack:///./src/aframe.js?:147)`
`

@subjectdenied Can you try some examples from gpu.js? https://gpu.rocks/#/examples

i tried some, they seem to work fine, with the exception of "video convolution", where the first canvas shows only black on my phone. however there is no error in the console

I don't really have much idea now. Most of the time when it involves gpu.js, I need to tweak the code line of by line and see what triggers the error.

Testing in firefox. It doesn't works but i receive a bit different message:
unreachable code after return statement
mindar.prod.js:9077:4
Use of the motion sensor is deprecated. mindar.prod.js line 547 > eval:65126:11
Use of the orientation sensor is deprecated. mindar.prod.js line 547 > eval:85127:11
video ready...
<video autoplay="" muted="" playsinline="" style="position: absolute; top:…0.667px; height: 518px;" width="640" height="480">
aframe.js:71:17
unreachable code after return statement
mindar.prod.js line 558 > eval:9077:4
WebGL warning: drawArraysInstanced: Drawing to a destination rect smaller than the viewport rect. (This warning will only be given once) mindar.prod.js line 558 > eval:15136:8
Uncaught (in promise) Error: Error compiling fragment shader: Fragment shader compilation failed.
ERROR: 0:2: '' :  integer constant overflow
ERROR: 1 compilation errors.  No code generated.

    build webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:14991
    run webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:18496
    shortcut webpack:///./node_modules/gpu.js/dist/gpu-browser.js?:18516
    detect webpack:///./src/image-target/detectorGPU/detector.js?:149
    dummyRun webpack:///./src/controller.js?:100
    Aframe 40
mindar.prod.js line 558 > eval:14991:13
Errore mapping di origine: Error: NetworkError when attempting to fetch resource.
URL risorsa: webpack:///./node_modules/aframe/dist/aframe-master.js?
URL mapping di origine: aframe-master.js.map

@subjectdenied @kalwalt
I have just finished a big revamp, removing GPU.js completely. Hopefully it will solve a lot of these problems.
If you guys could try the example again with your devices (whatever devices you have, haha), that would be nice!
https://hiukim.github.io/mind-ar-js/samples/example1.html

@subjectdenied @kalwalt
I have just finished a big revamp, removing GPU.js completely. Hopefully it will solve a lot of these problems.
If you guys could try the example again with your devices (whatever devices you have, haha), that would be nice!
https://hiukim.github.io/mind-ar-js/samples/example1.html

Dejar @hiukim i will try for sure! 🙂🎉😉

Dejar @hiukim i will try for sure! 🙂🎉😉

I tested the new version but i got an error see #10.

I tested the new version but i got an error see #10.


IndexError: list index out of range

Thanks for the code! The bot works fine for ~30s, then i always get the error:
Python: Traceback (most recent call last):

Python:   File "./pokecli.py", line 494, in <module>
    main()
  File "./pokecli.py", line 70, in main
    bot.tick()
  File "/Users/myuser/github/PokemonGo/PokemonGo-Bot-Desktop/gofbot/pokemongo_bot/__init__.py", line 85, in tick

Python:     if worker.work() == WorkerResult.RUNNING:
  File "/Users/myuser/github/PokemonGo/PokemonGo-Bot-Desktop/gofbot/pokemongo_bot/cell_workers/follow_spiral.py", line 56, in work

Python:     point = self.points[self.ptr]
IndexError: list index out of range

Is there any solution to this? Do i have to change a config file or the walking speed etc.?
I use OSX 10.10.5, all brew and pip packages are updated (also got no errors while installing).

This is a bug when you don't set the step limit. Creating the spiral doesn't seem to take into account the default step limit.
Make sure you set a step limit (5 for example) and it should work.

thanks, it worked!


404 page issue

What I'm trying to achieve
…
I want 404 page when page not found
Steps to reproduce the problem

when i make debug=False give Server Error 500
when i enter wrong url give default django error

What I expected to happen
… i want same functionality like https://demo.getsaleor.com/en/ return on page not found
Screenshots

System information
Operating system:
Browser:

I cannot reproduce it. Could you give us some more details and the error stack trace?

Static files are served by Django only in DEBUG mode, for production use is recommended to serve them from the external resource, eg. Amazon S3 buckets. We have integration guide for it somewhere in the docs

Closing for now, please reopen if you have further questions.


Styled export no longer works for adopters

We recently updated our styled imports: https://github.com/cengage/react-magma/commit/c1ef7d0cb94b1068d0b5fe237b901a6bba839a66 as a result of failing builds. This works fine internally within Magma, but our consumers are also expecting to import styled from our package and that no longer works.
This can be tested by reverting this PR: https://github.com/cengage/react-magma/pull/1313 and also confirming on CodeSandbox that styled can be imported from react-magma-dom.
Notes:

See https://github.com/cengage/react-magma/blob/dev/packages/react-magma-dom/src/theme/styled.ts

Confirmed:

Every component looks as expected on the docs site ✅
When trying to import styled from react-magma-dom in CodeSandbox, I can style components as expected ✅


"Could not find update information in the AppImage" despite it being there

me@host:~$ Downloads/linuxdeployqt-continuous-x86_64.AppImage --appimage-updateinformation
gh-releases-zsync|probonopd|linuxdeployqt|latest|linuxdeployqt-_*-x86_64.AppImage.zsync
me@host:~$ Downloads/AppImageUpdate-x86_64.AppImage Downloads/linuxdeployqt-continuous-x86_64.AppImage
AppImageUpdate version 1-alpha (commit 513949c), build 108 built on 2017-11-04 00:22:04 UTC
Checking for updates...
Could not find update information in the AppImage! Please contact the author to embed update information!

Can reproduce this with the latest linuxdeployqt build.
According to objdump, the update information is embedded at position 0x16af7 (= 92919), with a length of 0x400 (= 1024).
27 .upd_info     00000400<PHONE_NUMBER>000000<PHONE_NUMBER>000000  00016af7  2**0

AppImageUpdate reads those values correctly from a call to objdump.
The commands
dd if=linuxdeployqt-continuous-x86_64.AppImage skip=92919 bs=1 count=1024
dd if=linuxdeployqt-continuous-x86_64.AppImage skip=92919 bs=1 count=1024 | wc -c

confirm AppImageUpdate's calculation, there's 1024 \0 characters at this position.
So, I wouldn't blame AppImageUpdate here, as its calculations seem to be correct. I'd suspect the issue to be inside code appimagetool and the AppImage runtime share.

Can reproduce this with the latest linuxdeployqt build.

The latest build indeed lost the updateinformation probably caused by https://github.com/AppImage/AppImageKit/commit/487771b244892c8eed88326e037ba819041b46f4
Once that is fixed, let's check again.

I don't enjoy it, but I told you that this is a bit too automagic. We should think about reverting those changes, I guess. Things are broken, and you always underline that if something breaks the functionality, it should be reverted immediately.

P.S.: You should add those new features to the appimagetool test script to make sure things work as intended. This is the perfect example.

Already reverted the suspected offending commit in https://github.com/AppImage/AppImageKit/commit/d8f298fc38cab585166fca09f6fe2658bbce36d7

I don't enjoy it, but I told you that this is a bit too automagic. We should think about reverting those changes, I guess. Things are broken, and you always underline that if something breaks the functionality, it should be reverted immediately.

That should be addressed by https://github.com/AppImage/AppImageKit/commit/ad47057ba7e228f7d68d016e3fe9379190de5c9b

Issue persists:
wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
chmod +x linuxdeployqt-continuous-x86_64.AppImage
./linuxdeployqt-continuous-x86_64.AppImage --appimage-version
Version: continuous-1-gad47057
./linuxdeployqt-continuous-x86_64.AppImage --appimage-updateinformation
gh-releases-zsync|probonopd|linuxdeployqt|latest|linuxdeployqt-_*-x86_64.AppImage.zsync
wget https://github.com/AppImage/AppImageUpdate/releases/download/continuous/AppImageUpdate-x86_64.AppImage
chmod +x AppImageUpdate-x86_64.AppImage
./AppImageUpdate-x86_64.AppImage ./linuxdeployqt-continuous-x86_64.AppImage
AppImageUpdate version 1-alpha (commit 513949c), build 108 built on 2017-11-04 00:22:04 UTC
Checking for updates...
Could not find update information in the AppImage! Please contact the author to embed update information!

Can't reproduce locally any more with the latest linuxdeployqt. Before, there was no actual update information embedded.
However, the latest release build seems to still produce the error. I've pushed an adjustment to the code recently (allocating the memory for the update information string with the right size instead of hardcoding 2kB) which isn't directly related to the issue as linuxdeployqt's update information isn't that large. I can only suspect that the build is broken.

Please test with the build artefacts on GitHub Releases and my bash commands above, thanks.

> build/appimageupdatetool -d linuxdeployqt-continuous-x86_64.AppImage
Parsing file: linuxdeployqt-continuous-x86_64.AppImage
AppImage type: 2
Raw update information: gh-releases-zsync|probonopd|linuxdeployqt|continuous|linuxdeployqt*-x86_64.AppImage.zsync
Update information type: ZSync via GitHub Releases
Assembled ZSync URL: https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage.zsync

Seems to work. Update check works fine, too:
Checking for updates...
Fetching release information for tag "continuous" from GitHub API.
... done!
Update not required, exiting.


Questions about contributions.

So, to keep contributing, should it be done here or at the original shap. Are you guys maintainers with write access there now ?
Thx for the good work.

Hi @adnene-guessoum , thank you for your interest. Future contributions can now be raised back at the main repo. You may read https://github.com/slundberg/shap/discussions/2942 for more info.
In short, we have write/push access to slundberg/shap so we can review/merge your PRs there directly; but we're also discussing with slundberg to set up a shap organization, so we can better collaborate as a community together.

@thatlittleboy is right. Please direct any future contributions to slundberg/shap. Thank you for your help with this fork!


Add support for auth parameter

python-requests supports passing an auth object, example:
r = request(method, url, auth=("user", "password"))

It detects basic authentication and builds the Basic {b64encoded} Authentication header for you
It would be nice if mureq also supported this, to more easily replace requests in scripts that make use of auth

Thanks for the suggestion. I'll consider it, but I'm thinking I probably won't do this:

It's fairly easy for clients to build the Authorization header themselves in this case.
mureq cannot support the fully general use case of the auth parameter (an arbitrarily callable that mutates the requests.Request object), since it has no analogue of the requests.Requests class.

Understandable, thanks