jquery filter as well as returning expression that evaluated to true

Question: I'm using a jQuery search method with multiple || expressions, any one of which can return true in order to display the result. My goal is to retrieve which of the expressions actually evaluated to true:
return this.itemAry.filter(function(item){
   var that = this;
   return (
     item.name.toLowerCase().indexOf(that.search.toLowerCase())>=0 ||
     item.description.toLowerCase().indexOf(that.search.toLowerCase())>=0
   )
 });

So if the item.name piece evaluated to true, I'd like to not only filter results that return true, but to also know that it was item.name versus item.description that evaluated to true.
Edit with example:
In my itemAry I can have
{item1: {name: "foo", description: "bar"}, item2: {name:"baz", description:"bar"}}

So if I search "foo" - I'd like to not only return the item1 object, but to also let me know that it was this expression item.name.toLowerCase().indexOf(that.search.toLowerCase())>=0 that evaluated to true
Comment: Not sure what you mean by this: *I'd like to not only **filter results** that return true, but to **also** know that it was [propertyname]* - can you provide a use-case (ie some calling code and how you'd use the result).
Comment: So right now it acts as a basic filter where if any of the expressions evaluate to true, it returns the items in the array that match any of the expressions. I'd like to go one level deeper and show me which specific expression caused the results to evaluate to true, so out of the two options here, I'd like to know which option it was that made it true. Hope that makes sense
Answer: Truthfully, not possible without either changing the object (add a new key to object), or checking again by loop.
Logical operators just don't work that way.
To add a new key just add both to the object, as a simple && won't work(you would actually have use both AND and XOR).
Answer: One approach would be to store the field you found it in:
const searchResults = this.contractsAry
    .map(function(item) {
        return ({
            item: item,
            nameMatches: item.name.toLowerCase().indexOf(this.search.toLowerCase()) >= 0,
            descriptionMatches: item.description.toLowerCase().indexOf(this.search.toLowerCase()) >= 0
        })
    }.bind(this))
    .filter(function(item) {
        return item.nameMatches || item.descriptionMatches
    });

searchResults.forEach(function(result) {
    console.log(result.item, result.nameMatches, result.descriptionMatches)
})

Comment: I'm trying to get this one to work and I feel it's on the right path and console.log returns the correct results, but I can't seem to get it to return the correct set of filtered items
Comment: Edit: just got it to work this this:
    `return searchResults.map(function(result){
            return (result.item)
          });`
Thanks!!


shinydashboard: switch tab if sidebar item expands

Question: I am working on a shiny dashboard which has a sidebar with multiple menu items. One of the items is expandable. I want to switch tabs if a menu item is clicked. This works perfectly for menu items which are not expandable, but with the expandable one I have some troubles.
A workaround could be to place an actionlink inside the expandle menu and observe it. But what I want to do instead, is to switch the tab as soon as the collapsed menu is expanded. I tried to use input$sidebarItemExpand and shinydashboard::updateTabItem, but somehow nothing happens ... if somebody has an idea what went wrong, please let me know
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   UI ====
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

header <- shinydashboard::dashboardHeader()

sidebar <- shinydashboard::dashboardSidebar(
    shinydashboard::sidebarMenu(
        id="tabs",
        shinydashboard::menuItem(
            text="menu_expand",
            tabName="tab1",
            shiny::selectInput(
                inputId="sel_123",
                label="123",
                choices=c("A","B","C"),
                selected="A")),
        shinydashboard::menuItem(
            text="menu_item_normal1",
            tabName="tab2"),
        shinydashboard::menuItem(
            text="menu_item_normal2",
            tabName="tab3")))

body <- shinydashboard::dashboardBody(
    shinydashboard::tabItems(
        shinydashboard::tabItem(
            tabName = "tab1",
            shiny::h3("Tab 1")
        ),
        shinydashboard::tabItem(
            tabName = "tab2",
            shiny::h3("Tab 2")
        ),
        shinydashboard::tabItem(
            tabName = "tab3",
            shiny::h3("Tab 3"))))

ui <- shinydashboard::dashboardPage(header,sidebar,body)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   SERVER ====
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

server <- function(input,output,session){
    shiny::observeEvent(input$sidebarItemExpanded, {
        print(input$sidebarItemExpanded)
        if(input$sidebarItemExpanded == "menu_expand"){
            print("expanded")
            shinydashboard::updateTabItems(
                session=session,"tabs","tab1"
            )
        }
    })
}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#   LAUNCH APP ====
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

shiny::shinyApp(ui,server)

Answer: You need to place menutitem with tabName tab1 one level inside the expand-menu as you could have multiple tabs and submenuitems in there too.  Try this code.
sidebar <- shinydashboard::dashboardSidebar(
  shinydashboard::sidebarMenu(
    id="tabs",
    shinydashboard::menuItem(text="menu_expand", icon = icon("bar-chart-o"),
                              menuItem("menu_expanded", tabName = "tab1", icon = icon("bar-chart-o")),
      # text="menu_expand",
      # tabName="tab1",
      shiny::selectInput(
        inputId="sel_123",
        label="123",
        choices=c("A","B","C"),
        selected="A")),
    shinydashboard::menuItem(
      text="menu_item_normal1",
      tabName="tab2"),
    shinydashboard::menuItem(
      text="menu_item_normal2",
      tabName="tab3")))

Comment: works like a charm. for aesthetic reasons I set text and icon inside the main menu to blank, but apart from that, your solution is exactely what I was looking for. (and I learned to accept, that the shiny logic sometimes confueses me :D)
Comment: Hi! @sambold could you please share how to set text and icon to blank? I am struggling with a similar issue


Swift 3 - Create title bar constraints programmatically

Question: I am using Swift 3, iOS 10, XCode 8.2.
In my code, I need to create a UIViewController programmatically and hence, specify its layout and content programmatically as well.
@IBAction func testViewController() {

    let detailViewController = UIViewController()
    detailViewController.view.backgroundColor = UIColor.white

    let titleLabel: UILabel = {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints =  false
        label.backgroundColor = UIColor.blue
        label.text = "Scan Results"
        label.textAlignment = .center
        label.font = UIFont.boldSystemFont(ofSize: 18)
        label.textColor = UIColor.white
        return label
    }()

    let titleConstraints: [NSLayoutConstraint] = [
        NSLayoutConstraint(item: titleLabel, attribute: .left, relatedBy: .equal, toItem: self.view, attribute: .left, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: titleLabel, attribute: .right, relatedBy: .equal, toItem: self.view, attribute: .right, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: titleLabel, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: titleLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 40)
    ]

    detailViewController.view.addSubview(titleLabel)

    detailViewController.view.addConstraints(titleConstraints)

    self.navigationController?.pushViewController(detailViewController, animated: true)
}

In the vertical view (ignore all the other junk; just focus on the blue title bar):

But in the horizontal view:

What is the correct constraint to set so that it takes up the entire width of the bar and there isn't that extra space from the top since the status bar disappears when horizontal?
EDIT
After making @thexande suggestions, I do get an error:

[LayoutConstraints] The view hierarchy is not prepared for the
  constraint: <NSLayoutConstraint:0x608000098100
  UILabel:0x7fe35b60edc0'Scan Results'.left ==
  UIView:0x7fe35b405c20.left   (inactive)>     When added to a view, the
  constraint's items must be descendants of that view (or the view
  itself). This will crash if the constraint needs to be resolved before
  the view hierarchy is assembled. Break on
  -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] to debug. 2017-02-24 21:01:59.807 EOB-Reader[78109:10751346] * Assertion failure in
  -[UIView _layoutEngine_didAddLayoutConstraint:roundingAdjustment:mutuallyExclusiveConstraints:],
  /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/NSLayoutConstraint_UIKitAdditions.m:649
  2017-02-24 21:01:59.951 EOB-Reader[78109:10751346] * Terminating app
  due to uncaught exception 'NSInternalInconsistencyException', reason:
  'Impossible to set up layout with view hierarchy unprepared for
  constraint.'

I've also updated my code in the original post.
Answer: The reason this is happening is because you are using frames. You calculated the frame based on the width of the screen. You do not need frames, you can do this all using auto layout. Instead, you should use constraints to pin your label to it's super view bounds, and give it a static height. for example:
lazy var titleConstraints: [NSLayoutConstraint] = [
    NSLayoutConstraint(item: self.titleLabel, attribute: .left, relatedBy: .equal, toItem: self.view, attribute: .left, multiplier: 1, constant: 0),
    NSLayoutConstraint(item: self.titleLabel, attribute: .right, relatedBy: .equal, toItem: self.view, attribute: .right, multiplier: 1, constant: 0),
    NSLayoutConstraint(item: self.titleLabel, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0),
    NSLayoutConstraint(item: self.titleLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 40)
]

then, in viewDidLoad()
self.view.addConstraints(titleConstraints)

You could simplify your label declaration like so. dont forget the auto resizing mask flag to get constraints to work correctly:
let titleLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints =  false
    label.backgroundColor = UIColor.blue
    label.text = "Scan Results"
    label.textAlignment = .center
    label.textColor = UIColor.white
    return label
}()

Finally, you are doing strange math to get the top of your view controller to abut the bottom of your nav bar controller. Remove all that garbage and put the following in viewDidLoad() to get the top of your view controller right against the bottom of your UINavigationBar:
self.edgesForExtendedLayout = []

UPDATES:
The problem here is you are appending views and constraints into a View Controller which has not allocated yet.
The reason we append sub views and constraints within viewDidLoad() is because we cannot add subviews and constraints before the view....did....load into memory. Otherwise, it's not there, and you get the error above. Consider breaking out your detailViewController into a class declaration, like so:
class detailViewController: UIViewController {
let eobTitleLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints =  false
    label.backgroundColor = UIColor.blue
    label.text = "Scan Results"
    label.textAlignment = .center
    label.font = UIFont.boldSystemFont(ofSize: 18)
    label.textColor = UIColor.white
    return label
}()

    lazy var eobTitleConstraints: [NSLayoutConstraint] = [
       NSLayoutConstraint(item: self.eobTitleLabel, attribute: .left, relatedBy: .equal, toItem: self.view, attribute: .left, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: self.eobTitleLabel, attribute: .right, relatedBy: .equal, toItem: self.view, attribute: .right, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: self.eobTitleLabel, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: self.eobTitleLabel, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 40)
    ]

    override func viewDidLoad() {
        self.view.addSubview(eobTitleLabel)
        self.view.addConstraints(self.eobTitleConstraints)
    }
}

Also, not to come off as offensive, but your code is kind of a mess. Things you should avoid in the future:

adding constraints to a label which does not exist. ( rename the label of fix the constraints)
you are declaring vars in a outlet method. dont do this, declare methods and properties at the class level.
Read about OOP and how it is implemented in swift. This will help you understand the methods and patterns to complete your task :)
Comment: This is a great help.  Thank you.  I made your suggested changes but I get an error that I include in my edited original post.
Comment: Sorry for the hiatus.  I took your advice to extract it into a separate `ViewController` class which I then instantiated.  Thanks for all your help!


prove that for $G$ a multiplicative nonabelian group of order $pq$, where $p$ and $q$ are prime numbers, any proper subgroup of $G$ is abelian

Question: I need to prove that for $G$ a multiplicative nonabelian group of order $pq$, where $p$ and $q$ are prime numbers, any proper subgroup of $G$ is abelian. I use that, from Lagrange's theorem, the order of the proper subgroups must divide the order of the group and so the subgroups have the orders $p,q$. If $(p,q)=1$, then there exist $k,l\in\mathbb{Z}$ such that $pk+gl=1$ and so, for an $x$ of a subgroup of order $p$ we obtain $x=x^{lq}$ and similarly, for an $y$ of order $q$ $y=y^{pk}$. Also, $p|lq-1$ and $q|pk-1$. This are the only valuable information I obtained. How can I prove this?
Comment: You need just the first line.
Comment: Try to avoid unnecessary assumptions. You don't need to assume that the group $G$  is multiplicative, and you don't need to assume that it is nonabelian.
Answer: Hint: use Lagrange's Theorem, the order of a subgroup divides the order of the whole group. And, a group of prime order must be cyclic (also follows from Lagrange).
Answer: By Lagrange's theorem we can say that order of any proper subgroup of $G$ is either of order $p$ or of order $q.$ Since $p$ and $q$ are primes and we know that any group of prime order is cyclic so any proper subgroup of the group $G$ is cyclic and hence abelian.


Welcome email after user reset password in first time?

Question: When a new user signs up with the website the user receives an email with link to reset the password and when they reset the password first time, they get a welcome email but when in future they reset their password , they will not get that welcome email.How to resolve this.
Answer: You can do by using Login one time module

Rules:

[user:login-one-time] token on user events.
[comment:login-one-time] token for node author on comment event.

User profile - "Send login one time link" button.
VBO - Create a view and send login links to the view. Checkout View
  Reference for ideas on how to embed views.
Block - Select a user and send the link. You can use this block in
  nodes as a CCK field using Block Reference.
PHP - Print a button in a template or directly send the emails using
  the functions described in the README.
Answer: you can try Recovery Password module.

Drupal by default sends Password Reset URL by mail to user's email id
  in password recovery mail, but Recovery Password module makes it
  possible for Drupal to send any random generated password(new
  password) by email instead of URL to the user.
Comment: How to know user is first time user ?
Comment: I think by default it is 24 hours,if you increase the time period in will works.
Comment: But user will have option to reset password anytime.and i have to send welcome email after resetting password for first time.
Comment: Means issue is when user  reset the password they will not receive email right !
Comment: only first time recieve email .but when in future they reset their password , they will not get that email.
Comment: please update your question with this comment. so other user will easily understand and you will get best solution.
Comment: updated my answer you can try the new one.
Comment: Now i have updated. Do you have solution for my problem ?
Comment: check ''/admin/config/people/accounts'' section and try the module i have posted.
Answer: Another approach to answer this question is to use the Rules module, similar to what is described in either of these comments in the issue with title "Rule to redirect on login, except on one-time login and password reset":

comment # 34:

Event: User logged in.
Conditions:

Elements: Text comparison.
Parameter: Tekst: [site:current-page:path], Matching text: user, Comparison operation: ends with

comment #37

Event: User logged in.
Conditions:

Elements: NOT Text comparison.
Parameter: Text: [site:current-page:path], Matching text: ^user/reset/, Comparison operation: regular expression

Obviously, for either approach mentioned in these 2 comments, you'd have to add a Rules Action to actually send an appropriate eMail message also.
Note: If you're not familiar (enough/yet) with Rules, checkout the 32 (!!!) great, and free, video tutorials Learn the Rules framework.


Desenhando com CSS

Question: Existe alguma forma de desenhar uma folha como a imagem abaixo, usando o CSS ?
Comment: Eu utilizaria canvas ou melhor, svg e não ficaria sofrendo com css não rs
Comment: mas é porque eu quero aprender a fazer isso...
Comment: É extremamente complicado estilizar um elemento html do jeitinho que está a imagem, mas qual seria a utilidade de trabalhar com um elemento html estilizado ao contrário de uma imagem vetorial?
Comment: É mais pelo conhecimento mesmo
Answer: Pra auxiliar a montagem estou usando: http://www.cssmatic.com/box-shadow

div {
  background: rgba(119, 178, 0, 1);
  background: -moz-linear-gradient(left, rgba(119, 178, 0, 1) 0%, rgba(119, 178, 0, 1) 48%, rgba(85, 128, 0, 1) 50%, rgba(86, 128, 0, 1) 52%, rgba(120, 178, 0, 1) 55%, rgba(119, 178, 0, 1) 100%);
  background: -webkit-gradient(left top, right top, color-stop(0%, rgba(119, 178, 0, 1)), color-stop(48%, rgba(119, 178, 0, 1)), color-stop(50%, rgba(85, 128, 0, 1)), color-stop(52%, rgba(86, 128, 0, 1)), color-stop(55%, rgba(120, 178, 0, 1)), color-stop(100%, rgba(119, 178, 0, 1)));
  background: -webkit-linear-gradient(left, rgba(119, 178, 0, 1) 0%, rgba(119, 178, 0, 1) 48%, rgba(85, 128, 0, 1) 50%, rgba(86, 128, 0, 1) 52%, rgba(120, 178, 0, 1) 55%, rgba(119, 178, 0, 1) 100%);
  background: -o-linear-gradient(left, rgba(119, 178, 0, 1) 0%, rgba(119, 178, 0, 1) 48%, rgba(85, 128, 0, 1) 50%, rgba(86, 128, 0, 1) 52%, rgba(120, 178, 0, 1) 55%, rgba(119, 178, 0, 1) 100%);
  background: -ms-linear-gradient(left, rgba(119, 178, 0, 1) 0%, rgba(119, 178, 0, 1) 48%, rgba(85, 128, 0, 1) 50%, rgba(86, 128, 0, 1) 52%, rgba(120, 178, 0, 1) 55%, rgba(119, 178, 0, 1) 100%);
  background: linear-gradient(to right, rgba(119, 178, 0, 1) 0%, rgba(119, 178, 0, 1) 48%, rgba(85, 128, 0, 1) 50%, rgba(86, 128, 0, 1) 52%, rgba(120, 178, 0, 1) 55%, rgba(119, 178, 0, 1) 100%);
  filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#77b200', endColorstr='#77b200', GradientType=1);
  border-radius: 122px 122px 122px 122px;
  -moz-border-radius: 122px 122px 122px 122px;
  -webkit-border-radius: 122px 122px 122px 122px;
  border: 16px solid #ECEDEE;
  -webkit-box-shadow: 6px 0px 5px 0px rgba(0, 0, 0, 0.37);
  -moz-box-shadow: 6px 0px 5px 0px rgba(0, 0, 0, 0.37);
  box-shadow: 6px 0px 5px 0px rgba(0, 0, 0, 0.37);
  -ms-transform: rotate(60deg);
  /* IE 9 */
  -webkit-transform: rotate(60deg);
  /* Chrome, Safari, Opera */
  transform: rotate(60deg);
  height:256px;
  width:200px;
  position: absolute;
  top: 10%;
  left: 10%;
}

/*
div:before {
  content: "";
  display: block;
  position: absolute;
  border-radius: 100% 50%;
  border-style: groove hidden hidden hidden;
  border-color: #ff0000;
  width: 57%;
  height: 80px;
  background-color: white;
  right: 0px;
  top: 40px;
}

div:after {
  content: "";
  display: block;
  position: absolute;
  border-radius: 100% 50%;
  border-style: hidden hidden groove hidden;
  border-color: #ff0000;
  width: 50%;
  height: 70px;
  background-color: white;
  left: 0;
  top: 27px;
}
*/

Mas veja o quão é trabalhoso, e fica longe daquilo imaginado, se tornando meio inviável.

Depois tento terminar de "desenhar" usando somente css.

Criando o mesmo elemento utilizando svg:

1° Salvei sua imagem em uma pasta;
2° Joguei a imagem nessa ferramenta {Projeto no GitHub};
3° Configurei as propriedades para ficar do tamanho da imagem;
4° Cliquei em salvar a imagem.

Código fonte gerado:

<?xml version="1.0" ?>
<svg width="256" height="256" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

  <g>
    <title>Layer 1</title>
    <image xlink:href="data:image/png;base64,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"
    id="svg_1" height="256" width="256" y="-1" x="0" />
  </g>
</svg>
Answer: vc tem q usar o SVG
segue um ex no fiddle mais tutorial

<svg class="hello" width="230.3px" height="155.9px" viewBox="0 0 230.3 155.9">
    <path fill="none" stroke="#000000" stroke-miterlimit="10" d="M0.5,0.2c2.2,5.8,0.7,12,0.9,18.2C2,33.2,4.9,48.5,7,63.2
        c2.2,15.4,5.8,30.3,7.4,45.7c1.3,13.2,0.4,29.8,4.7,42c-0.3-16.9-3.1-48.5,19.5-49.6c21.2-1,11.1,25.8,23.1,37.2
        c28.4,27,66.2-29,34.8-38.2c-7.2,17.2-5.8,50.6,21.5,44.5c14.1-3.2,20.7-26.4,22.9-39.2c1.3-7.5,12.1-75.8,1-73.9
        c-12.1,2.1-15.8,45.5-16.3,54.4c-0.8,14.8,1.3,26.9,6.8,40.2c4.6,11,6.9,19.4,19.3,20.7c14.3,1.6,21.8-11.7,27.2-24
        c8.4-19.3,6.5-43,6.5-64c0-7.3-4.1-27-13-15.4c-4.3,5.6-4.1,23.6-4.4,30.7c-0.5,11.9-1.1,24.4,2.4,35.7c5,15.9,14.8,31.2,30.1,38.3
        c7.9,3.7,19.4,7.5,25.9-0.5c3.6-4.4,4.6-23.3,2.2-28.6c-5.5-12.5-25-10.9-29.4,1.6c-5.2,14.8,1.6,25.3,9,34.8"/>
</svg>

link para tutorial explicativo
https://willianjusten.com.br/efeito-de-desenhar-com-svg/
Comment: "vc tem q usar" acho errôneo afirmar, porém é o caminho menos sofrível.
Comment: fui muito imperativo nessa afirmação , mas acredito que seja a melhor solução mesmo.
Answer: Você tem que ir adaptando seu CSS para isso, olha esse exemplo default para folha:
HTML:

CSS:
.leaf {
  width: 100px; height: 100px;
  background-color: #A0DE21;
  -moz-border-radius: 100px 0px;
  -webkit-border-radius: 100px 0px;
  border-radius: 100px 0px;
}

Veja no JsFiddle
Nesse site, tem vários exemplos de animações feitas com CSS.
Tem esses outros sites também:

CssAnimate
EnjoyCSS
Tutorialspoint
Comment: Mas ainda acho que o menos sofrível seja criar um elemento svg ou canvas rs
Comment: http://codepen.io/katietanner/pen/PNjVeE
http://codepen.io/osublake/pen/gpGEye
Comment: @MarceloBonifazio, muito bom. Essa animação se encaixa melhor na pergunta =)
Comment: é menos 'sofrimento' usar um svg, mas aí é que está, eu não quero aprender a fazer as coisas possíveis, assim quem sabe um dia eu possa ajudar a todos criando bibliotecas mais completas, específicas para determinadas situações, e tantas outras coisas, sei que o SVG é mais fácil, mas de que adianta ficar só na parte fácil ?
Answer: Vc pode tentar "envergar" a div usando valores absurdos para cada um dos vértices com border-radius
A parte interna da folha vc pode fazer usando repeating-radial-gradient com ellipse e um box-shadow inset por cima para ajustar o sombreamento da cor.
Veja como fica:

div {
    margin-left:100px;
    width: 100px;
    height: 200px;
    border-top-left-radius: 1430%;
    border-top-right-radius: 210%;
    border-bottom-left-radius: 410%;
    border-bottom-right-radius: 1260%;
    background: repeating-radial-gradient(ellipse at top left, #85C500, #85C500 95px, #5D8A00 95px, #5D8A00 100px, #85C500 100px);
    border: 8px solid #ECEDEE;
    box-shadow: -1px 0px 8px 0px rgba(0, 0, 0, 0.5), inset 0 30px 30px 0 rgba(0, 0, 0, 0.2);
    transform: rotate(-135deg);
}

Desenhando com CSS


Just #< #5.0.0> #SMTP#

Question: I have a smart host in a MS server (remote.X.pt) with Exchange 2007, that is connected to a remote mail server (cpanel.ideiasfrescas.pt) and it is working fine. Right now i am unable to send some mails for certain email destinations, it seems that my remote mail server is not letting go those mails dont know well, with a Undeliverable message:

An error occurred while trying to deliver this message to the recipient's e-mail address. Microsoft Exchange will not try to redeliver this message for you. Please try resending this message, or provide the following diagnostic text to your system administrator.
<code>Diagnostic information for administrators:

Generating server: cpanel.ideiasfrescas.pt

#< #5.0.0> #SMTP#

Original message headers:

Return-Path: <email@example.com>
Received: from 195-23-X-174.static.net.novis.pt ([]:52706 helo=remote.X.pt)
        by cpanel.ideiasfrescas.pt with esmtpsa (TLSv1:AES128-SHA:128)
        (Exim 4.87)
        (envelope-from <email@example.com>)
        id 1cEaph-002kde-L9
        for <destination email>; Wed, 07 Dec 2016 11:56:22 +0000
Received: from X.gfe-sa.local ([fe80::2a2:e713:56d1:905a]) by
 X.gfe-sa.local ([fe80::2a2:e713:56d1:905a%18]) with mapi; Wed, 7 Dec
 2016 11:56:20 +0000
From: <email@example.com>
To:  <destination email>
CC:  <email@example.com>, Sales <email@example.com>
Date: Wed, 7 Dec 2016 11:56:21 +0000
Subject: RE: Rush Order
Thread-Topic: Rush Order
Thread-Index: AdJQTgn1c02dWI2hRkqBELMYBWQ9VAAMnFIA
Message-ID: <firstname.lastname@example.com>
References: <007801d2504e$0df532d0$29df9870$@com>
In-Reply-To: <007801d2504e$0df532d0$29df9870$@com>
Accept-Language: en-US, pt-PT
Content-Language: pt-PT
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
acceptlanguage: en-US, pt-PT
Content-Type: text/plain
MIME-Version: 1.0
X-Exim-DSN-Information: Due to administrative limits only headers are returned
</code>
Searching about this SMTP error i have found that:

SMTP 500 reply code means an unrecognised command.  You get this NDR
  when you make a typing mistake when you manually try to send email via
  telnet.  More likely, a routing group error, no routing connector, or
  no suitable address space in the connector.  (Try adding * in the
  address space) This status code is a general error message in Exchange
  2000.  In fact Microsoft introduced a service pack to make sure now get a more specific code.

But i cannot relate with this problem, since this is not a new user in the system, it was working fine till now.
I am able to send mails to outside domains through my remote mail server.
If you need more info or data just ask.
Anyone knows what is happening?
Comment: Why you send via a cpanel ? OWA exist on Exchange if it's a need for a remote connection, like squirrelmail.
Answer: Vendors do not stick to the SMTP error codes completely, so getting a 5.5.0 without any additional message is not going to help with diagnostics.
If you sending via this server as a smart host, the first thing I would do is a telnet test from the Exchange server to the remote server to see whether that shows any issue.
The most likely cause is external interference. AV scanning something it shouldn't be, firewall scanning SMTP traffic, something like that.
Comment: Thanks Sembee, after a while i notice that this problem was from my remote server, and not from my smart host.

Just #< #5.0.0> #SMTP#


eWam AppendObject fails to append object to the list

Question: I'm running a census load through web services to create a member contract including voluntary spouse coverage. The employee and employee coverage are created succesfully, but when the spouse person object is being created, the correspondence fails to get appended to the correspondence list.
eWam 184.108.40.206  wInterface 18.104.22.168

Method: CreateListOfActorCorrespondences
forEach curActorCorrespondence in ListOfCreatedCorrespondences using rank
   **thisActor.Correspondences.AppendObject(curActorCorrespondence)**
   if rank = DefaultCorrespondenceRank
      curActorCorrespondence.SetAsDefault
   endIf
endFor

The same method is called to create the employee, but when creating the spouse the curActorCorrespondence which is successfully created isn't appended to thisActor.Correspondences. What could be causing the difference in behavior in this code?
Answer: Look for errors
Start by searching the WSM error trace.
In this case the following error was found:

14/01/16 15:48:12            Process Id 4176 Thread Id 6440 Thread
  Index 1   Minor error        WLISTOF.CPP
  aListReftosType.ListInsert            is refused by the role:
  aWFCorrespondenceVersionedByDate Add =0000:0000:2380:2F00 NSId = 0 Id
  = 0 Version = 2147483647           Current Gold method:SLI_Actor._CreateListOfActorCorrespondences               #3

The issue is then clear, as aXXX_CorrespondenceVersionedByDate child class of aWFCorrespondenceVersionedByDate existed, but was not being created for the spouse. Further review of the class structure showed the class aSPLI_CreateOrUpdatePerson_In didn't have any children classes so it couldn't be a missing overriding/ child class causing the incorrect object to be created.
Make sure the XML nodes are representative of the class structure
Debug fillvarfromparam and Deserialize methods in classes generated by wInterface to finally find the issue with inconsistencies in the XML structure.
In this case:
Under employee tag:
<Correspondences xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:aXXX_Correspondance">

Under enrollment tag(where the failure was happening):
          <Correspondences xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:aXXX_Correspondance">
            <Element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Correct or Realign the XML
Moving the xsi:type attribute to the correct tag fixed the issue, allowing the correct correspondence list to be created and appended.


Laravel two similar routes, second route not found

Question: Laravel 5.8, I have two routes:
Route::get('/exam-info/{id}', 'ExamController@mainExamInfo')->name('main_exam_info');

Route::get('/exam/{id}', 'ExamController@startMainExam')->name('start_main_exam');

When I go to the second route it gives me "page not found" error! Why?
Update:
In ExamController my startMainExam function is:
public function startMainExam($exam_id){
        dd("sss");
        // other stuff
}

But  when I change the second route to:
Route::get('/exaxxxx/{id}', 'ExamController@startMainExam')->name('start_main_exam');

It works!!
Comment: Could you add the code of your ExamController class?
Comment: could you also provide the whole route script, and write the exact url you're requesting
Comment: @DeesOomens see  my update
Comment: That's weird, maybe you have cached your routes, do you have a `bootstrap/cache/routes.php` file? Is your route present if you execute `php artisan route:list`?
Comment: @Demonyowh I don't have any routes similar to exam, there are lots of routes lie `activate`,`dashboard`...,  The url: `http://localhost:8000/exam/3`  -   See updated question
Comment: Also check how many results do you get by executing: `php artisan route:list | grep exam/{id}`
Comment: @namelivia, three results:  `activate-exam`, `exam-info/{id}`, `exam/{id}`
Comment: i think there is another route that is listening for the same method and it does not work because of the (-) character https://laravel.com/docs/5.0/routing#route-parameters try changing it to exam_info and see if it works
Comment: Check and verify by running "php artisan route:list"
Answer: Do you defined resource route on ExamContorller. Something similar like below on your route.php
Route::resource('exam', 'ExamController');

If it present, please change the second route name to something else like /exam-id/{id}
Comment: No, I do not have  route ::resource
Comment: Then, can you please verify the route name your are calling is correct or try to change the name to something else like /exam-id/{id} and see its working


How important is string-muting when playing the bass?

Question: I'm mainly an acoustic guitar player, branching out into electric guitar and (a bit) bass guitar.
I don't know much of anything about bass technique - I just have one lying around and muck about on it sometimes.
I wondered if it's the norm that you must always mute all strings but the one being played, is this a core feature of how the bass is played that you explicitly mute strings with your right hand?
Comment: Play without muting. Do you like what you hear? If so, carry on. If not, mute.
Comment: A few good answers here, so I won't be typing one up.  I did want to mention that I have seen lots of bass players using something to mute the strings by the nut.  Some players use scrunchies, ie, larger hair ties with more fabric.  This is either kept over the strings on the first fret, or when not needed can be rolled back beyond the nut and quickly and easily be pulled back over the strings.  This is very common for players using a tapping technique, as such a technique can be rather noisy and muting can be a little harder.  Victor Wooten is one bass player that I've seen use this approach.
Comment: The best for me is a sponge! you can cut a piece of sponge the right size and put it right below the strings at the bridge. With the right size, you can get notes to be pretty much exactly 4ths for example. This works amazingly well for recording unless you need long notes.
Answer: Rather than asking what's correct, try it and see whether you like it. If you play a part without any muting and you like how it sounds, stick with it.
However, most bassists mute a lot, and here's why:

Bass parts are generally monophonic, rooting the music, and having other notes hanging around confuses things.
Whereas guitarists often finger chords even if they're playing a single note, bassists more often just finger the note they're playing. The chances of the remaining open strings harmonising with your part aren't great.
Lots of bass styles are somewhat staccato - so you even mute sounded notes shortly after they have sounded

Not all of this is right-hand muting. Typically it's a combination of right-hand palm muting, right-hand finger muting, and left hand muting.
The renowned pop bassist Carol Kaye often used a piece of felt across the bridge, permanently muting all the strings, for a clean spare bass sound when picking.
Comment: Jamerson used foam in the bridge too. I think most of the major electric bassists of that era did.
Answer: Generally players do mute unused strings. The commonest is using RH thumb on the bottom string (unless being played!) Some will use spare fingers of RH, and/or fleshy part of LH fingers. I know a bass player - session guy, incredible player, who devised his own muting method which involves each digit muting an unused string, leaving one spare for playing the note. He usually uses a 5 string. It's really uncanny to watch, but so, so clean. Most folks will derive their own method, and probably won't actually be aware of what they're doing. Like me. It's something that just develops for a lot of us, helped by the fact that we went through it all on guitar, too. There's obviously going to be a variation for those who use a pick. You don't.....do you?
Comment: Oy! using a pick on bass gets loads of sounds! Two tribes fast stuff, throaty rough punk, or funky groove as in Plant Earth (Duran Duran). The hardness on the pick makes the string ring with more treble/midrange so it tends to cut through the overall mix in the midrange rather than a bassy rumble. Horses for courses ..
Comment: There is no "right" way, but the way most books/teachers teach, you don't use your thumb, and you pluck with two-to-three fingers. I'm ill-disciplined and use my thumb a lot. A thumb pluck sounds quite different to a finger pluck.
Comment: I've seen bass players just resting their 5 RH fingers on the 5 strings, and plucking the correct string with the finger; almost like playing the piano!
Comment: @yo' - would they be left handed players?
Comment: No pick so far, although I haven't even chosen a technique between using my thumb or using finger tips yet, not being sure if there is a "right" way :)
Comment: There is no 'right' way. Using a pick gives just one (boring) sound. Fingers and the occasional thumb work best, in my opinion, as they will produce a myriad of different sounds - nails, flesh, pop, slap, et al. Funny, picking up a gtr, my pick comes out. Play bass, it's never seen.
Comment: @tim so using a sort of fingerstyle technique on bass is valid then?
Comment: Absolutely. We all need to find our own way. We did before internet channels and books told us 'what to do'. With four strings,it's not too difficult to find a way that suits each individual.One finger per string, multiple fingers on the same strings, that sort of thing.
Answer: I play bass myself, started off with guitar of course, and I must say that both instruments are very different when it comes to muting. While a guitar, depending on the genre or the part you're playing (like harmonic parts and ringing notes), can sound quite good without muting... A bass often does not.
The reason for that is that the bass forms the backbone of a song, together with the drums. A song with a muddy or imprecise foundation sounds not as good as a tight bass-tone locked in with the drums (so played when it needs to be played and muted when it does not). If you compare the playing style of a guitarist and a bassist, the bassist often uses one tone at the time. The guitar player uses more harmonic chords or powerchords, so hearing more than just what's being played doesn't matter that much.
It also is very important to mute your bass correctly because of the string gauge. Bass strings are much thicker than guitar strings. So physically, the vibrations when playing a string are much stronger, so the strings next to the one being played are moving too. Therefore it is, especially for a down-tuned bass, crucial to mute your strings correctly. Even if you just play one string, the others will be moved by the sound vibes as well and are usually out of tune, compared to the tone you're playing.
However, don't be too obsessed with muting. As long as you keep your playing style clean and mute consciously whenever there's a risk of you smashing more than one string, you shouldn't have any problems with the tone. Keep an eye on it, practice a bit and you'll be fine.
Comment: Playing overdriven/distorted guitar without muting usually sounds awful.
Comment: Yeah I know, that's why I specified it with "depending on the genre or the part you're playing".
Just wanted to say that guitar really does not always need muting, however a good muting technique is valuable on guitar and bass, maybe a bit more important on bass.
Answer: Because of the bass's fundamental roles in harmony and rhythm, it's especially important to play cleanly, clearly, and deliberately. Among other things, that means muting any unwanted tones. Bassists have a variety of muting techniques, using either hand or both together.
On the fretting hand, you can touch unused strings with your fingertips, or lay fingers across the strings, or lightly slap the strings between notes for a percussive choking effect. On the plucking hand, it's very common to anchor the thumb on the E or A string, muting lower notes, and it's not unusual to also mute strings with the plucking fingers. It's less common to mute higher strings with your non-plucking fingers, although some prominent players like Jaco Pastorius use that technique. With a pick, you can anchor fingers on the higher strings or touch the strings with the side of your hand.
You won't always need to deliberately mute all of the strings, but because of the importance of clean play, you'll find that most bassists are aggressive about muting.


Meaning of partial correlation

Question: From Wikipedia

Formally, the partial correlation between $X$ and $Y$ given a set of $n$ controlling variables $Z = \{Z_1, Z_2, …, Z_n\}$, written $ρ_{XY·Z}$, is the correlation between the residuals $RX$ and $RY$ resulting from the linear regression of $X$ with $Z$ and of $Y$ with $Z$, respectively.

It says earlier that

partial correlation measures the degree of association between two random variables, with the effect of a set of controlling random
  variables removed.

I was wondering how the partial correlation $ρ_{XY·Z}$ is related to
the correlation between $X$ and $Y$ conditional on $Z$?
There is a special case for $n=1$.

In fact, the first-order partial correlation (i.e. when $n=1$) is nothing else than a difference between a correlation and the product
  of the removable correlations divided by the product of the
  coefficients of alienation of the removable correlations. The
  coefficient of alienation, and its relation with joint variance
  through correlation are available in Guilford (1973, pp. 344–345).

I was wondering how to write the above down mathematically?
Answer: Note that correlation conditional on $Z$ is a variable that depends on $Z$, whereas partial correlation is a single number.
Furthermore, partial correlation is defined based on the residuals from linear regression. Thus, if the actual relationship is nonlinear, the partial correlation may obtain a different value than the conditional correlation, even if the correlation conditional on $Z$ is a constant independent of $Z$. On the other hand, if $X, Y, Z$ are multivariate Gaussian, the partial correlation equals the conditional correlation.
For an example where constant conditional correlation $\neq$ partial correlation: $$Z\sim U(-1,1),~X=Z^2+e,~Y=Z^2-e,~e\sim N(0,1),e\perp Z.$$ No matter which value $Z$ takes, the conditional correlation will be -1. However, the linear regressions $X|Z$,$Y|Z$ will be constants 0, and thus the residuals will be the values $X$,$Y$ themselves. Thus, the partial correlation equals the correlation between $X$,$Y$; which does not equal -1, as clearly the variables are not perfectly correlated if $Z$ is not known.
Apparently, Baba and Sibuya (2005) show the equivalence of partial correlation and conditional correlation for some other distributions besides multivariate Gaussian, but I did not read this.
The answer to your question 2 seems to exist in the Wikipedia article, the second equation under Using recursive formula.

Meaning of partial correlation


Reverse Engineering using machine learning

Question: First I want to say I'm completely new to the machine learning paradigm and have only discussed it in theory.  I have been trying to put it into practice but I'm confused on how to derive the dataset in a way that would allow me to reverse engineer the following problem:
Let's say we have a dataset with a few traits(attributes for a player) and we are trying to reverse engineer the formula for deciding if a player scores a
goal:
Let's say the attributes are the following.  All numbers are from 0-100.
             AGI     AWR    KP    KA     Tec(technique)
Player 1     44      60     90    70      66

Let's say the real formula we are trying to reverse engineer is the following:
.25*AGI + .15*AWR + .30*((KP+KA)/2) + .30*(Tec) + diceRoll(3)

And let's say if the number comes out to be greater than 85 the player scores the goal.
Let's say our data set essentially has a bunch of players kick attempts at the goal, and has a true or false for score like the following:
 AGI     AWR    KP    KA     Tec  Score
 60      40     70    30      50    1(true)
 44      60     90    70      66    0(false)
 90      90     60    65      38    0(false)

Is there a way to train a neural network that essentially predict outcomes based on a player's attributes?
Is this the correct use of a neural network? or is there a better tool suited to figure this out?
Answer: I assume you're trying to reverse-engineer a human-programmed formula, like in a video game, rather than trying to model a stochastic relationship in nature.
If you know the hidden formula is something like a1*AGI + a2*AWR + a3*KP + a4*KA + a5*Tec + diceRoll(n) (since the example you gave is of that form; .30*((KP+KA)/2) can be rewritten as .15*KP + .15*KA), and all you don't know is the values of a1 through a5 and the value of n, then a neural network is overkill. All you need is a multi-parameter function minimization routine like R's optim or Python's scipy.optimize.minimize. Minimize the negative sum of the logarithms of the likelihood of each observation. The likelihood of each observation is just the probability of the observed outcome (1 or 0) given the model parameters being considered by the minimization routine.
Comment: thanks for the help, i've have attempted to use logistic regression, but the only issue is that the result parameter has to be binary.  I made my question very binary, but let's say in the example I gave above that instead of a 1 or 0 to determine that a goal was made, what if it was calculating a distance the ball was kicked?  I've attempted to look at logistic regressions for ordinal dependent variables, but feel it isn't really solving the problem, essentially I need the formula, or a tool that I can give it values, and determine the expected outcome.
Comment: Distance the ball was kicked sounds like a continuous dependent variable, so try plain old linear regression (that is, ordinary least squares).
Comment: Your assumption is correct, I am trying to reverse engineer a formula in a simulation type game.  The example I gave of the hidden formula being revealed was just to get point across, the actual formula isn't known.  That being said I will research what you suggested in terms of using minimize to solve this problem, but still would like the ability to stick 2 teams of players against each other and simulate the outcomes within a 85% accuracy.  In addition, I was enjoying trying to learn about machine learning, but maybe it's better applied when attempting to modal stochastic relationships.
Comment: I will not mark you answer as the right one, yet even though you proposed a great solution in terms of using optim/minimize, but I still want to wait and see if someone approaches it from the neural network approach even though it may be over kill.
Comment: If you don't know the form of the formula, but you do know the input values and have only a few of them (KP, KA, etc.), logistic regression is probably the way to go. Many neural networks are just fancy collections of logistic regression models, anyway.


How to show an url at the bottom corner of a desktop browser window on Flutter web?

Question: I am designing a web application using flutter and I want users to be able to see the destination url which usually appear at the bottom corner of desktop browser windows when they click or hover over the elements containing the link on the web page
Answer: Please install plugin https://pub.dev/packages/url_launcher
<code>Link(uri: 'https://stackoverflow.com',
     builder: (context, onLlink) {
         return TextButton(child: Text('Click Here'), onPressed: onLlink)
     })
</code>
For more detailed please check below link
https://www.youtube.com/watch?v=ujlqRTJg48g
Comment: 1+ , thats whats am looking for! , but it will be better if you add more details


Adjust for one factor in time series analysis

Question: I would like to analyze whether blood pressure is higher in winter than in summer through time series analysis: in particular, I would like to use repeated/pooled cross-sectional time series analysis in my sample.
I want to know: I suspect that blood pressure could increase together with aging in my sample, so, how can I take into account it? For example, to address the issue that blood pressure could be seasonal only because age is.
(I use R)
Answer: Just to be clear are you collecting repeated measures on the same individuals? If so you could create a variable for each season (let's say you measured BP four times a season). Now let's say you had 25 subjects measured 4x a season, which would give you 400 observations.
Now this may or may not be exactly your situation but let's roll with it. You would maybe have a dataset that looks something like this:
> head(lv1)
    ID season   BP.sys
4    1   fall 116.8071
104  1   fall 120.3489
204  1   fall 121.5491
304  1   fall 125.6599
2    1 spring 124.6406
102  1 spring 124.7724
> tail(lv1)
    ID season   BP.sys
299 25 summer 126.1880
399 25 summer 126.1933
97  25 winter 142.7422
197 25 winter 146.6256
297 25 winter 142.8389
397 25 winter 148.9565

Okay, so now what can you do to see if there is an effect of season on BP? Well one option would be just to run a mixed effects model on it, perhaps allowing the effect of season to vary across individuals (you could add age as a covariate if you had the data). I tend to use the lme4 package for these sorts of models.
library(lme4)
> fit<-lmer(BP.sys~1+season+(1+season|ID), data=lv1)
> summary(fit)
Linear mixed model fit by REML ['lmerMod']
Formula: BP.sys ~ 1 + season + (1 + season | ID)
   Data: lv1

REML criterion at convergence: 2544.4

Scaled residuals:
    Min      1Q  Median      3Q     Max
-3.9006 -0.5680 -0.0226  0.6016  3.1650

Random effects:
 Groups   Name         Variance Std.Dev. Corr
 ID       (Intercept)  181.150  13.459
          seasonspring   7.069   2.659   -0.48
          seasonsummer   2.537   1.593    0.36  0.64
          seasonwinter   1.494   1.222    0.44  0.58  1.00
 Residual               25.244   5.024
Number of obs: 400, groups:  ID, 25

Fixed effects:
             Estimate Std. Error t value
(Intercept)  125.7155     2.7383   45.91
seasonspring   2.1538     0.8875    2.43
seasonsummer  -5.3182     0.7787   -6.83
seasonwinter  10.1394     0.7514   13.49

Correlation of Fixed Effects:
            (Intr) ssnspr ssnsmm
seasonsprng -0.386
seasonsummr  0.028  0.523
seasonwintr  0.018  0.491  0.564

You can run the same model with the lmerTest package loaded to get significance tests for your coefficients. Note that it will automatically assign a reference category alphabetically, meaning the model estimates are all in reference to mean BP in the fall (which is the intercept in this model).
Hope that helps.
Comment: Glad to hear it. Good luck!
Comment: You put me on the right track: now it is just a matter of studying. Thank you


sin^2 (n) / n series when sin is defined on complex numbers

Question: I encountered a problem that I can't figure out. I need to see whether the following series converges or diverges: $\frac{\sin^2(n)}{n}$, with n from 1 to infinity. The problem is that sin is defined on complex numbers, so this time sin can take values outside the interval $[-1,1]$. How do you solve this problem? Thank you in advance!
$$\sum_{n=1}^\infty\frac{\sin^2(n)}n$$
Comment: How is $\sin$ being defined on complex numbers relevant here since you're summing over $\mathbb{N}$?
Comment: Did you mean $$\sum_{n=1}^\infty\frac{\sin^2(n)}n$$
Comment: yes, that's the series I need
Comment: When you define the sine function over the complex numbers, $\sin z$ has the usual value when $z$ happens to be a real number. Here, $n = 1, 2, 3, \dots$ are real values.
Comment: That's what I can't figure out, I've been told I need to use the complex form of sin, but I don't see for what.
Answer: Notice that
$$\sin^2(n)=\frac{1-\cos(2n)}2$$
And it's easy to use $\cos(2n)=\Re(e^{2in})$ to get
$$\sum_{n=1}^\infty\frac{\sin^2(n)}n=\frac12\Re\left[\sum_{n=1}^\infty\left(\frac1n-\frac{e^{2in}}n\right)\right]$$
The right most part of the sum converges by the Dirichlet test while the first part diverges by the p-series, hence, your series diverges.
Comment: How do you apply Dirichlet on e^(2in)/n ? I'm sorry if I'm asking something simple.
Comment: Note that $\sum e^{2in}$ is bounded and $1/n\to0$.
Comment: Why is e^2in bounded? Isn't its limit infinite? I tried writing it as a geometric progression and got to the same conclusion.
Comment: It's merely a geometric series.  Solve the geometric series and show that it is bounded.
Comment: I arrived at e^(2i) * (e^(2in) - 1) / (e^(2i) - 1) and I don't know how to continue. I tried writing e^2in as cos n + i cos n, but I didn't arrive to anything.
Comment: * i sin n, sorry for the typo
Comment: @Jay_Peters Note that $$|e^{2in}-1|\le|e^{2in}|+|-1|=2$$Thus, it is bounded...
Comment: Ah, I understand! Thank you very much for helping me out and sorry for asking so many questions!
Comment: No problem! :-)


Symetric matrix properties and numerical optimizations

Question: Let $M$ be a non sparse matrix of real non negative values. Let $ A = M M^T $.
What can I say about the powers of $A$? Are they also symetric? Is possible to calculate the powers of $A$ only with $M$?
Since $A$ is always symetric. Decomposing $A$ with Cholesky ($A = L L^T$, being $L$ a lower diagonal matrix) gives me any improvement to calculate the powers of $A$?
Is possible to find the Cholesky decomposition of $A$ (that is $L$ lower triangular matrix) only with $M$?
Answer: The powers of a symmetric matrix are always symmetric: $(A^n)^T = (AAA...A)^T=A^TA^TA^T...A^T=AAA...A=A^n$ (here I have used the property $(BC)^T=C^TB^T$ and its generalization to an arbitrary number of factors). The most effective way to calculate the $n$-th power of a matrix is to use the spectral theorem: $A=Q^TDQ$, where $D$ is diagonal and $Q$ is orthogonal; it is easy to see that $A^n = Q^TD^nQ$. (for example in the case $n=2$ we have: $A^2=AA=Q^TDQQ^TDQ=Q^TD(QQ^T)DQ=Q^TDIDQ=Q^TDDQ=Q^TD^2Q$, where $I$ is the identity matrix).


How to setup a proxy using web sockets and angular CLI

Question: I have a simple web app built using the angular CLI. I want it to communicate with a backend using web sockets. I have the backend already written and have tested with a simple index.html page that the server can send and receive on sockets.
In my angular-cli project I have setup a proxy config file to setup a proxy to the backend.
proxy.conf.json
{
  "/sock": {
    "target": "http://localhost:3000",
    "changeOrigin": true,
    "ws": true,
    "logLevel": "debug"
  }
}

Then start the server with the following.
ng serve --proxy-config proxy.conf.json

For now I have a service that simply attempts to open a socket and send a fixed string which I'm expecting to see logged by the backend.
import { Injectable } from '@angular/core';
import * as io from 'socket.io-client';

@Injectable()
export class ChatService {

  private socket: any;

  constructor() {
    this.socket = io({ 'path': '/sock' });
    this.socket.emit('chat message', 'Hello World from browser!');
   }

}

Note: I've had several go's at this with and without the /sock part of the url.
I start both servers. Get no console errors in the browser. But in the angular CLI web pack server I get the following messages.
10% building modules 2/2 modules 0 active[HPM] Proxy created: /sock  ->  http://localhost:3000
[HPM] Subscribed to http-proxy events:  [ 'error', 'close' ]

[HPM] GET /sockjs-node/530/z1z3teld/websocket -> http://localhost:3000
[HPM] Upgrading to WebSocket
[HPM] Error occurred while trying to proxy request /sockjs-node/530/z1z3teld/websocket from localhost:4200 to http://localhost:3000 (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)

Are web sockets supported or have I made a silly mistake?
Thanks
Answer: I managed to figure it out with a bit of trial and error. I looked at the console for the basic index.html page that works within the backend project. This backend project is basically the chat server demo application on the socket.io website. I noticed that when it opens up the web socket the url looks like the following:
http://localhost:3000/socket.io/EIO=3&transport=websocket&sid=wTvdQTclHXJSUmAmAAAA

So back in the angular CLI project I modified my proxy config to include the /socket.io/ part plus also added a wildcard.
{
  "/sock/*": {
    "target": "http://localhost:3000/socket.io/",
    "ws": true,
    "logLevel": "debug"
  }
}

Bingo! Now when the service is constructed it opens the socket and emits a message which I can see logged in the backend.
Comment: This was amazing, for my instance I was using NestJS, and the default implementation needed me to do the following. ```"/socket.io/*": {
    "target": "http://localhost:3333/socket.io",
    "ws": true
  }```


Apache 2 settings for high traffic website

Question: I'm having problems with the load on my website. It's an amazon ec2 server with 15Gb ram and 4 CPUs behind an LB.
apachetop says I'm getting around 80 reqs per second which seems really low for this kind of server and the load ( given by top ) is usually around 15 but does increase to about 150 in 24 hrs. I'm seeing about 100 active apache processes at any time.
Apache is in prefork mode.
Mysql is used very little on the server and there are almost no static files.
Here are my Apache settings:
Timeout 20
KeepAlive Off
MaxKeepAliveRequests 0
KeepAliveTimeout 3

<IfModule mpm_prefork_module>
    StartServers         40
    MinSpareServers      25
    MaxSpareServers      40
    ServerLimit         400
    MaxClients          400
    MaxRequestsPerChild  4
</IfModule>

Can anyone advise on how to tweak the settings?
Thanx!
Edit:
The config was gotten by trial and error. Any and I mean by a number, change to these lines make the load skyrocket in like 5 minutes. It literally jumps to like 200-300 in a matter of minutes.
Especially MaxRequestsPerChild. I've tried with 10, 15, 100, 1000 and the load just skyrockets.
About php - there are actually only a few php files which aren't really that expensive at all. They just spit some simple stuff out.
If I turn on KeepAlive load also goes to space..
Edit:
This is what server status gives:
Current Time: Monday, 16-Apr-2012 07:26:07 UTC
Restart Time: Monday, 16-Apr-2012 07:06:44 UTC
Parent Server Generation: 3
Server uptime: 19 minutes 22 seconds
Total accesses: 65803 - Total Traffic: 51.8 MB
CPU Usage: u24.25 s1.99 cu0 cs0 - 2.26% CPU load
56.6 requests/sec - 45.7 kB/second - 825 B/request
65 requests currently being processed, 0 idle workers

WWWCWWCCWWWWCCCWWCWWCWCWWCCWWWCCWWWCWWCWWWSWC..C..W...WCCCC.C.GW
CWCC.CWWCCC.WC..................................................
................................................................
................................................................
................................................................
................................................................
................

I can see a lot of connections in "Wait" mode but I'm not sure why the req/sec is so low. Only 56 and so many slots are empty...
Update:
I have changed the code a little, removed all routines which could slow things down and I'm still getting only 100 reqs per second. Load is stabile at about 10...
I think these kind of machines should be able to do much more...
Comment: did you see my last reply? Is this still an issue for you?
Answer: Your situation suggests to me the PHP script is waiting on something to complete (like a SQL query or API call). You should be able to turn on apache's Extended Status module to get a much better idea of what apache is doing.
To do so, in your httpd.conf you'll need to enable mod_status and have 'ExtendedStatus On' (see: http://httpd.apache.org/docs/2.0/mod/mod_status.html#extendedstatus)
eg.
LoadModule status_module modules/mod_status.so
ExtendedStatus On

<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny from all
 Allow from xxx.xxx.xxx.xxx
</Location>

Replace xxx.xxx.xxx.xxx with the IP(s) you want to be able to access the status page and then hit http://yoursite.com/server-status to view the output. Most of the configs are probably already in your .conf files or have been commented out.
Once you have access to it, you'll see something similar to:
K___K_W_........................................................
................................................................
................................................................
................................................................

Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" KeepAlive (read), "D" DNS Lookup, "L" Logging,
"G" Gracefully finishing, "." Open slot with no current process

This gives you a lot more idea of what is happening behind the scenes in Apache. If my first assumption is correct (ie. your PHP script is waiting on something), then you'll see lots of tasks in 'W' mode.
Give it a try - if you still need help, let me know what the above output looks like.
Comment: Thx for adding the server-status output. So, in the extended list underneath that output, it will show you which script is running for each child process. Are all/most of them the same script? If so, what is that script doing that is taking so long? This looks more and more like a slow script that is just taking a long time to complete due to an external dependency (disk, api, db or similar)
Comment: Problem identified - a php native function which loads it's ini file for every request was causing the problem. Our solution was to rewrite the method and take another approach while we didn't try to place the ini file in ram.  That might have helped also. If I had started profiling sooner ( when this comment came, I would have fixed it sooner ). That's why this comment is accepted.
Comment: Thanx!!! You were right... most connections are in W mode... I updated the question with server-status response
Answer: Even the load average of 15 is too high - it's indicative that the system is running into a bottleneck.
What's running in Apache?
If it's dynamic content, check if the CPUs are completely utilized; the code may need some optimization or you may need to scale to more EC2 instances to handle the CPU requirements of the content.
If it involves the clients loading a decent amount of data, then you may be overloading disk (check the iowait numbers in top) or even your available bandwidth.
Depending on what's running, you may be able to use an MPM with better performance than prefork.
MaxRequestsPerChild 4 is incredibly low - do you know why this is set?  And why is KeepAlive Off set?  Both of those settings are very bad from a performance perspective; can you give some background on how the config got to where it is?


A want to access a global variable in my subscribe method. Angular, Observable, Subscribe, Typescript

Question: i cant access a global variable in type script in an other method.
As i have initialized this "initiatorOffer" global variable in this methode
peerx.on('signal', function(data)
{

   console.log("1");

   console.log(JSON.stringify(data));

   this.targetpeer = data;

   **this.initiatorOffer = JSON.stringify(data);  // i have initialized there**

   console.log(this.initiatorOffer);

}

but when i get this value in other method on same file which is:
this._chatservice.clientconnected().subscribe(data => {

   **console.log(this.initiatorOffer);** // getting value

})

i get the undefined value. why is that? as this variable is global.
this.chatservice.clientconnected() method called when i get a response from
server.
Comment: console log your 'this' in both callback function of 'on()' and subscribe function of 'clientConnected()'. See if they are similar.
Comment: they are not similar. so what can i do to fix this
Comment: I'd suggest reading this: https://www.vinta.com.br/blog/2015/javascript-lambda-and-arrow-functions/

if you change your callback function to () => {} instead of function() {}, I believe you'll have access to the same context 'this'.
Answer: You should convert the function to arrow function as follows:
peerx.on('signal', (data) => {
....
// here you can access 'this' instance
});

This is an arrow function. Arrow functions are a short syntax, introduced by ECMAScript 6, that can be used similarly to the way you would use function expressions. In other words, you can often use them in place of expressions like function (foo) {...}. But they have some important differences.
For example, they do not bind their own values of this.
Refer to this link:
What's the meaning of "=>" (an arrow formed from equals & greater than) in JavaScript?
Answer: I think that the problem that Angular don't take account the changes in your peerx.on('signal', function(data). You can try using ngZone https://angular.io/api/core/NgZone#ngzone
peerx.on('signal', function(data)
{
   this.ngZone.run(() => {
      console.log("1");
      console.log(JSON.stringify(data));
      this.targetpeer = data;
      this.initiatorOffer = JSON.stringify(data);  // i have initialized there**
      console.log(this.initiatorOffer);
   })
})


Proof verification: $\lim\limits_{s\to\infty}\zeta(s)=1$

Question: Note: I'm aware that there are much simpler proofs for this result. I decided to go with this approach because $(1)$ it was a nice challenge, and $(2)$ it makes use of a nice identity shown below.
I've recently been spending time evaluating integrals involving the floor function. One of them was
$$\int_0^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx$$
for integers $p\geq 0$. By splitting the integral
$$\int_\frac{1}{k}^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx$$
into a sum of integrals indexed by the intervals $[1/(i+1),1/i]$ for $i=1,2,3,...,k-1$, evaluating each of the integrals, and manipulating the resulting sum, I found that
$$\int_\frac{1}{k}^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx=\frac{1}{(p+1)k}-1+\frac{1}{p+1}\left(\sum_{n=1}^{k-1}\frac{1}{n^{p+2}}+\sum_{m=2}^{p+1}\sum_{n=1}^{k}\frac{1}{n^m}\right)$$
which, after letting $k\to\infty$, yields
\begin{align}
\int_0^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx &= -1+\frac{1}{p+1}\left(\zeta(p+2)+\sum_{m=2}^{p+1}\zeta(m)\right)\\
&= -1+\frac{1}{p+1}\sum_{m=2}^{p+2}\zeta(m)
\end{align}
Pretty neat! I believe I can use this equation to give an overkill proof of $\lim_{s\to\infty}\zeta(s)=1$ ($s$ is a real parameter). Here is my attempt:
Beginning
We first note that the sequence $\{\zeta(n)\}_{n=2}^\infty$ certainly has a limit, since $\zeta$ is strictly decreasing and bounded below by $1$ (both of these facts easily follow from the series $\sum_{n=1}^\infty 1/n^s$), so
\begin{align}
\lim_{n\to\infty}\zeta(n) &= L & (1)
\end{align}
for some real number $L\geq 1$. Fixing an arbitrary $\varepsilon>0$, we infer that for some $N\in\mathbb{N}$,
$$L-\varepsilon<\zeta(n)<L+\varepsilon\text{ for every }n>N$$
$$\implies \sum_{n=2}^{p+2}(L-\varepsilon)<\sum_{n=2}^{p+2}\zeta(n)<\sum_{n=2}^{p+2}(L+\varepsilon)\text{ for every }p>N$$
$$\implies (p+2-1)(L-\varepsilon)<\sum_{n=2}^{p+2}\zeta(n)<(p+2-1)(L+\varepsilon)\text{ for every }p>N$$
$$\implies (p+1)(L-\varepsilon)<\sum_{n=2}^{p+2}\zeta(n)<(p+1)(L+\varepsilon)\text{ for every }p>N$$
$$\implies L-\varepsilon<\frac{1}{p+1}\sum_{n=2}^{p+2}\zeta(n)<L+\varepsilon\text{ for every }p>N$$
Since $\varepsilon>0$ was fixed arbitrarily, we can apply the prior sequence of implications to any positive real number. This shows that
\begin{align}
\lim_{p\to\infty}\frac{1}{p+1}\sum_{n=2}^{p+2}\zeta(n) &= L & (2)
\end{align}
Now consider the identity
$$\int_0^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx=-1+\frac{1}{p+1}\sum_{m=2}^{p+2}\zeta(m)$$
We can write
\begin{align}
0<\int_0^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx &= \int_0^\frac{1}{2} \frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx+\int_\frac{1}{2}^1\frac{x^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx\\
&\leq \int_0^\frac{1}{2}\frac{\left(\frac{1}{2}\right)^p}{\left\lfloor\frac{1}{x}\right\rfloor}dx+\int_\frac{1}{2}^1 \frac{x^p}{1}dx\\
&= \left(\frac{1}{2}\right)^p\int_0^\frac{1}{2}\frac{1}{\left\lfloor\frac{1}{x}\right\rfloor}dx+\frac{1}{p+1}-\frac{\left(\frac{1}{2}\right)^{p+1}}{p+1}
\end{align}
and thus
$$0<-1+\frac{1}{p+1}\sum_{m=2}^{p+2}\zeta(m)\leq\frac{1}{2^p}\int_0^\frac{1}{2}\frac{1}{\left\lfloor\frac{1}{x}\right\rfloor}dx+\frac{1}{p+1}-\frac{1}{(p+1)\cdot 2^{p+1}}$$
Since
$$\lim_{p\to\infty}\left(\frac{1}{2^p}\int_0^\frac{1}{2}\frac{1}{\left\lfloor\frac{1}{x}\right\rfloor}dx+\frac{1}{p+1}-\frac{1}{(p+1)\cdot 2^{p+1}}\right)=0$$
the Squeeze Theorem gives
$$\lim_{p\to\infty}\left(-1+\frac{1}{p+1}\sum_{m=2}^{p+2}\zeta(m)\right)=0$$
which is equivalent to $\lim_{p\to\infty}\frac{1}{p+1}\sum_{m=2}^{p+2}\zeta(m)=1$. Combining this with $(2)$, we see that we must have $L=1$. We deduce from $(1)$ that
$$\lim_{n\to\infty}\zeta(n)=1$$
We now do the final push and get $\lim_{s\to\infty}\zeta(s)=1$. Fix an arbitrary $\varepsilon>0$. Since the sequence $\{\zeta(n)\}$ converges to $1$ and $\zeta(t)>1$ for every real $t>1$, there is an $N\in\mathbb{N}$ such that
$$0<\zeta(n)-1<\varepsilon\text{ for every }n>N$$
We know that $\zeta(s)<\zeta(n)$ for every real $s>n$, so
$$0<\zeta(s)-1<\zeta(n)-1<\varepsilon\text{ for every real }s>n>N$$
Since $\varepsilon$ was fixed arbitrarily, we can apply the preceding argument to every positive real number, so we are done. $\blacksquare$
Let me know what you think! If you identify any errors or optimizations, feel free to share them with me.
Edit: as @stochasticboy321 kindly pointed out, my proof has a small error. You see, I can't deduce the inequality
$$\sum_{n=2}^{p+2}(L-\varepsilon)<\sum_{n=2}^{p+2}\zeta(n)<\sum_{n=2}^{p+2}(L+\varepsilon)$$
from the fact that $L-\varepsilon<\zeta(n)<L+\varepsilon$ for every $n>N$, since this assumes that the latter inequality is also true for $2,3,...,N$. A correct approach would $(1)$ use the integral to prove that
$$\lim_{p\to\infty}\frac{1}{p+1}\sum_{n=2}^{p+2}\zeta(n)=1$$
$(2)$ write
$$\sum_{n=2}^{p+2}\zeta(n)=\sum_{n=2}^{N}\zeta(n)+\sum_{n=N+1}^{p+2}\zeta(n)$$
for an arbitrary $p\geq N-1$, $(3)$ apply the inequality $L-\varepsilon<\zeta(n)<L+\varepsilon$ to get
$$(L-\varepsilon)(p+2-N)+\sum_{n=2}^{N}\zeta(n)<\sum_{n=2}^{p+2}\zeta(n)<(L+\varepsilon)(p+2-N)+\sum_{n=2}^{N}\zeta(n)$$
$$\implies (L-\varepsilon)\left(\frac{p+2}{p+1}-\frac{N}{p+1}\right)+\frac{1}{p+1}\sum_{n=2}^{N}\zeta(n)<\frac{1}{p+1}\sum_{n=2}^{p+2}\zeta(n)$$
$$\text{ and }$$
$$\frac{1}{p+1}\sum_{n=2}^{p+2}\zeta(n)<(L+\varepsilon)\left(\frac{p+2}{p+1}-\frac{N}{p+1}\right)+\frac{1}{p+1}\sum_{n=2}^{N}\zeta(n)$$
and $(4)$ let $p\to\infty$ to yield
$$L-\varepsilon\leq\lim_{p\to\infty}\frac{1}{p+1}\sum_{n=2}^{p+2}\zeta(n)=1\leq L+\varepsilon$$
from which $L=1$ follows because $\varepsilon$ was fixed arbitrarily, so the inequality $|L-1|\leq\varepsilon$ will hold for any $\varepsilon>0$.
For the sake of honesty, I won't edit the original proof.
Comment: There's a minor error - if $\zeta(n) \le  L + \epsilon$ for $n >N$, then this does not imply that $\sum_{2}^{p+2} \zeta(n) \le \sum_2^{p+2} (L+\epsilon)$ for large $p$, since the  $\zeta(n)$ for $n \le N$ may be bigger than $L+\epsilon$. What you do have is that if you define $\sum_{n = 2}^{N} \zeta(n) = C_N,$ then $\sum_{n = 2}^{p+2} \zeta(n) \le C_N + (p+2 - N) (L+\epsilon),$ and a similar lower bound. Of course, this doesn't change the conclusion, since $C_N/p$ will go to zero with $p$.
Comment: BTW the argument that if $a_n$ converges then the ergodic average $\sum_{n \le N} a_n/N$ converges to the same limit follows directly by [Stolz-Cesaro](https://en.wikipedia.org/wiki/Stolz%E2%80%93Ces%C3%A0ro_theorem), which is a nice tool to know. The rest of your argument seems fine to me.
Comment: Beautiful identity.
Comment: @stochasticboy321 you're right! I can't believe I overlooked that!
Comment: I added a correction at the bottom of the post.
Answer: Over the real line, $\lim_{s\to +\infty}\zeta(s)=1$ is a straightforward consequence of the dominated convergence theorem applied to the series defining $\zeta(s)$. Through concrete inequalities,
$$ 1 < \zeta(s)=1+\sum_{n\geq 2}\frac{1}{n^s}\leq 1+\int_{1}^{+\infty}\frac{dx}{x^s}=\frac{s}{s-1} $$
and the claim follows by squeezing.
Comment: I see that this is your $3$rd answer since $2020$, welcome back Jack! I love so many of your posts, like the ones that show how to solve really tough integrals, you're an inspiration for me. Thanks so much for them.
Comment: I agree with @A-Level Student, it's great to have you back Jack.


How does Hawk-Eye differ in tennis & cricket in terms of technology & philosophy?

Question: What is the difference in terms of accuracy of Hawk-Eye technology when it comes to cricket and tennis?
The tennis authorities throughout the world (except for the French Open and some clay court tournaments) have accepted the Hawk-Eye technology, completely trusting its results and awarding decisions on its basis.
But in cricket, in the form of the Decision Review System (DRS), there has been and is a lot of controversy surrounding Hawk-Eye. The Board of Control for Cricket in India (BCCI) is completely against it and many others are skeptical about it.
So what is the difference in Hawk-Eye technology and philosophy when it comes to tennis and cricket?
Answer: In tennis, Hawk-Eye is used to locate the impact of the ball on the flat ground relative to the field markings.  The analog of that in cricket is locating the point where the ball pitched relative to the lines of the stumps.  Those decisions are almost always uncontroversial, and the Test Match playing conditions specify that on this matter "evidence provided by technology should be regarded as definitive".  (Notice that there is no "Umpire's Call" verdict on the point of pitching.)
The controversial aspects of Hawk-Eye in cricket are locating the point of impact and determining whether the ball would have hit the stumps.  Those are much more difficult problems, both conceptually and technologically.
Comment: @Gugg Hawk-Eye indicated that Graeme Swann's "worst ball of the century," a full toss which dismissed Chris Rogers LBW, [would have missed leg stump](http://www.ecbtv.co.uk/video/i/3322025/title/england-v-australia-2nd-investec-ashes-test-highlights-day-2-pm/f/tests;years:2013).
Comment: +1. Question: I don't recall an instance of Hawk-Eye being shown or used on a full toss (meaning: hitting the batsman before hitting the ground). Did I just miss those or what?
Comment: I can't see why it wouldn't be used.