CR: Apple iPhone 15 Pro Max is the best-selling smartphone for Q1 '24

G

GSMArena.com - Latest articles

CR: Apple iPhone 15 Pro Max is the best-selling smartphone for Q1 '24​

gsmarena_001.jpg


Yordan 07 May 2024


Apple and Samsung dominated the top 10 best-selling smartphone charts in Q1 of 2024, as revealed by Counterpoint Research's latest report. Each company had five phones on the list, but it was Apple that came on top with the iPhone 15 Pro Max becoming the best-selling phone, followed by iPhone 15 in second and iPhone 15 Pro in third.

gsmarena_001.jpg

The research pointed out that 5G is becoming more and more present in the everyday life of the average consumer, as all 10 devices in the list are 5G-enabled. Also, the trend towards premiumization is clearly visible, with 7 phones being priced above $600.

The Pro series of iPhones is also growing in popularity. In 2020, the share of Pro devices was 24%, while currently, it is 60% of Apple's sales value in Q1 2024. One reason is that Apple offers substantial upgrades and enhancements for users who decide to buy a Pro variant.

Samsung Galaxy S24 and Galaxy S24 Ultra both placed in the top 10, thanks to Galaxy AI. It was over a month before the new technology reached older devices, such as the 2023 flagship foldables, the Galaxy S23 lineup, and others.

Consumers are holding onto their smartphones for longer periods, noted Counterpoint. This leads to customers opting for a high-end smartphone that will ensure their devices remain “technologically relevant” for a longer period of time.

Apple iPhone 15 Pro Max​

256GB 8GB RAM$ 887.04
amazon-com1.png
$ 1,199.99
best-buy-1.png
512GB 8GB RAM$ 1,159.95
amazon-com1.png
$ 1,399.99
best-buy-1.png

These are the best offers from our affiliate partners. We may get a commission from qualifying sales.​


Expectations are premium devices to capture a larger share of the entire smartphone market, as companies are focusing on leaner portfolios with premium features.

Source

Related articles
Total reader comments: 0

ADVERTISEMENT
 

Unreplied Threads

Random pages across SE feel "dead", due to SE WebSocket misbehaving: sometimes connecting, sending heartbeat, but no data

I work with and on SmokeDetector (SD). Over the last several days (starting last Monday, 2020-05-111), we've noticed times when SmokeDetector has stopped scanning posts on Stack Exchange. After investigating why this was happening, I found there are now times when SmokeDetector does connect to the Stack Exchange WebSocket, but doesn't get any notifications of activity anywhere on the SE network.2

What happens: no errors, but no data for about 9.67% of connection attempts​


The WebSocket is opened, a subscription is sent, but the only data that is sent from SE on the WebSocket is the heartbeat.3 No data is sent other than the heartbeat, no mater how long the socket is left open, even hours. No errors are raised on the socket. There's just no data.

In testing, I've been able to duplicate the problem in both Python and JavaScript (multiple browsers and IP addresses). I've run 331 trials of opening the WebSocket, sending the 155-questions-active channel specifier and then waiting for data. Out of those trials, 32 times the WebSocket connected, but failed to send data, other than the heartbeat.4 That works out to failing for 9.67% of connection attempts.

Does this affect other things than SmokeDetector? Yes, it affects SE in general.​


Stack Exchange uses WebSockets for push notifications of status change on a wide variety of data across the network. This problem is likely affecting a significant percentage of times where an endpoint connects to the server.

The problem is probably affecting roughly 10% of page views, but it's not something that's going to be readily noticed as a specific, consistent problem, because it affects live page updates after the page is loaded (much less noticeable), and will usually resolve itself when the page is reloaded.

On each page load, the JavaScript on the page connects to the WebSocket in order to keep the page "alive" (i.e. get notifications of actions done elsewhere). On the random page loads where the problem will occur, it will just feel like the page is a bit more static than normal. The page will feel "Dead". Given that it's something that has a 90% chance of being resolved when the page is reloaded, it's likely that, when it's noticed, it's just being written off by people as a glitch.

Over the last few days, I've definitely noticed times when there have been missing notifications within a SE page for events that happen on the network (e.g. not informed of post score changes, a post being deleted or edited, inbox notifications, reputation changes, a substantial difference between updates on the same page in two tabs, etc.). The problem has been noticed by at least one other person. It's likely been noticed by many other people, but if you're not aware that there's a systemic problem, it's easy to just wave it off as some intermittent issue, as it's 90% likely to go away when the page is reloaded.

Mitigation​


We've written code to mitigate the issue for SmokeDetector (detect that we're not getting data and reconnect). For normal viewing of Stack Exchange pages, just reload the page.

Duplication​


You can try connecting to the SE WebSocket for yourself using the Stack Snippet below:


Code:
(() => {
  'use strict';

  let webSocket = null;
  let noAdd = true;
  let startTime = 0;
  const passEl = document.getElementById('pass');
  const failEl = document.getElementById('fail');
  const failPercentEl = document.getElementById('failPercent');
  const startTimeEl = document.getElementById('startTime');
  const elapsedTimeEl = document.getElementById('elapsedTime');
  const diffLabel = {
      days: 'd',
      hours: 'h',
      minutes: 'm',
      seconds: 's',
  };
  const diffOrder = [
      'days',
      'hours',
      'minutes',
      'seconds',
  ];

  function incrementAndShowPercent(addPass, addFail) {
    if (noAdd) {
      return;
    }
    const pass = +passEl.textContent + addPass;
    passEl.textContent = pass;
    const fail = +failEl.textContent + addFail;
    failEl.textContent = fail;
    const failPercent = Math.round((10000 * fail) / (pass + fail))/100
    failPercentEl.textContent = failPercent;
    if (fail) {
      failEl.classList.add('isFailing');
      failPercentEl.classList.add('isFailing');
    }
    /* The elapsed time code was copied, then significantly modified, from
     * https://codereview.stackexchange.com/a/160240/53535 by Przemek
     * https://codereview.stackexchange.com/users/97934/przemek */
    const elapsed = (Date.now() - startTime) / 1000;
    const diff = {
      days: Math.floor(elapsed / 86400),
      hours: Math.floor((elapsed / 3600) % 24),
      minutes: Math.floor((elapsed / 60) % 60),
      seconds: Math.floor(elapsed % 60),
    };
    const elapsedText = diffOrder.reduce((sum, key) => {
      if (sum || diff[key] || key === 'seconds') {
          sum += ` ${diff[key]}${diffLabel[key]}`;
      }
      return sum;
    }, '').trim();
    elapsedTimeEl.textContent = elapsedText;
  }

  function registerWebSocket() { // eslint-disable-line no-unused-vars
    if (webSocket) {
      if (typeof webSocket.removeEventListener === 'function') {
          //There can be additional events that mess up the count.
          webSocket.removeEventListener('message', socketOnMessage);
      }
      if (typeof webSocket.close === 'function') {
          // Close any existing WebSocket.
          webSocket.close();
      }
    }
    webSocket = new WebSocket('wss://qa.sockets.stackexchange.com');
    webSocket.addEventListener('message', socketOnMessage);
    webSocket.addEventListener('open', () => {
      //console.error('WS: Open:');
      webSocket.send('155-questions-active');
      console.log('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv');
      console.log('WS: Open & Subscribed to active questions');
      noAdd = false;
    });
    webSocket.addEventListener('close', event => {
      //console.log('WS: Closed: event.code', event.code, '::  event:', event);
      console.log('WS: Closed');
    });
    webSocket.addEventListener('error', event => {
      console.error('WS: Error:');
      console.log('WS: Error: event', event);
    });
  }

  function socketOnMessage(event) {
    const messageObject = JSON.parse(event.data);
    const data = messageObject.data;
    let dataObject = data;
    try {
      dataObject = JSON.parse(data);
    } catch(error) {
      // Ignore any errors
    }
    messageObject.data = dataObject;
    console.log('WS: messageObject:', messageObject);
    if (messageObject.action === 'hb') {
      //At least for the 155-questions-active socket, the hb is every 5 minutes.
      incrementAndShowPercent(0, 1);
      noAdd = true;
      console.error('WS: heartbeat Received:');
      //console.error('WS: Responding to heartbeat:');
      //webSocket.send(data);
      registerWebSocket();
    } else {
      incrementAndShowPercent(1, 0);
      noAdd = true;
      registerWebSocket();
    }
  }

  document.getElementById('start').addEventListener('click', () => {
    passEl.textContent = 0;
    failEl.textContent = 0;
    failEl.classList.remove('isFailing');
    failPercentEl.textContent = 0;
    failPercentEl.classList.remove('isFailing');
    startTime = Date.now();
    startTimeEl.textContent = (new Date(startTime)).toISOString();
    registerWebSocket();
  });

  document.getElementById('stop').addEventListener('click', () => {
    webSocket.close();
  });
})();

Code:
span:not([id]) {
  margin-left: 10px;
}
span.extraSpace {
  margin-left: 20px;
}
#fail.isFailing,
#failPercent.isFailing {
  color: red;
  font-weight: bold;
}
#pass,
#failPercent {
  color: #00d000;
  font-weight: bold;
}

Code:
<button id="start">Start/Restart</button>
<button id="stop">Stop</button>
<span> Pass: <span id="pass">0</span></span>
<span> Fail: <span id="fail">0</span></span>
<span>Fail %: <span id="failPercent">0</span> %</span>
<span class="extraSpace">Started: <span id="startTime"></span></span>
<span class="extraSpace">Elapsed: <spam id="elapsedTime"></span></span>
</br>You may want to open the Web Console (F12), as it's easier to read the output there.</br>
If you don't see anything in the console for 5 minutes after "WS: Open & Subscribed to active questions", that means that attempt to connect (probably) failed.</br>


  1. See gap in "API quota rolled over with" messages in this chat search. There should be one message per day, every day at nearly the same time, unless we've switched instances. This represents days where SmokeDetector stalled out in processing posts. In addition, the following image shows times when there was no scanning or update to the reported SE API quota (both indicated with red circles). The green circle shows what the rising edge of the API quota graph should normally look like. The fact that it isn't completely vertical in the red circled areas is due to data missing as a result of no scans being performed
    enter image description here
    To be clear, the dates and times shown above are only show the points in time at which the problem randomly affected SmokeDetector and the length of time from then to when the bot was rebooted. Those dates and times don't reflect when the problem was more likely to occur.
  2. SD uses the 155-questions-active channel on the WebSocket available from wss://qa.sockets.stackexchange.com/, which notifies about (almost) all post activity on all sites.
  3. The "heartbeat" is a message that SE sends which says "hb". After receiving the heartbeat, the consumer of the WebSocket must send some data to indicate that the WebSocket is still active. The "heartbeat" is administrative and doesn't have any data for the user to consume.
  4. "Failure" here is defined never receiving any data for a full 5 minutes from the opening of the WebSocket to receiving the first heartbeat on the socket. While it's possible that some of these failures were that there just wasn't any activity on any SE site for 5 minutes, that's … very rare.

¿Cómo puedo detectar cuando se activa o desactiva un boton en C?

He estado buscando varias maneras para encontrar codigos de notifcacion de un botón de Winapi en C para detectar si un botón ha sido seleccionado o activado; simplemente dando un solo click en el mismo, sin tener que esperar hasta que suelte el click del ratón. Y tambien cuando ha sido deseleccionado o desactivado; cuando hacemos click fuera del area determinada del botón.

El mensaje WM_NCLBUTTONDOWN es parecido, ya que envia si se ha dado un click fuera de la ventana, pero eso lo obtiene solamente en el evento de la ventana principal y no del botón.

Ejemplo:

Code:
#include <windows.h>

LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
    switch(msg) 
    {
        case WM_CREATE: {
            CreateWindow("button","Button",WS_VISIBLE|WS_CHILD,15,15,75,22,hwnd,0,0,0);
        } break;
        
        case WM_COMMAND: {
            switch(HIWORD(wp)) 
            {
                case BN_CLICKED: {
                    //Cuando soltamos el click en un boton
                } brak;
            }
        } break;
        case WM_DESTROY: {
            PostQuitMessage(0);
            return 0;
        } break;
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}

Esto lo que hace es detectar cuando soltamos el click en un boton, no cuando directamente hacemos el click.

Por el momento el evento debe de ser de todos los botones en general de la ventana, así que no hace falta especificar el identificador del boton.

Hilbert spaces that include algebraic polynomials

This question is motivated by a phrase I found in several books/papers about approximation theory, for example, M.J.D.Powell's Approximation Theory and Methods: ''Let $\mathcal{H}$ be a Hilbert space that contains the subspace $\Pi^n$ of algebraic polynomials of degree $n$." (misprint, meaning ''at most $n$''). How many of such spaces can we find? Let's state the question formally, in several variables.

Let $\Pi^n$ be the space of algebraic polynomials in $d$ variables up to degree $n$, $B \subset \mathbb{R}^d$ a ball (or an open set, not relevant info), and let $(\mathcal{H}, \langle \cdot ,\cdot \rangle)$ be a Hilbert space of real valued functions defined on $B$ such that $\Pi^d \subseteq \mathcal{H}$ (briefly, a Hilbert space of real valued functions that contains at least the polynomials up to degree $n$). For example, Lebesgue spaces $L^2(B,\mu)$ ($\mu$ a Borel measure), or Sobolev spaces $H^k(B)$. Note that in both of these spaces, the inner product is related to the Lebesgue integral (with an appropriate measure and/or appropriate functions). The following two questions arise:

  1. Besides the Lebesgue and the Sobolev, are there any other (nontrivial/interesting) examples of Hilbert spaces that contain at least the polynomials up to degree $n$?
  2. Are there inner products (in such spaces) non-related to Lebesgue integral?

My initial thought was in the following way: as the constants are in $\mathcal{H}$, you get that the functional $f \rightarrow \langle f,1 \rangle$ is continuous, suggesting that the Riesz–Markov–Kakutani representation theorem might be used (in case the space contains the continuous functions), and so the answer to question 2 may be NO...or maybe this can lead to a way to find a counterexample.

How to receive frame sent from balast using rx in dali protocol in arduino

  • ouss bk
  • Physics
  • Replies: 0
I'm using this circuit enter image description here

DALI RX is linked to an arduino.

I'm able to to see the frame using the oscilloscope.

I tried some codes but they didn't work.

Code:
void loop() {
  TRAM[0] = a;
  //delayMicroseconds(416.5/2); // Peut être nécessaire pour la synchronisation

  int etat1 = a;
  int etat2 = a;
  for (int i = 1; i < 18; i++) {
    while (etat1 == etat2) {
      etat2 = digitalRead(Rx);
    }
    TRAM[i] = etat2;
    etat1 = etat2;
    Serial.print(TRAM[i]);
  }
  
  Serial.print("/");
  for (int i = 0; i < 18; i += 2) {
    if (TRAM[i] == 0 && TRAM[i + 1] == 1) {
      response[i] = 0; // Assurez-vous que `response` est correctement défini ailleurs
    } else if (TRAM[i] == 1 && TRAM[i + 1] == 0) {
      response[i] = 1;
    }
  }`

But it didn't work.

Can somebody suggest a code?

How do I power an LED and Buzzer with 9V Supply?

  • far-act
  • Physics
  • Replies: 0
I am trying to add a buzzer and an LED to a circuit with a 9V power source. The LED has a forward voltage of 1.8V and a current draw of 2mA. The Buzzer has a rated voltage of 5V and a current draw of around 20mA. The solution does not have to be that power efficient, something simple would be best.

I think to just power the LED I would need a 3600 ohms resistor, and to just power the buzzer I would need a 200 ohms resistor. However, I do not know how to wire both to the same circuit, and how the components would effect each other.

Dual Power Supply with Hot Swap Controller

  • mali
  • Physics
  • Replies: 0
I am trying to design a power supply that operates within a voltage range of 4.5V-52V. I have set the OV (over-voltage) and UV (under-voltage) values within this range. I have verified the simulation results according to my calculations. The main power supply is +28V_PRM. When both voltages come at the same time, the first circuit drops the voltage of the second circuit below its UV threshold, causing the second circuit to shut off. My circuit consists of 2-fully isolated power supplies. These power supplies do not share a common ground. To prevent this, I use two separate N-Channel MOSFETs. For example, when the first source is at 28V and the second source is at 0V, or vice versa, I see around 17mV at the QS net. When both sources are open, I observe around 1.45V. I couldn't determine if this situation is due to the body diode or something else. Does this pose a problem or am I making a mistake somewhere? In addition, I will later replace the Q5 side with an optocoupler for ground isolation. I appreciate your assistance.

Thanks a lot.

enter image description here

enter image description here

Can I power multiple Constant Current LED fixtures with a Single Constant Voltage Driver?

  • Jake H
  • Physics
  • Replies: 0
I would like to repurpose eight, 8' LED strip lights that were previously individually powered by 1600ma constant current drivers. Is it possibble to power these LED fixtures with a more readily available Constant Voltage driver? I only have one of the previously used drivers (dimmable) which had an output voltage between 10 and 55 so my plan would be to dial down a 60 V power supply to 55 V. As far as limiting the current, my plan would be to put enough fixtures parallel to the power supply that it couldn't exceed the 1600ma per fixture rating. For example if I was to use a 600W power supply my logic is this: 600w / 55v = 10.91A / 7 = 1558ma per fixture at 55V

Is this logic at all correct or will I just smoke the LED's attempting this?

Thanks.
Top