Trang web: http://www.w3resource.com
Thứ Hai, 2 tháng 5, 2016
Thứ Tư, 27 tháng 4, 2016
Phép cộng sử dụng biến Session trong PHP
Sau đây là toàn bộ Code: (Hoặc bạn có thể tải file php tại ĐÂY)
<?php
# PHÉP CỘNG #
session_start();
$k=0;
if(isset($_POST['tinh'])){ //nhấn nút "tính"
if(!isset($_SESSION['giatri'])){ //nếu biến session chưa tồn tại
if(empty($_POST['txta'])) // và nếu ô text rỗng
$_SESSION['giatri']=0; //khởi gán session, khi ô text rỗng
else
$_SESSION['giatri']=$_POST['txta']; //khởi gán session khi ô text có giá trị
}
else{
$_SESSION['giatri']+=$_POST['txta']; //thực hiện phép cộng.
$_POST['txta']="";
}
}
//cho trường hợp load lại trang
//phải kiểm tra lại session do nó chỉ đc tạo khi nhấn nút tính.
if(isset($_SESSION['giatri']))
$k=$_SESSION['giatri'];
# HỦY SESSION #
if(isset($_POST['huy'])){
if(session_destroy())
$k=0;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Phép cộng với Session</title>
<style>
h1{color: #871F1F}
form{
border: 1px solid blue;
padding: 10px;
max-width: 250px;
}
input{
margin: 5px;
}
p{
font-size: 150%;
font-weight: bold;
color: #3B27CE;
}
</style>
</head>
<body>
<h1>Phép cộng sử dụng biến Session</h1>
<form method="POST" action="">
<label>Nhập giá trị: </label>
<input type="text"name="txta">
<input type="submit" name="tinh" value="Tính">
<br>
<input type="submit" name="huy" value="Hủy session">
</form>
<?php
echo "<p>Kết quả: $k</p>";
?>
</body>
</html>
<?php
# PHÉP CỘNG #
session_start();
$k=0;
if(isset($_POST['tinh'])){ //nhấn nút "tính"
if(!isset($_SESSION['giatri'])){ //nếu biến session chưa tồn tại
if(empty($_POST['txta'])) // và nếu ô text rỗng
$_SESSION['giatri']=0; //khởi gán session, khi ô text rỗng
else
$_SESSION['giatri']=$_POST['txta']; //khởi gán session khi ô text có giá trị
}
else{
$_SESSION['giatri']+=$_POST['txta']; //thực hiện phép cộng.
$_POST['txta']="";
}
}
//cho trường hợp load lại trang
//phải kiểm tra lại session do nó chỉ đc tạo khi nhấn nút tính.
if(isset($_SESSION['giatri']))
$k=$_SESSION['giatri'];
# HỦY SESSION #
if(isset($_POST['huy'])){
if(session_destroy())
$k=0;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Phép cộng với Session</title>
<style>
h1{color: #871F1F}
form{
border: 1px solid blue;
padding: 10px;
max-width: 250px;
}
input{
margin: 5px;
}
p{
font-size: 150%;
font-weight: bold;
color: #3B27CE;
}
</style>
</head>
<body>
<h1>Phép cộng sử dụng biến Session</h1>
<form method="POST" action="">
<label>Nhập giá trị: </label>
<input type="text"name="txta">
<input type="submit" name="tinh" value="Tính">
<br>
<input type="submit" name="huy" value="Hủy session">
</form>
<?php
echo "<p>Kết quả: $k</p>";
?>
</body>
</html>
Thứ Ba, 26 tháng 4, 2016
Cách lấy link trực tiếp từ Google Drive
Bước 1: Tạo một Folder dạng chia sẻ.
Bước 2: Click đôi vào thư mục này, trên thanh địa chỉ trình duyệt ta lấy dãy ký tự phía sau: folders/.
Ta gọi dãy ký tự này là mã chia sẻ (mã này là cố định dành cho thư mục này).
Bước 3: Upload file nào đó vào thư mục này, ta sẽ copy tên file (bao gồm cả phần đuôi mở rộng của nó). Lưu ý: tên file không nên có ký tự khoảng trắng.
Khi đó link trực tiếp sẽ có dạng:
http://googledrive.com/host/mã chia sẻ/tên file.
Ví dụ:
http://googledrive.com/host/0B48Pbqnr7x0_ZjlNb2NGdFJHdDg/Pagination_tutorial_final.pdf
Bước 2: Click đôi vào thư mục này, trên thanh địa chỉ trình duyệt ta lấy dãy ký tự phía sau: folders/.
Ta gọi dãy ký tự này là mã chia sẻ (mã này là cố định dành cho thư mục này).
Bước 3: Upload file nào đó vào thư mục này, ta sẽ copy tên file (bao gồm cả phần đuôi mở rộng của nó). Lưu ý: tên file không nên có ký tự khoảng trắng.
Khi đó link trực tiếp sẽ có dạng:
http://googledrive.com/host/mã chia sẻ/tên file.
Ví dụ:
http://googledrive.com/host/0B48Pbqnr7x0_ZjlNb2NGdFJHdDg/Pagination_tutorial_final.pdf
Chủ Nhật, 17 tháng 4, 2016
Thuật toán tính khoảng cách giữa 2 ngày trong C++ (Viết trên Visual Studio 2013)
//Xay dung lop Date #include<iostream> using namespace std; #include<stdio.h> #include<math.h> #include<conio.h> /* Rata Die day one is 0001-01-01 (Lấy mốc là ngày 1 tháng 1 năm 1)*/ int rdn(int y, int m, int d) { if (m < 3) y--, m += 12; return 365 * y + y / 4 - y / 100 + y / 400 + (153 * m - 457) / 5 + d - 306; } void main(){ int A = rdn(2016, 4, 17); int B = rdn(1988, 11, 26); int days = A - B; cout << "\n Ngay A= "<<A<<"\n Ngay B= "<<B<<"\n ==> Khoang cach giua hai ngay la: " << days; _getch(); }
Thứ Ba, 23 tháng 2, 2016
Android
http://thanhnien.vn/cong-nghe/9-ung-dung-khong-nen-cai-dat-tren-android-530164.html
https://tinhte.vn/forums/android-phan-mem.216/
https://tinhte.vn/forums/android-phan-mem.216/
Thứ Bảy, 16 tháng 1, 2016
Ví dụ đơn giản về kế thừa và đa hình trong C# [C# console, Visual Studio 2013]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace CSharpCoBan
{
public class Program
{
static void Main(string[] args)
{
/*
#region KHỞI ĐỘNG
Console.Title = "Header"; // đặt tiêu đề cho Màn hình console
Console.OutputEncoding = UnicodeEncoding.Unicode; // Output trên màn hình có thể hiển thị Unicode
Console.WriteLine("Fist");
//Thread.Sleep(5000); // sẽ đóng màn hình sau 5000 mili giây = 5 giây.
float f = 5.6f; // khai báo kiểu float phải có f ở sau cùng.
double x = 5.5;
#endregion
#region Kiểu enum
//Console.Write(DayOfWeek.Monday);
const int cc = 4;
//cc = 10;
#endregion
* */
Console.InputEncoding = UnicodeEncoding.Unicode;
Console.OutputEncoding = UnicodeEncoding.Unicode;
CollegeStudent cs = new CollegeStudent();
cs.EnterInformation();
cs.DisplayInformation();
UniversityStudent us = new UniversityStudent();
us.EnterInformation();
us.DisplayInformation();
//thu kiem tra ve ham tao voi tinh ke thua
//Student sv01 = new CollegeStudent();
//Student sv03 = new UniversityStudent();
//CollegeStudent x = new CollegeStudent();
//UniversityStudent y = new UniversityStudent();
//y._ToString();
Console.Read(); // dừng màn hình
}
}
#region Ke thua da hinh
/*
Ví dụ về kế thừa và đa hình trong C#
- Xây dựng lớp SV
+ thuộc tính: họ tên, năm sinh
+ phương thức: Khởi tạo, nhập thông tin
- Xây dựng lớp SVCD kế thừa lớp SV
Bổ sung:
+ thuộc tính: điểm năm 1, điểm năm 2, điểm năm 3
+ phương thức: tính điểm tổng kết, in thông tin
- Xây dựng lớp SVDH kế thừa lớp SVCD
Bổ sung:
+ thuộc tính: điểm năm 4
Yêu cầu:
- Khởi tạo mỗi lớp 1 đối tượng, thực hiện nhập thông tin, in thông tin.
*/
public abstract class Student
{
protected string fullName;
protected int yearOfBirth;
/// <summary>
/// Ham khoi dung doi tuong
/// </summary>`
/// <param name="fullName"></param>
/// <param name="yearOfBirth"></param>
public Student() { }
public Student(string fullName, int yearOfBirth)
{
this.fullName = fullName;
this.yearOfBirth = yearOfBirth;
}
/// <summary>
/// Ham nhap thong tin Sinh vien
/// </summary>
public virtual void EnterInformation()
{
Console.Write("Input FullName: ");
this.fullName = Console.ReadLine();
Console.Write("Input Year of birth: ");
this.yearOfBirth = int.Parse(Console.ReadLine());
}
public abstract void _ToString();
public abstract double SummaryPoint();
public abstract void DisplayInformation();
}
public class CollegeStudent : Student
{
private double pointOfYear01;
private double pointOfYear02;
private double pointOfYear03;
public double PointOfYear01
{
get { return pointOfYear01; }
set { pointOfYear01 = value; }
}
public double PointOfYear02
{
get { return pointOfYear02; }
set { pointOfYear02 = value; }
}
public double PointOfYear03
{
get { return pointOfYear03; }
set { pointOfYear03 = value; }
}
public CollegeStudent() { }
/// <summary>
/// Ham tao sinh vien cao dang
/// </summary>
/// <param name="fullName"></param>
/// <param name="yearOfBirth"></param>
/// <param name="pointOfYear01"></param>
/// <param name="pointOfYear02"></param>
/// <param name="pointOfYear03"></param>
public CollegeStudent(string fullName, int yearOfBirth, double pointOfYear01, double pointOfYear02, double pointOfYear03)
: base(fullName, yearOfBirth)
{
this.pointOfYear01 = pointOfYear01;
this.pointOfYear02 = pointOfYear02;
this.pointOfYear03 = pointOfYear03;
}
public override void EnterInformation()
{
base.EnterInformation();
Console.Write("Input point of year 01: ");
this.pointOfYear01 = double.Parse(Console.ReadLine());
Console.Write("Input point of year 02: ");
this.pointOfYear02 = double.Parse(Console.ReadLine());
Console.Write("Input point of year 03: ");
this.pointOfYear03 = double.Parse(Console.ReadLine());
}
/// <summary>
/// Tinh diem tong ket
/// </summary>
/// <returns></returns>
public override double SummaryPoint()
{
return (pointOfYear01 + pointOfYear02 + pointOfYear03) / 3;
}
/// <summary>
/// Ham xuat thong tin sinh vien cao dang
/// </summary>
public override void DisplayInformation()
{
Console.WriteLine(" College Student: {0}, YearOfBirth: {1}, Point: {2}", this.fullName, this.yearOfBirth, this.SummaryPoint());
}
/// <summary>
/// Ham hien thi loai sinh vien
/// </summary>
public override void _ToString()
{
Console.WriteLine("This is College Student");
}
}
public class UniversityStudent : CollegeStudent
{
private double pointOfYear04;
public double PointOfYear04
{
get { return pointOfYear04; }
set { pointOfYear04 = value; }
}
public UniversityStudent() { }
public UniversityStudent(string fullName, int yearOfBirth, double pointOfYear01, double pointOfYear02, double pointOfYear03, double pointOfYear04)
: base(fullName, yearOfBirth, pointOfYear01, pointOfYear02, pointOfYear03)
{
this.pointOfYear04 = pointOfYear04;
}
public override void EnterInformation()
{
base.EnterInformation();
Console.Write("Input point of year 04: ");
this.pointOfYear04 = double.Parse(Console.ReadLine());
}
public override double SummaryPoint()
{
return (this.PointOfYear01 + this.PointOfYear02 + this.PointOfYear03 + this.PointOfYear04) / 4;
}
public override void DisplayInformation()
{
Console.WriteLine(" University Student: {0}, YearOfBirth: {1}, Point: {2}", this.fullName, this.yearOfBirth, this.SummaryPoint());
}
public override void _ToString()
{
Console.WriteLine("This is University Student");
}
}
#endregion
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace CSharpCoBan
{
public class Program
{
static void Main(string[] args)
{
/*
#region KHỞI ĐỘNG
Console.Title = "Header"; // đặt tiêu đề cho Màn hình console
Console.OutputEncoding = UnicodeEncoding.Unicode; // Output trên màn hình có thể hiển thị Unicode
Console.WriteLine("Fist");
//Thread.Sleep(5000); // sẽ đóng màn hình sau 5000 mili giây = 5 giây.
float f = 5.6f; // khai báo kiểu float phải có f ở sau cùng.
double x = 5.5;
#endregion
#region Kiểu enum
//Console.Write(DayOfWeek.Monday);
const int cc = 4;
//cc = 10;
#endregion
* */
Console.InputEncoding = UnicodeEncoding.Unicode;
Console.OutputEncoding = UnicodeEncoding.Unicode;
CollegeStudent cs = new CollegeStudent();
cs.EnterInformation();
cs.DisplayInformation();
UniversityStudent us = new UniversityStudent();
us.EnterInformation();
us.DisplayInformation();
//thu kiem tra ve ham tao voi tinh ke thua
//Student sv01 = new CollegeStudent();
//Student sv03 = new UniversityStudent();
//CollegeStudent x = new CollegeStudent();
//UniversityStudent y = new UniversityStudent();
//y._ToString();
Console.Read(); // dừng màn hình
}
}
#region Ke thua da hinh
/*
Ví dụ về kế thừa và đa hình trong C#
- Xây dựng lớp SV
+ thuộc tính: họ tên, năm sinh
+ phương thức: Khởi tạo, nhập thông tin
- Xây dựng lớp SVCD kế thừa lớp SV
Bổ sung:
+ thuộc tính: điểm năm 1, điểm năm 2, điểm năm 3
+ phương thức: tính điểm tổng kết, in thông tin
- Xây dựng lớp SVDH kế thừa lớp SVCD
Bổ sung:
+ thuộc tính: điểm năm 4
Yêu cầu:
- Khởi tạo mỗi lớp 1 đối tượng, thực hiện nhập thông tin, in thông tin.
*/
public abstract class Student
{
protected string fullName;
protected int yearOfBirth;
/// <summary>
/// Ham khoi dung doi tuong
/// </summary>`
/// <param name="fullName"></param>
/// <param name="yearOfBirth"></param>
public Student() { }
public Student(string fullName, int yearOfBirth)
{
this.fullName = fullName;
this.yearOfBirth = yearOfBirth;
}
/// <summary>
/// Ham nhap thong tin Sinh vien
/// </summary>
public virtual void EnterInformation()
{
Console.Write("Input FullName: ");
this.fullName = Console.ReadLine();
Console.Write("Input Year of birth: ");
this.yearOfBirth = int.Parse(Console.ReadLine());
}
public abstract void _ToString();
public abstract double SummaryPoint();
public abstract void DisplayInformation();
}
public class CollegeStudent : Student
{
private double pointOfYear01;
private double pointOfYear02;
private double pointOfYear03;
public double PointOfYear01
{
get { return pointOfYear01; }
set { pointOfYear01 = value; }
}
public double PointOfYear02
{
get { return pointOfYear02; }
set { pointOfYear02 = value; }
}
public double PointOfYear03
{
get { return pointOfYear03; }
set { pointOfYear03 = value; }
}
public CollegeStudent() { }
/// <summary>
/// Ham tao sinh vien cao dang
/// </summary>
/// <param name="fullName"></param>
/// <param name="yearOfBirth"></param>
/// <param name="pointOfYear01"></param>
/// <param name="pointOfYear02"></param>
/// <param name="pointOfYear03"></param>
public CollegeStudent(string fullName, int yearOfBirth, double pointOfYear01, double pointOfYear02, double pointOfYear03)
: base(fullName, yearOfBirth)
{
this.pointOfYear01 = pointOfYear01;
this.pointOfYear02 = pointOfYear02;
this.pointOfYear03 = pointOfYear03;
}
public override void EnterInformation()
{
base.EnterInformation();
Console.Write("Input point of year 01: ");
this.pointOfYear01 = double.Parse(Console.ReadLine());
Console.Write("Input point of year 02: ");
this.pointOfYear02 = double.Parse(Console.ReadLine());
Console.Write("Input point of year 03: ");
this.pointOfYear03 = double.Parse(Console.ReadLine());
}
/// <summary>
/// Tinh diem tong ket
/// </summary>
/// <returns></returns>
public override double SummaryPoint()
{
return (pointOfYear01 + pointOfYear02 + pointOfYear03) / 3;
}
/// <summary>
/// Ham xuat thong tin sinh vien cao dang
/// </summary>
public override void DisplayInformation()
{
Console.WriteLine(" College Student: {0}, YearOfBirth: {1}, Point: {2}", this.fullName, this.yearOfBirth, this.SummaryPoint());
}
/// <summary>
/// Ham hien thi loai sinh vien
/// </summary>
public override void _ToString()
{
Console.WriteLine("This is College Student");
}
}
public class UniversityStudent : CollegeStudent
{
private double pointOfYear04;
public double PointOfYear04
{
get { return pointOfYear04; }
set { pointOfYear04 = value; }
}
public UniversityStudent() { }
public UniversityStudent(string fullName, int yearOfBirth, double pointOfYear01, double pointOfYear02, double pointOfYear03, double pointOfYear04)
: base(fullName, yearOfBirth, pointOfYear01, pointOfYear02, pointOfYear03)
{
this.pointOfYear04 = pointOfYear04;
}
public override void EnterInformation()
{
base.EnterInformation();
Console.Write("Input point of year 04: ");
this.pointOfYear04 = double.Parse(Console.ReadLine());
}
public override double SummaryPoint()
{
return (this.PointOfYear01 + this.PointOfYear02 + this.PointOfYear03 + this.PointOfYear04) / 4;
}
public override void DisplayInformation()
{
Console.WriteLine(" University Student: {0}, YearOfBirth: {1}, Point: {2}", this.fullName, this.yearOfBirth, this.SummaryPoint());
}
public override void _ToString()
{
Console.WriteLine("This is University Student");
}
}
#endregion
}
Chủ Nhật, 14 tháng 6, 2015
HỌC LẬP TRÌNH WEB
Học Lập trình web cần những gì?
HTML, CSS, Javascript
Đầu tiên các bạn bắt buộc phải học các kiến thức về Thiết kế cơ bản đó là HTML, CSS để tạo nên bộ mặt hay còn gọi là Giao diện tĩnh cho website. Ngoài ra cũng có thể học luôn Ngôn ngữ Lập trình web dạng nhẹ là Javascript để làm quen với Ngôn ngữ Lập trình web, là bước đệm cho việc Học các Ngôn ngữ Lập trình web phức tạp hơn sau này (Có thể học sau cũng không sao)
Đầu tiên các bạn bắt buộc phải học các kiến thức về Thiết kế cơ bản đó là HTML, CSS để tạo nên bộ mặt hay còn gọi là Giao diện tĩnh cho website. Ngoài ra cũng có thể học luôn Ngôn ngữ Lập trình web dạng nhẹ là Javascript để làm quen với Ngôn ngữ Lập trình web, là bước đệm cho việc Học các Ngôn ngữ Lập trình web phức tạp hơn sau này (Có thể học sau cũng không sao)
PHP & MySQL (Lập trình
hướng thủ tục & Lập trình hướng đối tượng)
Tiếp đến các bạn sẽ cần phải học Ngôn ngữ Lập trình web PHP và Hệ quản trị CSDL MySQL. Đây chính là những ngôn ngữ nền tảng để tạo nên một hệ thóng website hoàn chỉnh mà các bạn thường thấy trên mạng. Nó cũng chính là chìa khóa để các bạn có thể tiếp cận được với nhiều công nghệ web tiên tiến, phức tạp khác sau này. Vậy nên việc học tập và nghiên cứu nghiêm túc sao cho hiệu quả ở giai đoạn này là rất quan trọng và then chốt.
Tiếp đến các bạn sẽ cần phải học Ngôn ngữ Lập trình web PHP và Hệ quản trị CSDL MySQL. Đây chính là những ngôn ngữ nền tảng để tạo nên một hệ thóng website hoàn chỉnh mà các bạn thường thấy trên mạng. Nó cũng chính là chìa khóa để các bạn có thể tiếp cận được với nhiều công nghệ web tiên tiến, phức tạp khác sau này. Vậy nên việc học tập và nghiên cứu nghiêm túc sao cho hiệu quả ở giai đoạn này là rất quan trọng và then chốt.
Giai đoạn này các bạn cũng có thể bổ sung vào kho tàng kiến thức
của mình một số các Công nghệ web liên quan có thể nói là khá đình đám như
Ajax, XML, Regular Expression, JQuery, Htaccess,…
PHP Framework
Sau khi bạn đã thành thạo với Ngôn ngữ Lập trình web PHP rồi, Thành thạo mà Tôi nói ở đây đó là các bạn đã phải trải qua một số dự án thức tế (Tự tay Build những hệ thống website của riêng mình) và phải xây dựng trên mô hình Hướng đối tượng trong PHP (PHP OOP). Thì các bạn sẽ phải làm quen với một mô hình Lập trình khá mới mẻ và hiện đang rất phổ biến đó là mô hình MVC.
Sau khi bạn đã thành thạo với Ngôn ngữ Lập trình web PHP rồi, Thành thạo mà Tôi nói ở đây đó là các bạn đã phải trải qua một số dự án thức tế (Tự tay Build những hệ thống website của riêng mình) và phải xây dựng trên mô hình Hướng đối tượng trong PHP (PHP OOP). Thì các bạn sẽ phải làm quen với một mô hình Lập trình khá mới mẻ và hiện đang rất phổ biến đó là mô hình MVC.
Một số Framework PHP làm việc với mô hình MVC mà các bạn có thể
tham khảo để học hoặc trong quá trình làm việc các bạn sẽ gặp phải hoặc bị sếp
của mình bắt nghiên cứu đó là CodeIgniter, Zend Framework, CakePHP,… Các bạn
chỉ cần nghiên cứu thật chuyên sâu 1 trong 3 cái trên thì những cái còn lại khi
nào cần sử dụng các bạn sẽ học rất là nhanh. Chú ý là để tiếp cận được các PHP
Framework thì các bạn cần phải biết các kiến thức về Lập trình hướng đối tượng
trong PHP mà Tôi đã đề cập ở trên.
PHP CMS
Cuối cùng thì các bạn cũng nên nghiên cứu thêm về các PHP CMS. Vì trước sau gì thì các bạn cũng sẽ phải làm việc với nó cho các dự án trung bình và nhỏ. Bởi các PHP CMS là những hệ thống quan trị nội dung được xây dựng sẵn phần Admin (quản trị) một cách hết sức chuyên nghiệp và đầy đủ. Từ nền tảng đó chúng ta dễ dàng cài đặt và tùy biến thành những hệ thống website rất mạnh mẽ chỉ trong thời gian ngắn mà không tốn quá nhiều công sức (Các Công ty Thiết kế web hiện rất ưa chuộng cách sử dụng các hệ thống CMS này để xuất bản những website giá rẻ hoặc cả giá tầm trung cho khách hàng).
Cuối cùng thì các bạn cũng nên nghiên cứu thêm về các PHP CMS. Vì trước sau gì thì các bạn cũng sẽ phải làm việc với nó cho các dự án trung bình và nhỏ. Bởi các PHP CMS là những hệ thống quan trị nội dung được xây dựng sẵn phần Admin (quản trị) một cách hết sức chuyên nghiệp và đầy đủ. Từ nền tảng đó chúng ta dễ dàng cài đặt và tùy biến thành những hệ thống website rất mạnh mẽ chỉ trong thời gian ngắn mà không tốn quá nhiều công sức (Các Công ty Thiết kế web hiện rất ưa chuộng cách sử dụng các hệ thống CMS này để xuất bản những website giá rẻ hoặc cả giá tầm trung cho khách hàng).
Một số CMS khá nổi tiếng và phổ biến hiện nay gồm có Joomla,
WordPress, Drupal, Magento,…
CÔNG CỤ HỖ TRỢ VIẾT CODE VÀ XEM NGAY KẾT QUẢ TRÊN WEB:
Đăng ký:
Bài đăng (Atom)