Đồ án HCMUTE: Xây dựng ứng dụng hỗ trợ giao dịch bất động sản

Khám phá đồ án HCMUTE về ứng dụng hỗ trợ giao dịch bất động sản, mang lại giải pháp hiệu quả cho thị trường bất động sản hiện nay.

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

đồ án tốt nghiệp

2020

102
2
0

Phí lưu trữ

35 Point

Mục lục chi tiết

LỜI CẢM ƠN

1. CHƯƠNG 1: TỔNG QUAN

1.1. Khảo sát hiện trạng

1.2. Mục tiêu đề tài

1.3. Phương pháp nghiên cứu

1.4. Ý nghĩa khoa học thực tiễn

2. CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

2.1. Giới thiệu ReactJS

2.2. Giới thiệu về Reactjs

2.3. React là gì

2.4. Một số khái niệm cơ bản trong React

2.5. Giới thiệu về JSX

2.6. Giới thiệu về components

2.7. Props và State

2.8. React-router là gì

2.9. BrowserRouter và HashRouter

2.10. Ưu điểm và nhược điểm của ReactJS

2.11. Giới thiệu sơ lược về Spring Framework

2.12. Các dự án trong Spring Framework

2.13. Cơ sở dữ liệu MYSQL

2.13.1. Giới thiệu cơ sở dữ liệu MYSQL

2.13.2. Mục đích sử dụng cơ sở dữ liệu

2.13.3. Các thao tác cập nhật dữ liệu

2.13.4. Các hàm thông dụng trong MySQL

2.13.5. Các hàm trong phát biểu GROUP BY

2.13.6. Các hàm xử lí chuỗi

2.13.7. Các hàm xử lí về thời gian

2.13.8. Các hàm về toán học

2.14. Giới thiệu về React Native

2.15. Ưu điểm và nhược điểm

2.16. Công cụ phát triển

2.17. Thư viện và component

2.18. Thư viện redux

2.19. Nguyên lý hoạt động của Redux

2.20. Một số nguyên tắc trong Redux

2.21. Vòng đời của React-Native

2.22. Cấu trúc thư mục của ứng dụng react native

2.23. Tìm hiểu về Google Maps Api

2.23.1. Giới Thiệu về Google Maps và Google Maps Api

2.23.2. Google Maps Overlays (Lớp phủ)

2.24. Giới thiệu về Nodejs

2.24.1. Khái niệm Node js

2.24.2. Ứng dụng của NodeJS

2.24.3. Cách thức hoạt động nodejs

2.24.4. Nhược điểm

2.24.5. Các NodeJS framework sử dụng phổ biến

3. PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG

3.1. Phân tích yêu cầu

3.2. Đối tượng sử dụng

3.3. Phạm vi bài toán

3.4. Mô hình hóa hệ thống

3.5. Yêu cầu chức năng nghiệp vụ

3.6. Yêu cầu chức năng hệ thống

3.7. Yêu cầu phi chức năng

3.8. Thiết kế xử lí

3.8.1. Đặc tả usecase

3.8.2. Use case Đăng nhập

3.8.3. Use case Đăng ký

3.8.4. Use case Đăng xuất

3.8.5. Use case Tìm kiếm

3.8.6. Use case Chỉnh sửa thông tin tài khoản

3.8.7. Use case Quản lí căn hộ

3.8.8. Use case thay đổi mật khẩu

3.8.9. Use case quản lý yêu thích

3.8.10. Use case bình luận

3.8.11. Use case đặt mua

3.8.12. Use case quản lý chi tiết căn hộ

3.8.13. Chỉnh sửa thông tin tài khoản

3.8.14. Đổi mật khẩu

3.8.15. Quản lý yêu thích

3.8.16. Quản lý chi tiết căn hộ

3.8.17. Sơ đồ lớp – Class Diagram

3.9. Thiết kế cơ sở dữ liệu

3.9.1. Quan hệ giữa các bảng

3.9.2. Danh sách chi tiết thuộc tính các bảng

3.10. Thiết kế giao diện

3.10.1. Danh sách các màn hình

3.10.2. Sơ đồ liên kiết giữa các màn hình

3.10.3. Đặc tả các màn hình

3.11. Hiện thực hệ thống

3.11.1. Công nghệ sử dụng

3.11.2. Môi trường lập trình

4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

4.1. Về mặt lý thuyết

4.2. Về mặt hiện thực

4.3. Hướng phát triển đề tài

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Ứng dụng Giao dịch Bất động sản HCMUTE Tổng quan

Đồ án tốt nghiệp này tập trung vào việc xây dựng ứng dụng giao dịch bất động sản HCMUTE, một giải pháp công nghệ nhằm hỗ trợ giao dịch bất động sản. Ứng dụng này được thiết kế để giải quyết những khó khăn trong việc tìm kiếm và giao dịch bất động sản, đặc biệt là đối với sinh viên HCMUTE và người dân Thành phố Hồ Chí Minh. Ứng dụng bất động sản này hướng tới mục tiêu kết nối trực tiếp người mua và người bán, loại bỏ các trung gian, giúp tiết kiệm chi phí và thời gian. Các công nghệ chính được sử dụng bao gồm: Reactjs, React Native cho giao diện người dùng (frontend), Java Spring và Nodejs cho xử lý phía máy chủ (backend), và MySQL làm cơ sở dữ liệu. Ứng dụng di động HCMUTE này được thiết kế với giao diện trực quan, thân thiện, giúp người dùng dễ dàng tìm kiếm, lọc và xem thông tin bất động sản.

1.1 Phân tích Yêu cầu và Thiết kế Hệ thống

Phần này tập trung vào việc phân tích yêu cầu của người dùng. Ứng dụng cần đáp ứng nhu cầu tìm kiếm bất động sản nhanh chóng, chính xác, bao gồm các tính năng như: tìm kiếm theo vị trí (ứng dụng bất động sản khu vực HCMUTE), loại hình bất động sản (nhà đất HCMUTE, biệt thự HCMUTE), giá cả, diện tích. Ứng dụng mua bán bất động sản HCMUTE cần cung cấp thông tin đầy đủ về mỗi bất động sản, bao gồm hình ảnh, mô tả, thông tin pháp lý. Người dùng cần có thể lưu lại các bất động sản yêu thích (ứng dụng quản lý bất động sản HCMUTE) và liên hệ trực tiếp với người bán. Phần thiết kế hệ thống mô tả kiến trúc của ứng dụng, bao gồm các mô đun chức năng, cơ sở dữ liệu, và giao diện người dùng. Ứng dụng tìm kiếm bất động sản HCMUTE được thiết kế theo mô hình client-server, với giao diện thân thiện và dễ sử dụng. Việc thiết kế phần mềm giao dịch bất động sản HCMUTE chú trọng đến trải nghiệm người dùng, đảm bảo ứng dụng hoạt động mượt mà và ổn định.

1.2 Thực hiện và Kiểm thử Hệ thống

Quá trình thực hiện bao gồm việc lập trình, tích hợp và kiểm thử ứng dụng. Ứng dụng web được xây dựng dựa trên các công nghệ đã lựa chọn. Quá trình kiểm thử bao gồm kiểm thử đơn vị, tích hợp, và kiểm thử hệ thống. Mục tiêu là đảm bảo ứng dụng hoạt động đúng như yêu cầu, không có lỗi và đáp ứng được nhu cầu của người dùng. Việc kiểm tra chất lượng phần mềm giao dịch bất động sản HCMUTE được tiến hành kỹ lưỡng. Ứng dụng cho thuê bất động sản HCMUTE được thử nghiệm trên nhiều thiết bị và trình duyệt khác nhau. Ứng dụng được tối ưu hóa về hiệu năng và bảo mật. Platform giao dịch bất động sản HCMUTE được thiết kế để mở rộng và dễ dàng cập nhật thêm tính năng trong tương lai. Hệ thống giao dịch bất động sản HCMUTE được đánh giá cao về tính tiện dụng và hiệu quả.

II. Đánh giá và ứng dụng thực tiễn

Ứng dụng hỗ trợ giao dịch bất động sản tại HCMUTE mang lại nhiều lợi ích thiết thực. Ứng dụng giúp người dùng tiết kiệm thời gian và chi phí tìm kiếm bất động sản. Ứng dụng tăng tính minh bạch trong giao dịch. Ứng dụng giúp kết nối người mua và người bán một cách hiệu quả. Tuy nhiên, ứng dụng vẫn còn một số hạn chế. Ứng dụng chưa tích hợp đầy đủ các tính năng như chat trực tiếp, hỗ trợ thanh toán trực tuyến. Ứng dụng cần được cải thiện về khả năng mở rộng và bảo mật. Dữ án bất động sản HCMUTE cần được tiếp tục phát triển để đáp ứng nhu cầu ngày càng cao của thị trường.

2.1 Lợi ích và Hạn chế

Lợi ích chính của ứng dụng là tăng cường sự tiện lợi và hiệu quả trong giao dịch bất động sản. Người dùng dễ dàng tìm kiếm thông tin bất động sản phù hợp. Ứng dụng giảm thiểu rủi ro trong giao dịch. Ứng dụng bất động sản sinh viên HCMUTE mang lại trải nghiệm tích cực cho người dùng. Tuy nhiên, ứng dụng cần bổ sung thêm tính năng và cải thiện khả năng bảo mật. Ứng dụng cần được cập nhật thường xuyên để đảm bảo hoạt động ổn định. Phân tích bất động sản HCMUTE cho thấy tiềm năng phát triển của ứng dụng này rất lớn. Việc tích hợp thêm các tính năng như định vị, tìm kiếm nâng cao, và hỗ trợ khách hàng sẽ giúp ứng dụng thu hút nhiều người dùng hơn. Thị trường bất động sản HCMUTE ngày càng phát triển, vì vậy ứng dụng cần được cập nhật liên tục để đáp ứng nhu cầu của người dùng.

2.2 Hướng phát triển trong tương lai

Để ứng dụng ngày càng hoàn thiện, cần có những cải tiến về tính năng và giao diện người dùng. Ứng dụng cần tích hợp thêm các tính năng như chat trực tuyến, thanh toán trực tuyến và hỗ trợ khách hàng 24/7. Ứng dụng cần được tối ưu hóa cho các thiết bị di động khác nhau. Ứng dụng cần nâng cao khả năng bảo mật thông tin người dùng. Việc nghiên cứu và áp dụng các công nghệ mới như AI và Machine Learning sẽ giúp ứng dụng thông minh hơn và cung cấp các đề xuất phù hợp với người dùng. Đầu tư bất động sản HCMUTE cần xem xét việc tích hợp ứng dụng với các hệ thống quản lý bất động sản khác. Xu hướng bất động sản HCMUTE đang chuyển dịch mạnh mẽ sang trực tuyến, vì vậy ứng dụng cần phải đáp ứng được nhu cầu này. Bất động sản giá rẻ HCMUTE cũng là một phân khúc thị trường mà ứng dụng cần hướng tới. Bất động sản cao cấp HCMUTE cũng cần được tích hợp vào ứng dụng.

01/02/2025

Trích đoạn nội dung tài liệu

Chương 1: TỔNG QUAN Website và ứng dụng có giao diện trực quan, dễ sử dụng, thoải mái, thuận tiện, giúp dễ dàng tìm kiếm được các dự án ưa thích. 2 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT CHƯƠNG 2. Giới thiệu ReactJS React.js là một thư viện Javascript đang nổi lên trong những năm gần đây với xu hướng Single Page Application.

Trong khi những framework khác cố gắng hướng đến một mô hình MVC hoàn thiện thì React nổi bật với sự đơn giản và dễ dàng phối hợp với những thư viện Javascript khác. Nếu như AngularJS là một Framework cho phép nhúng code Javascript trong code html thông qua các attribute như ng-model, ng-repeat.thì với ReactJS là một library cho phép nhúng code HTML trong code Javascript nhờ vào JSX, bạn có thể dễ dàng lồng các đoạn HTML vào trong Javas- cript. Tích hợp giữa Javascript và HTML vào trong JSX làm cho các component dễ hiểu hơn.1 giới thiệu về Reactjs 2. React là gì React là một thư viện UI phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử dụng lại được.

React được sử dụng tại Facebook trong production, và www.com được viết hoàn toàn trên React. Một trong những điểm hấp dẫn của React là thư viện này không chỉ hoạt động trên phía client, mà còn được render trên server và có thể kết nối với nhau. React so 3 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT sánh sự thay đổi giữa các giá trị của lần render này với lần render trước và cập nhật ít thay đổi nhất trên DOM.

Một số khái niệm cơ bản trong React 2. Virtual DOM Công nghệ Virtual DOM giúp tăng hiệu năng cho ứng dụng. Việc chỉ node gốc mới có trạng thái và khi nó thay đổi sẽ tái cấu trúc lại toàn bộ, đồng nghĩa với việc DOM tree cũng sẽ phải thay đổi một phần, điều này sẽ ảnh hưởng đến tốc độ xử lý. React JS sử dụng Virtual DOM (DOM ảo) để cải thiện vấn đề này.

Virtual DOM là một object Javascript, mỗi object chứa đầy đủ thông tin cần thiết để tạo ra một DOM, khi dữ liệu thay đổi nó sẽ tính toán sự thay đổi giữa object và tree thật, điều này sẽ giúp tối ưu hoá việc re-render DOM tree thật. React sử dụng cơ chế one-way data binding – luồng dữ liệu 1 chiều. Dữ liệu được truyền từ parent đến child thông qua props. Luồng dữ liệu đơn giản giúp chúng ta dễ dàng kiểm soát cũng như sửa lỗi.

Với các đặc điểm ở trên, React dùng để xây dựng các ứng dụng lớn mà dữ liệu của chúng thay đổi liên tục theo thời gian. Dữ liệu thay đổi thì hầu hết kèm theo sự thay đổi về giao diện. Ví dụ như Facebook: trên Newsfeed của bạn cùng lúc sẽ có các status khác nhau và mỗi status lại có số like, share, comment liên tục thay đổi. Khi đó React sẽ rất hữu ích để sử dụng.

4 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình ảnh : 2. Giới thiệu về JSX JSX là một dạng ngôn ngữ cho phép viết các mã HTML trong Javascript. Đặc điểm: Faster: Nhanh hơn.

JSX thực hiện tối ưu hóa trong khi biên dịch sang mã Ja- vacsript. Các mã này cho thời gian thực hiện nhanh hơn nhiều so với một mã tương đương viết trực tiếp bằng Javascript. Safer: an toàn hơn. Ngược với Javascript, JSX là kiểu statically-typed, nghĩa là nó được biên dịch trước khi chạy, giống như Java, C++.

Vì thế các lỗi sẽ được phát hiện ngay trong quá trình biên dịch. Ngoài ra, nó cũng cung cấp tính năng gỡ lỗi khi biên dịch rất tốt. Dễ dàng hơn, JSX kế thừa dựa trên Javascript, vì vậy rất dễ dàng để cho các lập trình viên Javascripts có thể sử dụng. Giới thiệu về components React được xây dựng xung quanh các component, chứ không dùng template như các framework khác.

Trong React, chúng ta xây dựng trang web sử dụng những thành phần (component) nhỏ. Chúng ta có thể tái sử dụng một component ở nhiều nơi, với các trạng thái hoặc các thuộc tính khác nhau, trong một component lại có thể chứa 5 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT thành phần khác. Mỗi component trong React có một trạng thái riêng, có thể thay đổi, và React sẽ thực hiện cập nhật component dựa trên những thay đổi của trạng thái.

Mọi thứ React đều là component. Chúng giúp bảo trì mã code khi làm việc với các dự án lớn. Một react component đơn giản chỉ cần một method render. Có rất nhiều methods khả dụng khác, nhưng render là method chủ đạo.3 Dữ liệu chia ra thành các components 2.

Props và State Props: giúp các component tương tác với nhau, component nhận input gọi là props, và trả thuộc tính mô tả những gì component con sẽ render. State: thể hiện trạng thái của ứng dụng, khi state thay đồi thì component đồng thời render lại để cập nhật UI. React-router là gì React-Router là một thư viện định tuyến (routing) tiêu chuẩn trong React. Nó giữ cho giao diện của ứng dụng đồng bộ với URL trên trình duyệt.

React-Router cho phép bạn định tuyến "luồng dữ liệu" (data flow) trong ứng dụng của bạn một cách rõ ràng. Nó tương đương với sự khẳng định, nếu bạn có URL này, nó sẽ tương đương với Route này, và giao diện tương ứng. BrowserRouter và HashRouter React-Router cung cấp cho chúng 2 thành phần hay sử dụng đó là Browser- Router & HashRouter. Hai thành phần này khác nhau ở kiểu URL mà chúng sẽ tạo ra và đồng bộ.

• BrowserRouter: Được sử dụng phổ biến hơn, nó sử dụng History API có trong HTML5 để theo dõi lịch sử bộ định tuyến của bạn. • HashRouter: Sử dụng hash của URL (window.hash) để ghi nhớ mọi thứ. 6 do an CHƯƠNG 2. Route Route: Định nghĩa một ánh xạ (mapping) giữa một URL và một Component.

Điều đó có nghĩa là khi người dùng truy cập theo một URL trên trình duyệt, một Component tương ứng sẽ được render trên giao diện. Trong đó: • path: Là đường dẫn trên URL. • exact: Liúp cho route này này chỉ hoạt động nếu URL trên trình duyệt phù hợp tuyệt đối với giá trị của thuộc tính path của nó. • component: Là component sẽ đươc load ra tương ứng với Route đó.

Ưu điểm và nhược điểm của ReactJS Ưu điểm : • Trong lĩnh vực phát triển công nghệ, các chủ doanh nghiệp và developer luôn tìm kiếm những phương pháp tốt nhất để giúp doanh nghiệp của họ có những lợi thế cạnh tranh tốt hơn. Và một trong những công nghệ tốt nhất có thể giúp những doanh nghiệp vượt mặt đối thủ trong việc tạo ra những ứng dụng web chính là ReactJS. • Reactjs cực kì hiệu quả: Reactjs tạo ra cho chính nó DOM ảo – nơi mà các component thực sự tồn tại trên đó. Điều này sẽ giúp cải thiện hiệu suất rất nhiều.

Reactjs cũng tính toán những thay đổi nào cần cập nhật len DOM và chỉ thực hiện chúng. Điều này giúp Reactjs tránh những thao tác cần trên DOM mà nhiều chi phí. • Làm việc với vấn đề test giao diện: Nó cực kì dễ để viết các test case giao diện vì virtual DOM được cài đặt hoàn toàn bằng JS. • Hiệu năng cao đối với các ứng dụng có dữ liệu thay đổi liên tục, dễ dàng cho bảo trì và sửa lỗi.

Nhược điểm : • Reactjs chỉ phục vụ cho tầng View. React chỉ là View Library nó không phải là một MVC framework như những framework khác. Đây chỉ là thư viện của Facebook giúp render ra phần view. Vì thế React sẽ không có phần Model và Controller, mà phải kết hợp với các thư viện khác.

React cũng sẽ không có 2-way binding hay là Ajax. • Tích hợp Reactjs vào các framework MVC truyền thống yêu cầu cần phải cấu hình lại. 7 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT • React khá nặng nếu so với các framework khác React có kích thước tương tương với Angular (Khoảng 35kb so với 39kb của Angular).

Trong khi đó Angular là một framework hoàn chỉnh. • Khó tiếp cận cho người mới học Web. Giới thiệu sơ lược về Sping Framework Có thể nói rằng Spring Framework ra đời là nhờ sự thành công của EJB. EJB (Enterprise JavaBeans) là một kiến trúc phát triển dành cho các ứng dụng doanh nghiệp đòi hỏi tính mạnh mẽ và khả năng mở rộng cao.

EJB là một thành phần quan trọng của nền tảng Java EE. EJB được tạo ra bởi hai gã khổng lồ công nghệ là IBM và Sun vào những năm cuối thập niên 90. Dưới sự phát triển của hai tập đoàn này, EJB đã trở nên nặng nề hơn. Tiêu chuẩn EJB cũng nhanh chóng được thông qua.

Sau tất cả, EJB được ca ngợi là giải pháp tốt nhất để xây dựng các ứng dụng phân tán dành cho doanh nghiệp. Nhưng rồi những chỉ trích về chi tiết kỹ thuật của EJB đã tăng nhanh còn hơn sự nổi tiếng của nó. EJB là một framework lớn với độ phức tạp cao. Các nhà phát triền khi làm việc với EJB đã nhận ra rằng nó không hoạt động như những gì nó đã đề ra.

EJB chỉ tuyệt vời trên bàn giấy, nhưng ra thực tế đó lại là một chuyện khác. EJB vẫn được tiếp tục phát triển, dễ sử dụng hơn nhiều so với buổi ban đầu. Nhưng những chỉ trích vẫn còn đó, nỗi thất vọng trong cộng đồng Java ngày càng tăng lên, đòi hỏi cần có một giải pháp thay thế. Vào năm 2002, Spring Framework phát hành phiên bản đầu tiên bởi Rod John- son.

Việc xây dựng các ứng dụng doanh nghiệp trở nên đơn giản và dễ dàng hơn. Rod Johnson đã cho xuất bản một cuốn sách được phổ biến rộng rãi có nhan đề "J2EE Development without EJB". Điều này đã cho Spring Framework rất nhiều động lực để thay thế EJB. Theo đà phát triển đó, Spring đã trở thành framework mã nguồn mở phổ biến nhất để xây dựng các ứng dụng doanh nghiệp.

Cách tiếp cận thực tế ban đầu của Rod 8 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Johnson tiếp tục được phát triển và hướng tới một bộ công cụ hoàn chỉnh dành cho xây dựng các ứng dụng doanh nghiệp. Theo một số nguồn, trên 50% các ứng dụng web Java hiện nay đang sử dụng Spring. Để ngăn chặn sự phức tạp trong phát triển các ứng dụng, Spring Framework thường dựa trên các quan điểm như sau: • Đơn giản hóa công việc phát triển thông qua việc sử dụng các POJO (Plain Old Java Object).

• Nới lỏng ràng buộc giữa các thành phần thông qua việc sử dụng Dependency Injection. • Giảm thiểu các mã boilerplate thông qua việc sử dụng template và aspect. Spring Core Spring Core là thành phần cốt lõi của Spring Framework. Đây chính là nền tảng để xây dựng nên các thành phần khác trong hệ sinh thái của Spring Framework.

9 do an CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Hình ảnh : 2.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ

Bài viết "Ứng dụng hỗ trợ giao dịch bất động sản tại HCMUTE" giới thiệu một ứng dụng tiên tiến giúp người dùng dễ dàng thực hiện các giao dịch bất động sản tại khu vực TP.HCM. Ứng dụng này không chỉ cung cấp thông tin chi tiết về các bất động sản đang có mặt trên thị trường mà còn hỗ trợ người dùng trong việc tìm kiếm, so sánh và đánh giá các lựa chọn khác nhau. Một trong những lợi ích nổi bật của ứng dụng là khả năng tối ưu hóa quy trình giao dịch, giúp tiết kiệm thời gian và công sức cho người dùng.

Nếu bạn quan tâm đến các ứng dụng công nghệ trong lĩnh vực bất động sản, bạn có thể tìm hiểu thêm về việc ứng dụng các phương pháp vector hóa để loại bỏ tin đăng trùng trong lĩnh vực bất động sản. Ngoài ra, để mở rộng kiến thức về các ứng dụng công nghệ khác, hãy tham khảo bài viết về phát triển ứng dụng quản lý mua bán gas trên ios sử dụng ngôn ngữ dart trên nền tảng flutter. Cuối cùng, bạn cũng có thể tìm hiểu về xây dựng phần mềm quản lý quán ăn, một ứng dụng khác trong lĩnh vực quản lý và giao dịch. Những tài liệu này sẽ giúp bạn có cái nhìn sâu sắc hơn về ứng dụng công nghệ trong các lĩnh vực khác nhau.