Accessing user agent string, HTTP request

I have developed a Bokeh app, hosted on Heroku. The app is viewable here:
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker

The plots can really only be viewed on a desktop screen, and do not render well on a mobile device.

I am currently developing a much simpler style of the plots for mobile view, which will look something like this (still under development):

https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile

I am currently controlling the style of the plots using the arguments available with args = curdoc().session_context.request.arguments.

However, it would be great to access the user agent string, detect whether or not the user is on a mobile device, and then define my style parameters accordingly.

The docs for Accessing the HTTP Request make it look like this is not possible.

Has this changed, or is there any way to implement this??

Any advice on how to best access the user agent string would be much appreciated.

–Patrick

Hi,

There is an open issue and discussion about ways to extend this:

  How to keep state in bokeh server across more than one worker · Issue #7091 · bokeh/bokeh · GitHub

Basically my proposal is to add a "hook" that would let users do whatever they want (i.e. save to a file or database) to store things like additional request information that could be loaded later by a session. Given the unavoidable problems with non-sticky sessions and load balancers, etc., I think providing hooks for *users* to define their own policies appropriate to their specific situation is the best we can do.

Please chime in their if you have thoughts or would be interested in helping to contribute this feature, with some guidance.

In the mean time I don't have an great suggestions. The Bokeh server is a collection of tornado views so it would be possible to extend the current views with something like this and assembled them in to a "custom" bokeh server but that's a somewhat advanced proposition.

Thanks,

Bryan

···

On Nov 6, 2017, at 13:36, Patrick Wright <[email protected]> wrote:

I have developed a Bokeh app, hosted on Heroku. The app is viewable here:
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker

The plots can really only be viewed on a desktop screen, and do not render well on a mobile device.
I am currently developing a much simpler style of the plots for mobile view, which will look something like this (still under development):
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile

I am currently controlling the style of the plots using the arguments available with `args = curdoc().session_context.request.arguments`.

However, it would be great to access the user agent string, detect whether or not the user is on a mobile device, and then define my style parameters accordingly.

The docs for Accessing the HTTP Request make it look like this is not possible.
Has this changed, or is there any way to implement this??

Any advice on how to best access the user agent string would be much appreciated.
--Patrick

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/926ebbfd-0742-43a4-bd75-19889b85b4f6%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

Also that app is really cool, thanks for sharing!

Bryan

···

On Nov 6, 2017, at 14:03, Bryan Van de ven <[email protected]> wrote:

Hi,

There is an open issue and discussion about ways to extend this:

  How to keep state in bokeh server across more than one worker · Issue #7091 · bokeh/bokeh · GitHub

Basically my proposal is to add a "hook" that would let users do whatever they want (i.e. save to a file or database) to store things like additional request information that could be loaded later by a session. Given the unavoidable problems with non-sticky sessions and load balancers, etc., I think providing hooks for *users* to define their own policies appropriate to their specific situation is the best we can do.

Please chime in their if you have thoughts or would be interested in helping to contribute this feature, with some guidance.

In the mean time I don't have an great suggestions. The Bokeh server is a collection of tornado views so it would be possible to extend the current views with something like this and assembled them in to a "custom" bokeh server but that's a somewhat advanced proposition.

Thanks,

Bryan

On Nov 6, 2017, at 13:36, Patrick Wright <[email protected]> wrote:

I have developed a Bokeh app, hosted on Heroku. The app is viewable here:
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker

The plots can really only be viewed on a desktop screen, and do not render well on a mobile device.
I am currently developing a much simpler style of the plots for mobile view, which will look something like this (still under development):
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile

I am currently controlling the style of the plots using the arguments available with `args = curdoc().session_context.request.arguments`.

However, it would be great to access the user agent string, detect whether or not the user is on a mobile device, and then define my style parameters accordingly.

The docs for Accessing the HTTP Request make it look like this is not possible.
Has this changed, or is there any way to implement this??

Any advice on how to best access the user agent string would be much appreciated.
--Patrick

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/926ebbfd-0742-43a4-bd75-19889b85b4f6%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

Bryan,
Thanks much for your reply.

I found a solution using some javascript which parses the user agent string. Including the .js file and some simple logic at the top of my index.html file, users are redirected accordingly to the desktop or the mobile site.

If any other Bokeh users run into a similar issue, I’d be happy to share this.

Thanks,

–Patrick

···

On Monday, November 6, 2017 at 1:03:57 PM UTC-7, Bryan Van de ven wrote:

Also that app is really cool, thanks for sharing!

Bryan

On Nov 6, 2017, at 14:03, Bryan Van de ven [email protected] wrote:

Hi,

There is an open issue and discussion about ways to extend this:

    [https://github.com/bokeh/bokeh/issues/7091](https://github.com/bokeh/bokeh/issues/7091)

Basically my proposal is to add a “hook” that would let users do whatever they want (i.e. save to a file or database) to store things like additional request information that could be loaded later by a session. Given the unavoidable problems with non-sticky sessions and load balancers, etc., I think providing hooks for users to define their own policies appropriate to their specific situation is the best we can do.

Please chime in their if you have thoughts or would be interested in helping to contribute this feature, with some guidance.

In the mean time I don’t have an great suggestions. The Bokeh server is a collection of tornado views so it would be possible to extend the current views with something like this and assembled them in to a “custom” bokeh server but that’s a somewhat advanced proposition.

Thanks,

Bryan

On Nov 6, 2017, at 13:36, Patrick Wright [email protected] wrote:

I have developed a Bokeh app, hosted on Heroku. The app is viewable here:

https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker

The plots can really only be viewed on a desktop screen, and do not render well on a mobile device.

I am currently developing a much simpler style of the plots for mobile view, which will look something like this (still under development):

https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile

I am currently controlling the style of the plots using the arguments available with args = curdoc().session_context.request.arguments.

However, it would be great to access the user agent string, detect whether or not the user is on a mobile device, and then define my style parameters accordingly.

The docs for Accessing the HTTP Request make it look like this is not possible.

Has this changed, or is there any way to implement this??

Any advice on how to best access the user agent string would be much appreciated.

–Patrick


You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/926ebbfd-0742-43a4-bd75-19889b85b4f6%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

Hi,

I am sure if you could stick some example code in a gist or similar, and post the link here, it would be helpful and appreciated to someone in the future.

Thanks,

Bryan

···

On Nov 7, 2017, at 13:42, Patrick Wright <[email protected]> wrote:

Bryan,
Thanks much for your reply.
I found a solution using some javascript which parses the user agent string. Including the .js file and some simple logic at the top of my index.html file, users are redirected accordingly to the desktop or the mobile site.

If any other Bokeh users run into a similar issue, I'd be happy to share this.
Thanks,
--Patrick

On Monday, November 6, 2017 at 1:03:57 PM UTC-7, Bryan Van de ven wrote:
Also that app is really cool, thanks for sharing!

Bryan

> On Nov 6, 2017, at 14:03, Bryan Van de ven <[email protected]> wrote:
>
> Hi,
>
> There is an open issue and discussion about ways to extend this:
>
> How to keep state in bokeh server across more than one worker · Issue #7091 · bokeh/bokeh · GitHub
>
> Basically my proposal is to add a "hook" that would let users do whatever they want (i.e. save to a file or database) to store things like additional request information that could be loaded later by a session. Given the unavoidable problems with non-sticky sessions and load balancers, etc., I think providing hooks for *users* to define their own policies appropriate to their specific situation is the best we can do.
>
> Please chime in their if you have thoughts or would be interested in helping to contribute this feature, with some guidance.
>
> In the mean time I don't have an great suggestions. The Bokeh server is a collection of tornado views so it would be possible to extend the current views with something like this and assembled them in to a "custom" bokeh server but that's a somewhat advanced proposition.
>
> Thanks,
>
> Bryan
>
>> On Nov 6, 2017, at 13:36, Patrick Wright <[email protected]> wrote:
>>
>> I have developed a Bokeh app, hosted on Heroku. The app is viewable here:
>> https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker
>>
>> The plots can really only be viewed on a desktop screen, and do not render well on a mobile device.
>> I am currently developing a much simpler style of the plots for mobile view, which will look something like this (still under development):
>> https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile
>>
>> I am currently controlling the style of the plots using the arguments available with `args = curdoc().session_context.request.arguments`.
>>
>> However, it would be great to access the user agent string, detect whether or not the user is on a mobile device, and then define my style parameters accordingly.
>>
>> The docs for Accessing the HTTP Request make it look like this is not possible.
>> Has this changed, or is there any way to implement this??
>>
>> Any advice on how to best access the user agent string would be much appreciated.
>> --Patrick
>>
>>
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
>> To post to this group, send email to bo...@continuum.io.
>> To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/926ebbfd-0742-43a4-bd75-19889b85b4f6%40continuum.io\.
>> For more options, visit https://groups.google.com/a/continuum.io/d/optout\.
>

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/4f27b507-60fb-4976-8696-533d6078e29e%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

Using commonly available javascript code for detecting mobile browsers by parsing the user agent string, I simply put the following at the top of my index.html file:

{% if not display_style|string() == “snowpacktracker-mobile” %}

{% endif %}

I have a file named ‘detectmobilebrowser.js’ that is placed in the ‘static’ directory (using Bokeh’s directory format).

The file looks like this:

var isMobileBrowser = function () {

var a = navigator.userAgent||navigator.vendor||window.opera;

return (/(android|bb\d+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| ||a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(a.substr(0,4)));

}

Hope that helps anyone else with this issue!

···

On Tuesday, November 7, 2017 at 3:23:29 PM UTC-7, Bryan Van de ven wrote:

Hi,

I am sure if you could stick some example code in a gist or similar, and post the link here, it would be helpful and appreciated to someone in the future.

Thanks,

Bryan

On Nov 7, 2017, at 13:42, Patrick Wright [email protected] wrote:

Bryan,

Thanks much for your reply.

I found a solution using some javascript which parses the user agent string. Including the .js file and some simple logic at the top of my index.html file, users are redirected accordingly to the desktop or the mobile site.

If any other Bokeh users run into a similar issue, I’d be happy to share this.

Thanks,

–Patrick

On Monday, November 6, 2017 at 1:03:57 PM UTC-7, Bryan Van de ven wrote:

Also that app is really cool, thanks for sharing!

Bryan

On Nov 6, 2017, at 14:03, Bryan Van de ven [email protected] wrote:

Hi,

There is an open issue and discussion about ways to extend this:

    [https://github.com/bokeh/bokeh/issues/7091](https://github.com/bokeh/bokeh/issues/7091)

Basically my proposal is to add a “hook” that would let users do whatever they want (i.e. save to a file or database) to store things like additional request information that could be loaded later by a session. Given the unavoidable problems with non-sticky sessions and load balancers, etc., I think providing hooks for users to define their own policies appropriate to their specific situation is the best we can do.

Please chime in their if you have thoughts or would be interested in helping to contribute this feature, with some guidance.

In the mean time I don’t have an great suggestions. The Bokeh server is a collection of tornado views so it would be possible to extend the current views with something like this and assembled them in to a “custom” bokeh server but that’s a somewhat advanced proposition.

Thanks,

Bryan

On Nov 6, 2017, at 13:36, Patrick Wright [email protected] wrote:

I have developed a Bokeh app, hosted on Heroku. The app is viewable here:
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker

The plots can really only be viewed on a desktop screen, and do not render well on a mobile device.
I am currently developing a much simpler style of the plots for mobile view, which will look something like this (still under development):
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile

I am currently controlling the style of the plots using the arguments available with args = curdoc().session_context.request.arguments.

However, it would be great to access the user agent string, detect whether or not the user is on a mobile device, and then define my style parameters accordingly.

The docs for Accessing the HTTP Request make it look like this is not possible.
Has this changed, or is there any way to implement this??

Any advice on how to best access the user agent string would be much appreciated.
–Patrick


You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/926ebbfd-0742-43a4-bd75-19889b85b4f6%40continuum.io.
For more options, visit https://groups.google.com/a/continuum.io/d/optout.


You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/4f27b507-60fb-4976-8696-533d6078e29e%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.