Anda di halaman 1dari 25

Personal Diary Application

Submitted in partial fulfillment of the requirements for the degree of

M.TECH Software Engineering


(Integrated)

by
15MIS0140 – G. Kavyapriya
15MIS0157 – A. Lishapriya
15MIS0237 – S. Preethi

Under the guidance of


Prof.Rajaprabha
SITE

VIT,Vellore.

April,2019
DECLARATION

I hereby declare that the thesis entitled “Personal Diary Application" submitted
by me, for the award of the degree of M.Tech (integrated) in Software Engineeringto VIT is a record
of bonafide work carried out by me under the supervision of Prof.Rajaprabha.

I further declare that the work reported in this thesis has not been submitted and will not be submitted,
either in part or in full, for the award of any other degree or diploma in this institute or any other institute
oruniversity.

Signature

Place: Vellore REGNO STUDENT NAME

Date:05-04-2019 15MIS0140 KAVYA PRIYA.G


15MIS0157 LISHA PRIYA.A
16MIS0237 PREETHI.S
CONTENTS Page
No.

Acknowledgement i

Executive Summary ii

Table of Contents Iii

List of Figures ix

List of Tables xiv

Abbreviations xvi

Symbols and Notations xix

1 INTRODUCTION 1
1.1 Objective 1
1.2 Motivation 2

2 PROJECT DESCRIPTION AND GOALS 3

3 TECHNICAL SPECIFICATION 3

4 DESIGN APPROACH AND DETAILS .

4.1 Design Approach / Materials &Methods .

4.2 Codes and Standards .

5 SCHEDULE, TASKS AND MILESTONES .

6 PROJECT DEMONSTRATION .

7 COST ANALYSIS / RESULT & DISCUSSION .


8 SUMMARY .

9 REFERENCES .
1. INTRODUCTION
We have developed Digital Diary application to makes ease the work of users by this
computerized software. By this application a user can store employee details, retrieve
contact details, send mails, set events for important meetings of works on single
platform? Thus the user can manage his contacts and daily working schedules through
this application. This application avoids user to make manual contact diaries to store
the contact address. A user who is working on system can set events for the important
work while doing some another work. Events will remind him about that work.
Employee also able to compose mails according to their suitability and if the employee
or admin not want to send mails then it have a option for a drafts for saved mails. So,
this application is convenient platform for a user to manage, contacts, daily work
schedules and to enhance the punctuality of the user.

1.1. OBJECTIVE

The main objective of this thesis was to gain new knowledge on using a mobile phone
application based on expressing the daily emotions of one person through this
application. The specific objectives were:
1) To design a mobile phone application for expressing the daily emotions .
2) To share the text to the contacts of the phone .
3) To evaluate the application by getting feedback from the customer .

1.2 MOTIVATION
In this fast moving world, most of the users need applications which can save their time.
Android personal diary is one of the applications which can save a lot of paper work by
avoiding the hand written diary. But, in this modern era, it is also important that we don’t waste
much time by writing the daily event in the hand written format diary which is not so safe and
secure. For an instance if we are moving out of the station or we are travelling around the city
so that we cant always carry the diary with us. So android application of Personal Diary is
developed for mobile phone which become one of the most important thing in our daily life.
This is the motivation behind this application to store the day today details or emotions in a
single application .

2. PROJECT DESCRIPTION AND GOALS


Being mobile influences not only the type of information people seek but also the ways
they attempt to access it. A personal diary may include the person's experiences,
thoughts or feelings. Diaries have made it more convenient to write down the events
happening to the author as it happens. A Personal diary application was developed for
Android Smartphones. This application was developed using Android programming
language on Android Studio. The user has the ability to write entries, read entries and
edit written entries. The user can also share the entries to their contacts and select the
themes for their entries.
3. TECHNICAL SPECIFICATION
SOFTWARE REQUIREMENTS :
In developing the application, the following software were used:
•IDE (Integrated Development Environment) - Android Studio
•Programming Language – Android Programming Language.
•Mobile Platform Version - Android
4. DESIGN APPROACH AND DETAILS
4.1 DESIGN APPROACH / MATERIALS &METHODS
DFD O LEVEL:

DFD 1 LEVEL:
4.2 CODES AND STANDARDS

LOGIN ACTIVITY:

packagecom.example.personal_task;
importandroid.content.Intent;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;
public class MainActivityextends AppCompatActivity {
EditTextem, pwd;
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
em = (EditText) findViewById(R.id.em);
pwd = (EditText) findViewById(R.id.pwd);
String s1 = em.getText().toString();
String s2 = pwd.getText().toString();
Toast.makeText(MainActivity.this, s1+"\n"+"Log_in Successful",
Toast.LENGTH_LONG).show();
Intent i = new Intent(MainActivity.this,Calendar.class);
startActivity(i);
}
});
}
}
TASK ACTIVITY:
packagecom.example.tom.diary;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.support.design.widget.FloatingActionButton;
importandroid.support.v7.app.AppCompatActivity;
importandroid.support.v7.widget.LinearLayoutManager;
importandroid.support.v7.widget.RecyclerView;
importandroid.view.View;
importcom.example.tom.test.R;
public class MainActivityextends AppCompatActivityimplements
RecycleItemOnClickListener
{
private static Context context;
privateListAdapterlad;
privateFloatingActionButtonfloatingNewButton;
privateFloatingActionButtonfloatingRemoveButton;
privateFloatingActionButtonfloatingSettingsButton;
privatebooleanisInDeleteMode;//For future use
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainActivity.context= getApplicationContext();
floatingNewButton= (FloatingActionButton)findViewById(R.id.floatingSaveButton);
floatingSettingsButton=
(FloatingActionButton)findViewById(R.id.floatingSettingsButton);
floatingSettingsButton.hide();
floatingRemoveButton=
(FloatingActionButton)findViewById(R.id.floatingDeleteInListButton);
floatingRemoveButton.hide();
isInDeleteMode= false;//For future use
try
{
lad= new ListAdapter
(
MainActivity.getAppContext(),
newLinearLayoutManager(this),
(RecyclerView) findViewById(R.id.list)
);
}
catch(Exception e)
{
Messenger.showError("", e.getMessage(), this);
}
lad.setClickListener(this);
}
/**
* Reacts on new button click and creates new activity
* @paramv
*/
public void newButtonClick(View v)
{
Intent intent = new Intent(MainActivity.this, NewDataActivity.class);
intent.putExtra("MODE", "new");
this.startActivityForResult(intent, 1);
}
/**
* Method reacts to activity result, according to this result it adds, deletes or edits data.
* @paramrequestCode
* @paramresultCode
* @paramdata result of the activity: modes: 'new', 'edit', 'delete'
*/
@Override
public void onActivityResult(intrequestCode, intresultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1)
{
if(resultCode == RESULT_OK)
{
String mode = data.getStringExtra("MODE");
if(mode.equals("new"))
{
try
{
String text = data.getStringExtra("text");
lad.addData(new UserData(text));
}
catch(Exception e)
{
Messenger.showError("", e.getMessage(), this);
}
}
else if(mode.equals("edit"))
{
String text = data.getStringExtra("text");
String id = data.getStringExtra("id");
try
{
lad.editData(new UserData(text, id));
}
catch(Exception e)
{
Messenger.showError("", e.getMessage(), this);
}
}
else if(mode.equals("delete"))
{
String text = data.getStringExtra("text");
String id = data.getStringExtra("id");
try
{
lad.removeData(new UserData(text, id));
}
catch(Exception e)
{
Messenger.showError("", e.getMessage(), this);
}
}
}
}
}
public void SettingsButtonClick(View v)
{//to be done...
}
public void deleteInListButtonClick(View v)
{//to be done...
}
/**
* Returns App Context
* @return
*/
public static Context getAppContext()
{
returnMainActivity.context;
}
/**
* Reacts on item click, passes data to new Activity by Intent, mode -> 'edit' extras -> 'text',
'id'
* @paramv
* @paramposition
*/
@Override
public void onItemClick(View v, intposition)
{
UserData data = lad.getData(position);
Intent intent = new Intent(MainActivity.this, NewDataActivity.class);
intent.putExtra("text", data.getText());
intent.putExtra("id", data.getId());
intent.putExtra("MODE", "edit");
this.startActivityForResult(intent, 1);
}
}

CHECK DIALOG CODE:

packagecom.example.tom.diary;
importandroid.app.Activity;
importandroid.content.DialogInterface;
importandroid.support.v4.app.DialogFragment;
importcom.example.tom.test.R;
/**
* Creates new dialog with 2 buttons and message, when you need to confirm action by user
*/
public class CheckDialogextends DialogFragment
{
privateandroid.app.AlertDialog.Builderbuilder;
privateDialogClickListenerlistener;
/**
* Creates new dialog
* @paramlistener
*/
CheckDialog(String title, String msg, Activity activity, DialogClickListener listener)
{
this.listener= listener;
setDialog(title, msg, activity);
}
/**
* Sets dialog
* @paramtitle Title of the dialog
* @parammsgMessage for user
* @paramactivity Current activity in which you want to display dialog
*/
public void setDialog(String title, String msg, Activity activity)
{
builder= new android.app.AlertDialog.Builder(activity);
builder.setTitle(title);//Sets title for the dialog
//Sets messages of buttons
builder.setMessage(msg).setPositiveButton(R.string.msg_ok, new
DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, intid)
{
listener.onDialogOkClick();
}
}).setNegativeButton(R.string.msg_cancel, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, intid)
{
listener.onDialogCancelClick();
}
});
builder.create();
}
/**
* Shows dialog
*/
public void show()
{
builder.show();
}
}

DATABASE CODE:

packagecom.example.tom.diary;
importandroid.content.Context;
importorg.w3c.dom.Attr;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.Node;
importorg.w3c.dom.NodeList;
importjava.io.File;
importjava.util.ArrayList;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.transform.Transformer;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.StreamResult;
/**
* Store user data into xml file
* @author Tomáš Silber
*/
public class Database implements IDatabase
{
privateString fpath;
privateContext cont;
publicDatabase(Context cont)
{
this.cont= cont;
fpath= cont.getFilesDir().getPath() + "/torar.xml";
init();
}
/**
* Creates xml file with root element if data file does not exists
*/
private void init()
{
try
{
File fl = new File(fpath);
if(!fl.exists())
{
fl.createNewFile();
DocumentBuilderFactorydocFactory = DocumentBuilderFactory.newInstance();
DocumentBuilderdocBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("records");
doc.appendChild(rootElement);
saveXMLToFile(doc);
}
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
}
/**
* Saves Document to xml file
* @paramdoc Doc with data
* @throws Exception
*/
private void saveXMLToFile(Document doc) throws Exception
{
TransformerFactorytransformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(fpath));
transformer.transform(source, result);
}
/**
* Returns root document from xml user data file
* @return
* @throws Exception Contains message for user.
*/
privateDocument getXMLDoc() throws Exception
{
File fXmlFile = new File(fpath);
DocumentBuilderFactorydbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilderdBuilder = dbFactory.newDocumentBuilder();
returndBuilder.parse(fXmlFile);
}
/**
* Saves new data into file
* @paramdata Contains new data to save
* @throws Exception Contains message for user.
*/
@Override
public void addData(UserData data) throws Exception
{
try
{
Document doc = getXMLDoc();
Element rootElement = doc.getDocumentElement();
Attrattr = doc.createAttribute("date");
attr.setValue(data.getId());
Element record = doc.createElement("record");
record.setAttributeNode(attr);
Element text = (Element)record.appendChild(doc.createElement("text"));
text.appendChild(doc.createTextNode(data.getText()));
rootElement.appendChild(record);
saveXMLToFile(doc);
}
catch(Exception e)
{
System.err.println("Unable to add data" + e.getMessage());
}
}
/**
* Removes corresponding data from file according to unique identifier data.getId()
* @paramdata
* @throws Exception Contains message for user.
*/
@Override
public void removeData(UserData data) throws Exception
{
Document doc = getXMLDoc();
Element rootElement = doc.getDocumentElement();
NodeList list = doc.getElementsByTagName("record");
for(inti = 0; i <list.getLength(); i++)
{
Node node = list.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE)
{
Element element = (Element) node;
if(data.getId().equals(element.getAttribute("date")))
{
rootElement.removeChild(element);
saveXMLToFile(doc);
break;
}
}
else
{
System.err.println("Unable to delete data");
}
}
}
/**
* Replace corresponding(according to data.getId()) text in file with new text from data.
* @paramdata
* @throws Exception Contains message for user.
*/
@Override
public void editData(UserData data) throws Exception
{
removeData(data);
addData(data);
}
/**
* Loads ArrayList with data from file and then returns it
* @return ArrayList filled with data from file
* @throws Exception Contains message for user.
*/
@Override
publicArrayList<UserData>getContent() throws Exception
{
ArrayList<UserData> it = new ArrayList<UserData>();
Document doc = getXMLDoc();
NodeList list = doc.getElementsByTagName("record");
for(inti = 0; i <list.getLength(); i++)
{
Node node = list.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE)
{
Element element = (Element) node;
String date = element.getAttribute("date");
String text = element.getElementsByTagName("text").item(0).getTextContent();
it.add(new UserData(text, date));
}
else
{
System.err.println("Unable to load data");
}
}
returnit;
}
}
5. PROJECT DEMONSTRATION
5.1 LOGIN PAGE:

5.2 ADD ENTRIES:

5.2.1 ACTIVITY_MAIN.XML

<?xml version="1.0" encoding="utf-8"?>


<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/a
pk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.tom.diary.MainActivity">

<android.support.constraint.ConstraintLayout
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="16dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="80dp"
android:layout_marginEnd="4dp"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_conversion_absoluteHeight="511dp"
tools:layout_conversion_absoluteWidth="376dp" />

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/list"
app:layout_constraintStart_toStartOf="@+id/list"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0">

<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingNewButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:onClick="newButtonClick"
app:backgroundTint="@android:color/holo_blue_dark"
app:elevation="0dp"
app:fabSize="normal"
app:srcCompat="@android:drawable/ic_input_add"
tools:layout_editor_absoluteX="244dp"
tools:layout_editor_absoluteY="495dp" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingDeleteInListButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:clickable="true"
android:onClick="deleteInListButtonClick"
app:backgroundTint="@android:color/holo_blue_dark"
app:fabSize="normal"
app:layout_constraintBottom_toBottomOf="@+id/floatingSaveButton"
app:layout_constraintStart_toEndOf="@+id/floatingSaveButton"
app:srcCompat="@android:drawable/ic_delete" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingSettingsButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_weight="1"
android:clickable="true"
android:onClick="SettingsButtonClick"
app:backgroundTint="@android:color/holo_blue_dark"
app:fabSize="normal"
app:layout_constraintBottom_toBottomOf="@+id/floatingSaveButton"
app:layout_constraintStart_toEndOf="@+id/floatingSaveButton"
app:srcCompat="@android:drawable/ic_menu_manage" />
</LinearLayout>

</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>

5.2.2 ACTIVITY_NEW_DATA_ACTIVITY.XML

<?xml version="1.0" encoding="utf-8"?>


<android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/a
pk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.tom.diary.NewDataActivity">

<android.support.constraint.ConstraintLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp">

<EditText
android:id="@+id/newText"
android:layout_width="match_parent"
android:layout_height="435dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ellipsize="start"
android:background="@null"
android:ems="10"
android:inputType="textMultiLine"
android:singleLine="false"

android:gravity="top"
android:typeface="normal"
android:visibility="visible"
app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.101" />

<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.968">

<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingSaveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:onClick="saveButtonClick"
app:backgroundTint="@android:color/holo_blue_dark"
app:elevation="0dp"
app:fabSize="normal"
app:srcCompat="@android:drawable/ic_menu_save"
tools:layout_editor_absoluteX="244dp"
tools:layout_editor_absoluteY="495dp" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingDeleteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_weight="1"
android:clickable="true"
android:onClick="deleteButtonClick"
app:backgroundTint="@android:color/holo_blue_dark"
app:fabSize="normal"
app:srcCompat="@android:drawable/ic_menu_delete" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingCancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:clickable="true"
android:onClick="cancelButtonClick"
app:backgroundTint="@android:color/holo_blue_dark"
app:fabSize="normal"
app:layout_constraintBottom_toBottomOf="@+id/floatingSaveButton"
app:layout_constraintStart_toEndOf="@+id/floatingSaveButton"
app:srcCompat="@android:drawable/ic_delete" />
</LinearLayout>

</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
5.3LIST VIEW OF ENTRIES

5.3.1 ITEM_VIEW.XML

<?xml version="1.0" encoding="utf-8"?>


<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical">

<EditText
android:id="@+id/DateText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:ems="10"
android:background="@null"
android:inputType="datetime"
android:singleLine="false"
android:textSize="12sp" />

<TextView
android:id="@+id/ItemContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:layout_margin="5dp"
android:textAlignment="center"
android:textSize="35sp" />

</LinearLayout>
5.4 DELETING ENTRIES

6. RESULT & DISCUSSION


Personal Diary application provides a shared password to access and store other users’ event
details which can be shared by contacts. This application stores all the users’ events in
database. SQLite is used as a backend to store the information about event and user details
in the local database. User can add, update and delete event details in the application. Events
can be seen in a list view format like day/week/month and year. This application will
automatically synchronize phone book contacts from mobile phone. In the future, by using
two-step verification more security can be provided for Personal Diary shared password
which improves data security levels. Multiple accounts for a user can be implemented.
Additionally we can attract more users to use Personal Diary by providing better interface
with advanced functionalities. More importantly, this app can be extended to fetch events
not only from adding the entries in the form of text by also adding videos and images even
can also record the activities.
SUMMARY:
Through this app, it is easy to create a personal diary were we can create our memories and
thoughts. And we can also share to our beloved ones through the contact details. We can
also edit, delete, save the diaries that we create in this app. Here we have option to change
background themes.
References

1. Goasduff, L., Pettey, C.: Gartner says worldwide smartphone sales soared in fourth
quarter of 2011 with 47 percent growth, April 2012

2. Aizawa, K., Tancharoen, D., Kawasaki, S., Yamasaki, T.: Efficient retrieval of life
log based on context and content. In: Proceedings of the 1st ACM Workshop on
Continuous Archival and Retrieval of Personal Experiences, pp. 22–31. ACM (2004)

3. Hori, T., Aizawa, K.: Context-based video retrieval system for the life-log
applications. In: Proceedings of the 5th ACM SIGMM International Workshop on
Multimedia Information Retrieval, pp. 31–38. ACM (2003)

4. Tancharoen, D., Yamasaki, T., Aizawa, K.: Practical experience recording and
indexing of life log video. In: Proceedings of the 2nd ACM Won Continuous
Archival and Retrieval of Personal Experiences, pp. 61–66. ACM (2005)

5. Minamikawa, A., Kotsuka, N., Honjo, M., Morikawa, D., Nishiyama, S., Ohashi,
M.: Rfid supplement for mobile-based life log system. In: 2007 International
Symposium on Applications and the Internet Workshops (2007)

Anda mungkin juga menyukai