Emily Anne Brown
따르다

팔로우한 후에는 그의 동적 정보를 적시에 추적할 수 있습니다.

최근 뉴스
Windows 11이 특정 앱에서 화면을 깜박이게하는 이유는 무엇입니까?

Windows 11이 특정 앱에서 화면을 깜박이게하는 이유는 무엇입니까?

Windows 11 특정 응용 프로그램의 화면 깜박임 문제는 일반적으로 드라이버, 호환성 또는 설정에 의해 발생합니다. 솔루션은 다음과 같습니다. 1. 디스플레이 드라이버, 업데이트 또는 롤백을 확인하십시오. 2. 응용 프로그램 하드웨어 가속도를 끄십시오. 3. HDR, Zoom과 같은 디스플레이 설정을 조정하십시오. 4. 전체 화면 동작을 변경하십시오. 대부분의 문제는 단계별 문제 해결을 통해 해결할 수 있습니다.

Jul 29, 2025 am 05:16 AM
Windows 위젯 문제 해결

Windows 위젯 문제 해결

Windowswidgets가 "로드"를 표시하거나 표시되지 않으면 네트워크, 시스템 설정 또는 캐시 문제로 인해 발생할 수 있습니다. 다음 단계를 따라 문제 해결을 수행 할 수 있습니다. 1. 네트워크 연결이 정상인지 확인하고 웹 페이지에 액세스 할 수 있는지 확인하고 프록시 또는 방화벽 제한을 제외 할 수 있습니다. 2. WindowswebexperienceHost 및 Wind 3. Cache를 지우기 위해 PowerShell을 통해 WebExperIenceHost 패키지를 재설정하십시오. 4. 로케일 설정이 올바른지 확인하거나 계정을 변경하거나 시스템 언어를 영어로 수정하여 호환성 문제를 해결합니다.

Jul 29, 2025 am 05:11 AM
Windows 11 알림 배너를 관리하는 방법

Windows 11 알림 배너를 관리하는 방법

Windows 11에 대한 알림 배너를 관리하려면 키는 완전히 끄지 않고 주문형으로 설정하는 것입니다. 1. 특정 응용 프로그램에 대한 알림 닫기 : 설정> 시스템> 알림으로 이동하고 응용 프로그램을 선택하고 알림을 끄거나 일부 기능 만 유지합니다. 2. 초점 기간을 사용하여 간섭을 줄입니다. 설정> 시스템> 초점 기간을 설정하여 중요한 알림 만 허용하고 컴퓨터를 사용할 때 자동으로 활성화하도록 설정할 수 있습니다. 3. 알림 우선 순위 설정 : 고급 알림 설정에서 우선 순위가 높은 우선 순위 및 보조 응용 프로그램을 낮은 우선 순위로 설정합니다. 4. 알림 동작 및 외관 조정 : 알림을 마우스 오른쪽 버튼으로 클릭하여 작업을 선택하고 마우스를 호버링하여 배너를 닫으므로 현재 작업에 영향을 미치지 않습니다. 5. 알림 센터를 사용하여 통일 된 방식으로보고 처리하십시오. 작업 표시 줄의 작은 플래그 아이콘을 통해 중앙에서보기

Jul 29, 2025 am 05:07 AM
Windows 11이 마우스 커서를 더 크게 만드는 이유는 무엇입니까?

Windows 11이 마우스 커서를 더 크게 만드는 이유는 무엇입니까?

yourmousecursormayAppearUnusallyLargeInwindows11duetoAccessibilitySettings, DisplayCaling, CustomCursorthemes, OrAccessibilityTools.1.CheckAccessitibilitySettingSandAdAdAdAdAdSicizeSizeBackTo100%ifit'sincreed.2.ReviewDisplaysplayscalingsplayscalingsppraysplaysppraysppraysppraysppraysplayscalingsplayscalingspprayscalings size a

Jul 29, 2025 am 05:06 AM
마우스 커서
PHP API의 데이터 유형 캐스팅에 대한 실용적인 접근

PHP API의 데이터 유형 캐스팅에 대한 실용적인 접근

다운 스트림 오류를 방지하기 위해 입력 데이터를 조기에 확인하고 변환합니다. 2. 내부 일관성을 보장하기 위해 PHP7.4의 유형 특성 및 반환 유형을 사용하십시오. 3. 비즈니스 로직이 아닌 데이터 변환 단계에서 유형 변환을 처리합니다. 4. 사전 검증을 통한 안전하지 않은 유형 변환을 피하십시오. 5. 일관된 출력 유형을 보장하기 위해 JSON 응답을 정규화합니다. 6. 큰 API에서 가벼운 DTO 중앙 집중식, 다중화 및 테스트 유형 변환 로직을 사용하여 간단하고 예측 가능한 방식으로 API의 데이터 유형을 관리합니다.

Jul 29, 2025 am 05:02 AM
PHP Casting
PHP 엔진의 일정한 표현 평가 이해

PHP 엔진의 일정한 표현 평가 이해

phpevaluatesConstantExpressionSAtCompileTimetoimProvePerformanceandenableAreclyErrordetection.1. ConstantExpressionEvaluationMeanScomputingValuesDuringCompilationwhenAlloperAndsArnStantsLikeliterals, ClassConstants, OrpredefinedConstants.2.Php'se

Jul 29, 2025 am 05:02 AM
PHP Constants
우주선 연산자 (``) : 복잡한 분류 로직을 단순화합니다

우주선 연산자 (``) : 복잡한 분류 로직을 단순화합니다

theSpaceshipoperator () Inphpreturns-1,0, Or1basedonwhethertheleftoperandisthan, equalto, orgreaterthantherightoperand, makingitidealforsortingcallbacks.2.itsimplifiesnumericandspringcomparisons, 제거버 보스-엘로 지신, uasort.

Jul 29, 2025 am 05:02 AM
PHP Operators
Windows 11 SNAP 그룹 수정 레이아웃을 기억하지 않습니다

Windows 11 SNAP 그룹 수정 레이아웃을 기억하지 않습니다

ifsnapgroupsinwindows11don'tsave, 시스템> 시스템> 멀티 태스킹, 토글 "Snapwindows"및 "Snaplayouts", AndenableTheoptionToshowsNapsuggestions; 다음, RespartFilePrilePlorERVIATASKManagERRRELLEXPER

Jul 29, 2025 am 05:01 AM
PHP의 부동 소수 부정확성의 함정 탐색

PHP의 부동 소수 부정확성의 함정 탐색

플로팅 포인트 수는 부정확합니다. PHP에서는 일반적인 문제입니다. 대답은 IEEE754 이중 프리즈 형식을 사용하여 소수점 소수를 정확하게 표현할 수 없게 만듭니다. 1.0.1 또는 0.2와 같은 숫자는 이진의 무한 루프 소수이며 컴퓨터는 오류를 일으키기 위해 잘라야합니다. 2. 부동 소수점 번호를 비교할 때는 abs ($ a- $ b)와 같은 == 대신 공차를 사용해야합니다.

Jul 29, 2025 am 05:01 AM
PHP Math
PHP의 객체 관계 매핑 (ORM) 성능 튜닝

PHP의 객체 관계 매핑 (ORM) 성능 튜닝

N 1 쿼리 문제를 피하고 관련 데이터를 미리로드하여 데이터베이스 쿼리 수를 줄입니다. 2. 메모리와 대역폭을 저장하기 위해 완전한 엔티티를로드하지 않도록 필요한 필드 만 선택하십시오. 3. 교리의 2 차 캐시 또는 Redis 캐시 고주파 쿼리 결과와 같은 캐시 전략을 합리적으로 사용하십시오. 4. 엔티티 수명주기를 최적화하고 정기적으로 Clear ()을 호출하여 메모리를 자유롭게하여 메모리 오버플로를 방지합니다. 5. 데이터베이스 색인이 존재하는지 확인하고 비효율적 인 쿼리를 피하기 위해 생성 된 SQL 문을 분석하십시오. 6. 변경 사항이 필요하지 않은 시나리오에서 자동 변경 추적을 비활성화하고 배열 또는 경량 모드를 사용하여 성능을 향상시킵니다. ORM을 올바르게 사용하려면 개발 효율을 유지하면서 응용 프로그램 성능을 보장하기 위해 SQL 모니터링, 캐싱, 배치 처리 및 적절한 최적화를 결합해야합니다.

Jul 29, 2025 am 05:00 AM
php orm
PHP의 논리 연산자의 단락 평가 활용

PHP의 논리 연산자의 단락 평가 활용

단락 평가는 PHP의 논리 연산자의 중요한 기능으로 성능을 향상시키고 오류를 피할 수 있습니다. 1. &&를 사용하는 경우 왼쪽 피연산자가 False 인 경우 오른쪽 피연산자는 더 이상 평가되지 않습니다. 2. ||를 사용하는 경우 왼쪽 피연산자가 참이면 오른쪽 피연산자가 건너 뜁니다. 3. 빈 객체 호출을 피하기 위해 if ($ user && $ user-> haspermission ( 'edit'))과 같은 객체 메소드를 안전하게 호출하는 데 사용될 수 있습니다. 4. 고가의 기능 호출을 건너 뛰는 것과 같은 성능을 최적화 할 수 있습니다. 5. 기본값을 제공 할 수 있지만 || 거짓 가치에 민감하며, 당신은 그것을 사용할 수 있습니다 ?? 대신 운영자; 6. 주요 작업이 단락되지 않도록 건너 뛸 수있는 오른쪽에 부작용을 배치하지 마십시오. 단지

Jul 29, 2025 am 05:00 AM
PHP if Statements
PHP 문자열 연결에서 일반적인 함정을 피하십시오

PHP 문자열 연결에서 일반적인 함정을 피하십시오

AvoidTypeconfusion (예 : 'hello'

Jul 29, 2025 am 04:59 AM
PHP Concatenate Strings
첫 번째 동적 웹 페이지 구축 : 실용적인 PHP 프라이머

첫 번째 동적 웹 페이지 구축 : 실용적인 PHP 프라이머

XAMPP/MAMP를 설치하거나 PHP 내장 서버를 사용하고 파일이 .php Extension으로 저장되었는지 확인하십시오. 2. Hello.php에서 현재 시간을 표시하십시오. 3. greet.php에서 $ _get을 통해 사용자 입력을 받고 xss를 방지하기 위해 htmlspecialchars ()를 사용하십시오. 4. include'header.php '를 사용하십시오. 페이지 헤더를 멀티 플렉스; 5. 개발 중에 오류 보고서 활성화, 변수는 $로 시작하고 배열을 사용하여 데이터를 저장하고 항상 사용자 입력을 필터링합니다. 사용자 입력에 응답하고 동적 컨텐츠를 표시하며 재사용 코드에 응답 할 수있는 동적 웹 페이지를 만들었습니다. 이것은 완전한 웹 응용 프로그램을 향한 핵심 단계입니다. 나중에 데이터베이스에 연결하거나 로그인 시스템을 구축 할 수 있지만 현재 직접 확인해야합니다.

Jul 29, 2025 am 04:58 AM
PHP Introduction
견해 강화 : XSS 방지에서`htmlspecialchars ()`의 중요한 역할

견해 강화 : XSS 방지에서`htmlspecialchars ()`의 중요한 역할

HTMLSpecialchars ()는 XSS 공격에 대한 주요 방어선으로 특수 문자를 HTML 엔티티로 변환하여 브라우저에서 입력 한 컨텐츠가 실행 가능한 코드가 아닌 일반 텍스트로 취급되도록합니다. 1. 그것을 사용할 때는 취약점을 구문 분석하지 않도록 문자 인코딩 (예 : 'UTF-8')을 지정해야합니다. 2. ENT_QUOTES 플래그는 항상 속성 컨텍스트에서 주입을 방지하기 위해 단일 및 이중 인용문을 피할 수 있도록합니다. 3. 저장되지 않고 출력에서 탈출하고 데이터 고정화 및 반복 탈출을 피해야합니다. 4. 모든 XSS 만 방어하기 위해 의존 할 수는 없습니다. JavaScript 데이터를 처리하고 Rich Text에 htmlp를 사용하려면 urlencode (), json_encode ()와 함께 URL을 처리해야합니다.

Jul 29, 2025 am 04:57 AM
PHP Escape Characters
최신 PHP 킥 스타트 : 필수 툴링에 대한 개발자 안내서

최신 PHP 킥 스타트 : 필수 툴링에 대한 개발자 안내서

USECOMPOSERFORDENCERMANEGRANITENANGAMENTANAUTOLOWORDINGWITHCOMPOSEREQUIREANDCOMPOSER.LOCK.2.FOLLOWPSR-12CODEDADERSTANGANTAUTOUTOMATEDBYPHPCSFIXERCONSESTENT, ReadAbleCode.3.3.WriteTestSwithPhUnitToEnsEreCoderELiabondAndPreverGressions.4USORLARAVELEL

Jul 29, 2025 am 04:56 AM
PHP Introduction
수치 정밀도의 뉘앙스 :`round ()`,`ceil ()`및`floor ()`함정

수치 정밀도의 뉘앙스 :`round ()`,`ceil ()`및`floor ()`함정

Round ()는 "Roundhalftoeven"을 사용하고 "Roundhalfup"을 사용하고 Soround (2.5) Returns2andround (3.5) returns4tominimizestatisticalbias, thatmaysurprisoSeExpectingTraditionArounding.2

Jul 29, 2025 am 04:55 AM
PHP Math
후드 아래 : PHP가 내부적으로 문자열 연결을 처리하는 방법

후드 아래 : PHP가 내부적으로 문자열 연결을 처리하는 방법

php'sstringconcatenationusing the.operatorinvolvscreatinganewzend_stringstructurewithlength, hash 및 datafields.2.theconcat_functionperformStypechecking, 계산법, AllocatesMemory, CopiesBothStrings, andreturnSanewzval.

Jul 29, 2025 am 04:54 AM
PHP Concatenate Strings
DOOM의 피라미드 리팩토링 : 블록 인 경우 클리너 PHP 전략

DOOM의 피라미드 리팩토링 : 블록 인 경우 클리너 PHP 전략

useAreBreTurnStoHandlePrecOnditionSandeLiminatePeePnestingByExtonFastOnFailUrecases.2.ValidateAllConditionSupfrontusingAdeDedCetedHelperMethodTokeEpTheMainLogicCleanTeal.3.centRalizeValidationWithextionstry/CatchblockStomaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintaintable

Jul 29, 2025 am 04:54 AM
PHP if Statements
Windows 11 네트워크 발견 수정 작동하지 않습니다

Windows 11 네트워크 발견 수정 작동하지 않습니다

네트워크 검색 기능은 Windows 11에서 제대로 작동하지 않습니다. 다음 단계를 통해 문제를 해결하고 수정할 수 있습니다. 1. 네트워크 유형이 "전용", 열기 설정 → 네트워크 및 인터넷 → 고급 네트워크 설정 → 더 많은 네트워크 설정을 클릭하고 "전용"으로 설정하십시오. 2. FunctionDiscoveryResourcepublication, SSDPDiscovery 및 UPNPDEVICEHOST를 포함한 관련 서비스를 확인하고 시작하십시오. 시작 유형이 "자동"이고 실행되었는지 확인하십시오. 3. 방화벽 설정을 조정하고 고급 공유 설정에서 네트워크 검색 및 파일/프린터 공유를 활성화하고 인바운드 규칙의 "네트워크 검색"관련 항목이 활성화되어 있는지 확인하십시오.

Jul 29, 2025 am 04:53 AM
많은 수의 산술 가속도 : PHP의 GMP 확장에 대한 깊은 다이빙

많은 수의 산술 가속도 : PHP의 GMP 확장에 대한 깊은 다이빙

gmpissentialforhandlinglargeintegersinphpbeyondnativelimits.1.gmpenablestrary-precisionintegerarithicusingoptimizedclibraries, unlikenativeintegersthatoverflowflowflowfflowertovestring rastring.2.usegmpforHeavyInggerationsiving-undercatorial

Jul 29, 2025 am 04:53 AM
PHP Math
코드베이스에서 안전하고 효율적인 유형 주조를위한 모범 사례

코드베이스에서 안전하고 효율적인 유형 주조를위한 모범 사례

Prefersafecastingmechanismslikedynamic_castinC ,'as'inC#,andinstanceofinJavatoavoidruntimecrashes.2.Alwaysvalidateinputtypesbeforecasting,especiallyforuserinputordeserializeddata,usingtypechecksorvalidationlibraries.3.Avoidredundantorexcessivecastin

Jul 29, 2025 am 04:53 AM
PHP Casting
현대 시대의 PHP : 레거시 뿌리에서 고성능 백엔드까지

현대 시대의 PHP : 레거시 뿌리에서 고성능 백엔드까지

phpisstillRelevantin2024BecauseITASISITESOVOLVEDINTOAHIG-PEPER-PEPER-PERFERFERFERFERFERFERFERFERFERFERFERFERFER-FORMONGAHING, 1.EARLYVERSIONSEARDEADBADREPUTATIONDUETOINCONSISTENTFINCTIONS, GLOBALSTATEMISUSE 및 SECURITYFLAWS.2.PHP7AND8BROUGHENTMAJORIMPROVENTS : EXECIPEDDOUBLEBERD, JITCOLITIONWA

Jul 29, 2025 am 04:52 AM
PHP Introduction
불변성을 가진 건축 : PHP에서 상수의 전략적 사용

불변성을 가진 건축 : PHP에서 상수의 전략적 사용

constants는 whildshouldtoenforceimmutabilityinphpforbetcodeclarityandsafety; 1) useconstantsforconfigurationAndomainlogiclikestatuscodeorapiendspointstoavoidmagicvalues; 2) preferclassorinterscopedconstantsoverglobalonestoimprovenamespacing and

Jul 29, 2025 am 04:52 AM
PHP Constants
C 구동 전체 : Windows 10/11에서 디스크 공간을 확보하는 방법

C 구동 전체 : Windows 10/11에서 디스크 공간을 확보하는 방법

C 디스크에서 공간이 불충분 한 문제를 해결하기 위해 임시 파일을 청소하고 스토리지 인식을 가능하게하고, 드물게 사용되는 프로그램을 제거하고, 대규모 파일을 전송함으로써이를 달성 할 수 있습니다. 1. 디스크 청소 도구를 사용하여 임시 파일을 삭제하여 수백 MB를 여러 GB 공간으로 확보하십시오. 2. Storagesense가 쓸모없는 파일을 자동으로 지우도록 할 수 있습니다. 3. 많은 공간을 차지하는 비 필수 애플리케이션을 제거합니다. 4. 큰 파일 또는 기본 스토리지 위치를 다른 파티션 또는 외부 저장 장치로 전송하여 C 디스크의 압력을 효과적으로 완화시킵니다.

Jul 29, 2025 am 04:50 AM
'USB 장치가 인식되지 않음'을 수정하는 방법은 무엇입니까?

'USB 장치가 인식되지 않음'을 수정하는 방법은 무엇입니까?

먼저 USB 장치와 인터페이스가 정상인지 확인하고 USB 인터페이스 또는 컴퓨터 테스트를 교체하십시오. 2. USB 드라이버를 업데이트하거나 다시 설치하고 장치 관리자를 통해 비정상적인 장치를 제거하고 다시 연결하십시오. 3. USB 캐시 또는 레지스트리 잔류 물을 지우고 모든 USB 컨트롤러를 제거하고 컴퓨터를 다시 시작하십시오. 4. USB 관련 옵션이 활성화되어 있는지 시스템 전원 관리 및 BIOS 설정을 확인하십시오. 문제는 일반적으로 인터페이스 접촉이 좋지 않은 경우, 비정상적인 드라이버 또는 시스템 설정으로 인해 발생합니다. "USB DevicenotRececenized"프롬프트 문제를 해결하기위한 단계에 따라.

Jul 29, 2025 am 04:50 AM
내 Windows 노트북 외부 하드 드라이브가 나타나지 않습니다

내 Windows 노트북 외부 하드 드라이브가 나타나지 않습니다

Windows 랩톱에 외부 하드 디스크를 표시 할 수없는 경우 먼저 물리적 연결을 확인하고 USB 케이블 또는 포트를 교체하고 하드 디스크 전원이 정상인지 확인하십시오. 둘째, 하드 디스크가 파일 탐색기 및 디스크 관리에서 인식되는지 확인하고 드라이브가 할당되지 않은 경우 수동으로 추가하십시오. 그런 다음 장치 관리자를 통해 드라이버를 제거하고 장치를 다시 플러그로 뽑거나 플러그를 뽑거나 하드웨어 및 장치 문제 해결을 실행하십시오. 하드 디스크가 "할당되지 않은"또는 "원시"로 표시되면 먼저 데이터 복구를 시도한 다음 포맷 할 수 있습니다. 문제가 여전히 해결되지 않으면 하드웨어 손상 일 수 있으므로 전문적인 도움을 요청하는 것이 좋습니다.

Jul 29, 2025 am 04:48 AM
'기기 준비되지 않은'오류를 수정하는 방법?

'기기 준비되지 않은'오류를 수정하는 방법?

"devicenotready"오류가 발생할 때 일반적으로 다음 단계를 통해이를 해결할 수 있습니다. 1. 장치를 다시 플러그로 뽑거나 플러그를 뽑거나 USB 인터페이스를 교체하여 연결이 안정적인지 확인하십시오. 2. 다른 컴퓨터의 장치를 테스트하여 손상되었는지 확인하십시오. 3. 장치의 전원이 정상인지 확인하십시오. 4. 디스크 관리를 입력하여 장치 상태를 보거나 드라이브 문자를 할당하거나 디스크를 초기화하십시오. 5. 관련 드라이버 업데이트 또는 제거; 6. 바이러스 바이러스 소프트웨어를 사용하여 바이러스를 스캔하십시오. 7. CHKDSK 명령을 통한 파일 시스템 오류 수리. 대부분의 문제는 장치를 즉시 포맷하거나 버리지 않고 위의 단계로 해결할 수 있습니다.

Jul 29, 2025 am 04:46 AM
버그 수정
Windows 문제 해결 Windows 생체 인식 로그인 문제

Windows 문제 해결 Windows 생체 인식 로그인 문제

Windows 생체 인식 로그인 문제가 발생할 때 다음 단계를 따라 다음 단계를 수행 할 수 있습니다. 1. 하드웨어와 드라이버가 정상인지 확인하고 장치 관리자의 생체 인식 장치 또는 이미지 장치에 노란색 느낌표 마크가 있는지 확인하거나 다시 설치하는지 확인하십시오. 2. 생체 인식 정보를 다시 삭제하고 추가하고 설정 → 계정 → 로그인 옵션으로 이동하여 이전 데이터를 지우고 컴퓨터를 다시 시작하고 재 입력하십시오. 3. 시스템 권한 및 보안 정책을 확인하고 GPEDIT.MSC를 사용하여 그룹 정책이 생체 기능을 제한하는지 확인하고 SFC/Scannow를 실행하여 시스템 파일을 수리하십시오. 4. 전력 관리 설정, 개인 정보 보호 권한 가능 상태 및 계정 유형 제한과 같은 다른 일반적인 문제를 처리하십시오. 위의 작업을 통해 대부분의 문제를 해결할 수 있습니다. 여전히 처리 할 수없는 경우 공장 연락을 고려하십시오.

Jul 29, 2025 am 04:46 AM
플러그를 꽂을 때 Windows 노트북이 충전되지 않습니다

플러그를 꽂을 때 Windows 노트북이 충전되지 않습니다

전원 공급 장치를 연결하고 충전하지 않으면 전원 어댑터와 충전 포트가 정상인지 확인하십시오. power 전원 표시등이 켜져 있는지 확인하고 화면에 "전원 연결이지만 충전되지 않는"프롬프트가 있는지 확인하십시오. ② 충전 헤드가 연결되어 있는지, 케이블이 손상되었는지, 인터페이스가 느슨한 지 여부를 확인하고 소켓 또는 USB-C 케이블 테스트를 교체하려고합니다. wasking 작업 표시 줄의 배터리 아이콘을 통해 시스템 프롬프트를 확인하고 필요한 경우 Battery Report를 생성하는 데 필요한 경우 PowerCFG/Battery Report 명령을 실행합니다. ④ 배터리 드라이버를 업데이트하거나 다시 설치하고 BIOS를 입력하여 충전 관리 설정을 확인한 다음 브랜드 랩톱의 비정상적인 전원 관리 소프트웨어를 확인하십시오. ⑤ 배터리가 연령화되어 충전 할 수없는 경우 공식 웹 사이트 또는 애프터 판매 검사의 지원 상태를 확인하고 일반 채널을 통해 배터리 교체를 고려할 수 있습니다. 위의 단계가 유효하지 않으면 저희에게 연락하는 것이 좋습니다.

Jul 29, 2025 am 04:45 AM